inventive-ui 0.0.4 → 0.0.6
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 +48 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/ui.ts","../src/utils/errors.ts","../src/utils/security/terminal.ts","../src/commands/login.ts","../src/services/auth.ts","../src/utils/security/apiOrigin.ts","../src/constants.ts","../src/utils/filesystem.ts","../src/utils/security/fsSecure.ts","../src/utils/atomic.ts","../src/utils/security/paths.ts","../src/utils/security/process.ts","../src/utils/version.ts","../src/utils/workspace.ts","../src/validation/registryManifest.ts","../src/utils/theme-config-scaffold.ts","../src/utils/security/identifiers.ts","../src/utils/config-patch/vite-config.ts","../src/utils/config-patch/iui-config.ts","../src/utils/config-patch/component-config.ts","../src/utils/componentExports.ts","../src/validation/configTierChecks.ts","../src/validation/configSchemas.ts","../src/services/iui-paths.ts","../src/utils/prompts.ts","../src/commands/init.ts","../src/services/license.ts","../src/services/project.ts","../src/constants/registry-api-errors.ts","../src/services/registry.ts","../src/services/framework.ts","../src/services/registry-download.ts","../src/utils/declared-deps.ts","../src/services/package-install.ts","../src/services/version-check.ts","../src/services/installer.ts","../src/services/slot-registry.ts","../src/services/registry-lock.ts","../src/services/slots.ts","../src/utils/public-slot-contract.ts","../src/utils/slot-emitters.ts","../src/utils/security/fsSafe.ts","../src/services/asset-bound.ts","../src/services/generated-paths.ts","../src/services/workspace-bootstrap.ts","../src/services/bootstrap.ts","../src/services/session.ts","../src/utils/datetime.ts","../src/services/install-context.ts","../src/services/assets.ts","../src/commands/assets.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/devices.ts","../src/commands/team.ts","../src/commands/deploy-token.ts","../src/commands/setup.ts","../src/commands/doctor.ts","../src/services/health.ts","../src/commands/list.ts","../src/commands/update.ts","../src/commands/framework.ts","../src/services/slot-registry-policy.ts"],"sourcesContent":["// ─── Inventive UI CLI ────────────────────────────────────────────────────────\n\nprocess.title = \"iui\";\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { printBanner } from \"./utils/ui.js\";\nimport { shouldShowBanner } from \"./utils/security/terminal.js\";\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { devicesListCommand, devicesRevokeCommand } from \"./commands/devices.js\";\nimport {\n teamAddCommand,\n teamListCommand,\n teamRemoveCommand,\n} from \"./commands/team.js\";\nimport {\n deployTokenCreateCommand,\n deployTokenListCommand,\n deployTokenRevokeCommand,\n} from \"./commands/deploy-token.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { frameworkInstallCommand } from \"./commands/framework.js\";\nimport {\n assetsAddCommand,\n assetsRemoveCommand,\n assetsListCommand,\n} from \"./commands/assets.js\";\nimport {\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource,\n} from \"./constants.js\";\nimport { ensureAuthSession } from \"./services/session.js\";\nimport { prepareInstallContext } from \"./services/install-context.js\";\nimport { installComponentsPackage } from \"./services/installer.js\";\nimport { ensureSlotRegistry } from \"./services/slot-registry.js\";\nimport { resolveSlotRegistryRunPolicy } from \"./services/slot-registry-policy.js\";\nimport { handleError, CLIError } from \"./utils/errors.js\";\nimport { isInsideProject } from \"./utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"./utils/workspace.js\";\nimport * as ui from \"./utils/ui.js\";\n\nconst program = new Command();\n\ndeclare const __CLI_VERSION__: string;\n\nconst AUTH_EXEMPT_COMMANDS = new Set([\n \"login\",\n \"logout\",\n \"whoami\",\n \"doctor\",\n \"list\",\n]);\n\nprogram\n .name(\"iui\")\n .description(\"The official CLI for the Inventive UI Design System\")\n .version(typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"1.0.0\")\n .option(\"-C, --cwd <dir>\", \"Run as if started in the given directory\")\n .option(\"-q, --quiet\", \"Minimal output (also respects IUI_QUIET=1)\")\n .option(\"--no-color\", \"Disable ANSI colors\");\n\nprogram\n .command(\"login\")\n .description(\"Authenticate with GitHub and link your license\")\n .option(\"-f, --force\", \"Force re-authentication and register this device\")\n .option(\"--bootstrap\", \"After login, run optional setup prompts\")\n .action((opts: { force?: boolean; bootstrap?: boolean }) => loginCommand(opts));\n\nprogram\n .command(\"logout\")\n .description(\"Remove stored credentials\")\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show authenticated identity and license details\")\n .action(whoamiCommand);\n\nconst team = program\n .command(\"team\")\n .description(\"Manage team seat assignments (admin only)\");\n\nteam\n .command(\"list\", { isDefault: true })\n .description(\"List team seat assignments\")\n .option(\"--all\", \"Include inactive/removed seat records\")\n .action((opts: { all?: boolean }) => teamListCommand(opts.all === true));\n\nteam\n .command(\"add [email]\")\n .description(\"Add a user email to the team seats\")\n .action((email?: string) => teamAddCommand(email));\n\nteam\n .command(\"remove [email]\")\n .description(\"Remove a user email from active team seats\")\n .action((email?: string) => teamRemoveCommand(email));\n\nconst devices = program\n .command(\"devices\")\n .description(\"Manage authorized CLI devices\");\n\ndevices\n .command(\"list\", { isDefault: true })\n .description(\"List all authorized devices\")\n .action(devicesListCommand);\n\ndevices\n .command(\"revoke [device-id]\")\n .description(\"Revoke an authorized device\")\n .action((deviceId?: string) => devicesRevokeCommand(deviceId));\n\nconst deployToken = program\n .command(\"deploy-token\")\n .description(\"Manage scoped deploy tokens for CI and hosting platforms\");\n\ndeployToken\n .command(\"list\", { isDefault: true })\n .description(\"List deploy tokens\")\n .action(deployTokenListCommand);\n\ndeployToken\n .command(\"create [name]\")\n .description(\"Create a new deploy token\")\n .option(\"--days <days>\", \"Token validity in days (1-30)\", \"7\")\n .option(\"--packages <packages>\", \"Comma-separated package ids or '*'\", \"*\")\n .action((name?: string, opts?: { days?: string; packages?: string }) =>\n deployTokenCreateCommand(name, opts),\n );\n\ndeployToken\n .command(\"revoke <token-id>\")\n .description(\"Revoke a deploy token\")\n .action((tokenId: string) => deployTokenRevokeCommand(tokenId));\n\nprogram\n .command(\"init\")\n .description(\"Initialize an Inventive UI project in the current directory\")\n .option(\"-f, --framework <framework>\", 'Framework preset: \"react\" | \"vite\"')\n .option(\"-y, --yes\", \"Run setup non-interactively with default confirmations\")\n .option(\n \"--workspace\",\n \"Monorepo only: initialize once at the workspace root and link all workspace apps\",\n )\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action(\n (opts: {\n source?: string;\n framework?: \"react\" | \"vite\";\n yes?: boolean;\n workspace?: boolean;\n }) => initCommand(opts),\n );\n\nprogram\n .command(\"setup\")\n .description(\"Set up a cloned project: configure registry, install dependencies, run diagnostics\")\n .option(\"--fix\", \"Apply safe automatic fixes during diagnostics\")\n .option(\"-y, --yes\", \"Run non-interactively with default confirmations\")\n .action((opts: { fix?: boolean; yes?: boolean }) => setupCommand(opts));\n\nprogram\n .command(\"list\")\n .description(\"Show installed components, packages, and project status\")\n .option(\"-a, --available\", \"Show all available components\")\n .action((opts: { available?: boolean }) => listCommand(opts));\n\nprogram\n .command(\"install <target> [packages...]\")\n .description(\"Install runtime targets: framework | components | assets [package-ids...]\")\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action(async (target: string, packages: string[], opts: { source?: string }) => {\n try {\n if (target === \"framework\") {\n await frameworkInstallCommand(opts);\n return;\n }\n if (target === \"components\") {\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n const auth = await ensureAuthSession();\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n await installComponentsPackage({\n token: auth.token,\n source: opts.source === \"registry\" ? \"registry\" : \"api\",\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n return;\n }\n if (target === \"assets\") {\n await assetsAddCommand(packages ?? [], opts);\n return;\n }\n throw new CLIError(\n `Unknown install target: ${target}`,\n \"Supported targets: framework, components, assets\",\n );\n } catch (error) {\n handleError(error);\n }\n });\n\nprogram\n .command(\"update\")\n .description(\"Check for and apply framework, component, and asset updates\")\n .option(\"-y, --yes\", \"Apply all eligible updates without prompts\")\n .option(\"--check\", \"Check for updates only (exit code 1 when updates exist)\")\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action((opts: { yes?: boolean; check?: boolean; source?: string }) => updateCommand(opts));\n\nconst assets = program\n .command(\"assets\")\n .description(\"Manage asset packages (icons, illustrations, logos, etc.)\");\n\nassets\n .command(\"remove <package>\")\n .description(\"Remove an installed asset package\")\n .action((pkg: string) => assetsRemoveCommand(pkg));\n\nassets\n .command(\"list\")\n .description(\"Show all available and installed asset packages\")\n .action(assetsListCommand);\n\nprogram\n .command(\"doctor\")\n .description(\"Run project health diagnostics (read-only by default)\")\n .option(\"--fix\", \"Apply safe config patches (iui.config, vite.config, component.config)\")\n .option(\"--config-only\", \"Validate project config tiers only (no auth/registry)\")\n .action((opts: { fix?: boolean; configOnly?: boolean }) => doctorCommand(opts));\n\nif (shouldShowBanner()) {\n printBanner();\n}\n\nfunction topLevelCommandName(cmd: Command): string {\n let current = cmd;\n while (current.parent && current.parent.parent) {\n current = current.parent;\n }\n return current.name();\n}\n\nprogram.hook(\"preAction\", async (_thisCommand, actionCommand) => {\n const root = topLevelCommandName(actionCommand);\n const globalOpts = program.opts<{ cwd?: string }>();\n if (globalOpts.cwd) {\n process.chdir(path.resolve(globalOpts.cwd));\n }\n\n if (isInsideProject()) {\n try {\n const actionOpts =\n typeof (actionCommand as { opts?: () => Record<string, unknown> }).opts === \"function\"\n ? (actionCommand as { opts: () => Record<string, unknown> }).opts()\n : {};\n const slotPolicy = resolveSlotRegistryRunPolicy(root, {\n fix: actionOpts.fix === true,\n });\n const result = await ensureSlotRegistry({\n quiet: true,\n repairInstall: slotPolicy.repairInstall,\n mode: slotPolicy.mode,\n });\n if (result.status === \"repaired\") {\n ui.info(\"Slot registry repaired\");\n }\n } catch (error) {\n if (error instanceof CLIError) {\n ui.warn(error.message);\n if (error.hint) ui.hint(error.hint);\n } else {\n ui.warn(\"Slot registry validation failed; run iui doctor for diagnostics.\");\n }\n }\n }\n\n if (AUTH_EXEMPT_COMMANDS.has(root)) return;\n\n try {\n await ensureAuthSession();\n } catch (error) {\n handleError(error);\n }\n});\n\nprogram.parse();\n","// ─── UI Primitives ───────────────────────────────────────────────────────────\n//\n// Enterprise-grade terminal output for the Inventive UI CLI.\n\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport chalk from \"chalk\";\nimport gradient from \"gradient-string\";\nimport boxen from \"boxen\";\nimport { sanitizeTerminalOutput, shouldUseColor } from \"./security/terminal.js\";\n\ndeclare const __CLI_VERSION__: string;\n\nif (!shouldUseColor()) {\n chalk.level = 0;\n}\n\n// ── Brand palette ────────────────────────────────────────────────────────────\nconst BRAND = \"#6C5CE7\";\nconst ACCENT = \"#00CEFF\";\nconst SUCCESS = \"#00D68F\";\nconst WARNING = \"#FFAA00\";\nconst DANGER = \"#FF3D71\";\nconst DIM_FG = \"#6B7280\";\nconst SUBTLE = \"#A0AEC0\";\n\nconst brand = chalk.hex(BRAND);\nconst accent = chalk.hex(ACCENT);\nconst success = chalk.hex(SUCCESS);\nconst warning = chalk.hex(WARNING);\nconst danger = chalk.hex(DANGER);\nconst dim = chalk.hex(DIM_FG);\nconst subtle = chalk.hex(SUBTLE);\n\nconst iuiGradient = gradient([\"#4338CA\", \"#6C5CE7\", \"#8B5CF6\", \"#6366F1\"]);\n\n// ── First-run state ───────────────────────────────────────────────────────────\n\nconst BANNER_SEEN_FILE = path.join(os.homedir(), \".iui\", \".banner-seen\");\n\nfunction hasBannerBeenSeen(): boolean {\n try {\n return fs.existsSync(BANNER_SEEN_FILE);\n } catch {\n return false;\n }\n}\n\nfunction markBannerSeen(): void {\n try {\n fs.ensureDirSync(path.dirname(BANNER_SEEN_FILE));\n fs.writeFileSync(BANNER_SEEN_FILE, new Date().toISOString(), \"utf8\");\n } catch {\n // silently ignore — never let banner state block a command\n }\n}\n\n// ── ASCII Banners ────────────────────────────────────────────────────────────\n\nconst BANNER_FULL = [\n \" █████ █████ ███ █████ ██████████\",\n \"░░███ ░░███ ░░░ ░░███ ░░███░░███\",\n \" ░███ ████████ █████ █████ ██████ ████████ ███████ ████ █████ █████ ██████ ░███ ░███ ░███\",\n \" ░███░░███░░███░░███ ░░███ ███░░███░░███░░███░░░███░ ░░███░░███ ░░███ ███░░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███ ░███░███████ ░███ ░███ ░███ ░███ ░███ ░███░███████ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░░███ ███ ░███░░░ ░███ ░███ ░███ ███░███ ░░███ ███ ░███░░░ ░███ ░███ ░███\",\n \" █████████ █████ ░░█████ ░░██████ ████ █████ ░░█████ █████ ░░█████ ░░██████ ░░████████ █████\",\n \"░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░\",\n];\n\nconst BANNER_COMPACT = [\n \" ██████████ ██████████\",\n \"░░███░░███ ░░███░░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" █████░░████████ █████\",\n \"░░░░░ ░░░░░░░░ ░░░░░\",\n];\n\nconst FULL_BANNER_WIDTH = 101;\n\nfunction resolveCliVersion(): string {\n try {\n return typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"1.0.0\";\n } catch {\n return \"1.0.0\";\n }\n}\n\nexport function printBanner(): void {\n if (hasBannerBeenSeen()) {\n printCompactBanner();\n return;\n }\n\n const cols = process.stdout.columns ?? 80;\n const lines = cols >= FULL_BANNER_WIDTH ? BANNER_FULL : BANNER_COMPACT;\n const version = resolveCliVersion();\n\n console.log();\n console.log(iuiGradient.multiline(lines.join(\"\\n\")));\n console.log();\n console.log(` ${dim(\"Inventive UI Design System\")} ${dim(`v${version}`)}`);\n console.log();\n\n markBannerSeen();\n}\n\nexport function printCompactBanner(): void {\n const version = resolveCliVersion();\n console.log();\n console.log(\n ` ${brand.bold(\"◆\")} ${chalk.white.bold(\"iui\")} ${dim(`v${version}`)}`,\n );\n console.log();\n}\n\n// ── Headers ──────────────────────────────────────────────────────────────────\n\nconst PREFIX = chalk.white.bold(\"iui\");\n\nexport function heading(title: string): void {\n console.log();\n console.log(` ${PREFIX} ${dim(\"·\")} ${chalk.white.bold(title)}`);\n console.log();\n}\n\nexport function subheading(title: string): void {\n console.log();\n console.log(` ${subtle(title)}`);\n console.log();\n}\n\n// ── Tree connectors (explicit tree output only) ───────────────────────────────\n\nexport function treeItem(msg: string, last = false): void {\n const connector = last ? dim(\"└\") : dim(\"├\");\n console.log(` ${connector} ${msg}`);\n}\n\nexport function treeLine(): void {\n console.log(` ${dim(\"│\")}`);\n}\n\n// ── Status lines ─────────────────────────────────────────────────────────────\n\nexport function info(msg: string): void {\n console.log(` ${chalk.blue(\"○\")} ${msg}`);\n}\n\nexport function ok(msg: string): void {\n console.log(` ${success(\"✓\")} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(` ${warning(\"▲\")} ${chalk.yellow(msg)}`);\n}\n\nexport function fail(msg: string): void {\n console.error(` ${danger(\"✗\")} ${chalk.red(msg)}`);\n}\n\nexport function step(msg: string): void {\n console.log(` ${dim(\"·\")} ${msg}`);\n}\n\nexport function done(msg: string): void {\n console.log();\n console.log(` ${success(\"✓\")} ${chalk.white.bold(msg)}`);\n console.log();\n}\n\nexport function newline(): void {\n console.log();\n}\n\n// ── Key-value ────────────────────────────────────────────────────────────────\n\nexport function kv(key: string, value: string): void {\n const paddedKey = dim(`${sanitizeTerminalOutput(key)}:`.padEnd(22));\n console.log(` ${paddedKey}${sanitizeTerminalOutput(value)}`);\n}\n\nexport function kvInline(key: string, value: string): void {\n console.log(` ${dim(key + \":\")} ${value}`);\n}\n\n// ── Lists ────────────────────────────────────────────────────────────────────\n\nexport function bulletItem(label: string, detail?: string): void {\n const d = detail ? ` ${dim(detail)}` : \"\";\n console.log(` ${dim(\"·\")} ${label}${d}`);\n}\n\nexport function numberedItem(n: number, label: string, detail?: string): void {\n const d = detail ? ` ${dim(detail)}` : \"\";\n const num = dim(`${String(n).padStart(2)}.`);\n console.log(` ${num} ${label}${d}`);\n}\n\n// ── Update rows ──────────────────────────────────────────────────────────────\n\nexport function updateRow(\n name: string,\n from: string,\n to: string,\n eligible: boolean,\n): void {\n const arrow = dim(\"→\");\n const status = eligible\n ? success(to)\n : danger(\"locked\") + dim(\" (update window expired)\");\n console.log(\n ` ${chalk.white(name.padEnd(22))} ${dim(from)} ${arrow} ${status}`,\n );\n}\n\n// ── Checks ───────────────────────────────────────────────────────────────────\n\nexport function checkPass(label: string): void {\n console.log(` ${success(\"✓\")} ${label}`);\n}\n\nexport function checkFail(label: string): void {\n console.log(` ${danger(\"✗\")} ${label}`);\n}\n\n// ── Boxes ────────────────────────────────────────────────────────────────────\n\nexport function boxMessage(title: string, lines: string[]): void {\n const content = [chalk.white.bold(title), \"\", ...lines].join(\"\\n\");\n console.log(\n boxen(content, {\n padding: 1,\n margin: { top: 1, bottom: 1, left: 2, right: 0 },\n borderColor: \"#6C5CE7\",\n borderStyle: \"round\",\n }),\n );\n}\n\nexport function inputBox(title: string, hint?: string): void {\n const lines = [chalk.white.bold(title)];\n if (hint) lines.push(subtle(hint));\n console.log(\n boxen(lines.join(\"\\n\"), {\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 0, bottom: 0, left: 2, right: 0 },\n borderColor: \"cyan\",\n borderStyle: \"round\",\n dimBorder: false,\n }),\n );\n}\n\n// ── Hints / next-steps ───────────────────────────────────────────────────────\n\nexport function hint(msg: string): void {\n console.log(` ${dim(sanitizeTerminalOutput(msg))}`);\n}\n\nexport function nextSteps(steps: string[]): void {\n const lines = steps.map((s) => `${accent(\"$\")} ${chalk.white(s)}`);\n console.log(\n boxen(lines.join(\"\\n\"), {\n title: dim(\"Next steps\"),\n titleAlignment: \"left\",\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 1, bottom: 1, left: 2, right: 0 },\n borderColor: \"gray\",\n borderStyle: \"round\",\n dimBorder: true,\n }),\n );\n}\n\n// ── Separator ────────────────────────────────────────────────────────────────\n\nexport function separator(): void {\n console.log(` ${dim(\"─\".repeat(48))}`);\n}\n\n// ── Re-exports ───────────────────────────────────────────────────────────────\n\nexport { brand, accent, success, warning, danger, dim, subtle };\nexport { chalk };\n","// ─── Error helpers ───────────────────────────────────────────────────────────\n\nimport * as ui from \"./ui.js\";\nimport boxen from \"boxen\";\n\n/** stderr/stdout from failed `execSync` / `spawnSync` (Node attaches these on status !== 0). */\nexport function formatExecSyncError(err: unknown): string | null {\n if (err instanceof CLIError) {\n const parts = [err.message, err.hint].filter(\n (part): part is string => typeof part === \"string\" && part.trim().length > 0,\n );\n return parts.length > 0 ? parts.join(\"\\n\") : null;\n }\n\n const e = err as {\n stderr?: unknown;\n stdout?: unknown;\n error?: { message?: string };\n message?: string;\n };\n const spawnErr =\n e?.error && typeof e.error.message === \"string\" ? e.error.message : null;\n const stderr =\n typeof e?.stderr === \"string\"\n ? e.stderr\n : Buffer.isBuffer(e?.stderr)\n ? e.stderr.toString(\"utf8\")\n : null;\n const stdout =\n typeof e?.stdout === \"string\"\n ? e.stdout\n : Buffer.isBuffer(e?.stdout)\n ? e.stdout.toString(\"utf8\")\n : null;\n const msg =\n err instanceof Error\n ? err.message\n : typeof e?.message === \"string\"\n ? e.message\n : spawnErr ?? (typeof err === \"string\" ? err : null);\n const joined = [msg, stderr, stdout].filter(Boolean).join(\"\\n\");\n return joined.trim() ? joined.trim() : null;\n}\n\n/** e.g. `ECONNRESET`, `ENOTFOUND` from `fetch` / Node errors */\nexport function getNodeErrorCode(err: unknown): string | undefined {\n if (err && typeof err === \"object\" && \"code\" in err) {\n const c = (err as { code?: unknown }).code;\n if (typeof c === \"string\") return c;\n if (c != null) return String(c);\n }\n return undefined;\n}\n\nfunction parseRetryAfterSeconds(value: string | null): number | null {\n if (!value) return null;\n\n const asNumber = Number(value);\n if (Number.isFinite(asNumber) && asNumber >= 0) {\n return Math.ceil(asNumber);\n }\n\n const when = Date.parse(value);\n if (Number.isNaN(when)) return null;\n const diffSec = Math.ceil((when - Date.now()) / 1000);\n return diffSec > 0 ? diffSec : 0;\n}\n\nfunction formatRetryAfter(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n if (secs === 0) return `${mins}m`;\n return `${mins}m ${secs}s`;\n}\n\nexport function throwIfRateLimited(response: Response, action: string): void {\n if (response.status !== 429) return;\n\n const retryAfter = parseRetryAfterSeconds(response.headers.get(\"retry-after\"));\n const hint = retryAfter === null\n ? \"Please retry shortly.\"\n : `Retry in ${formatRetryAfter(retryAfter)}.`;\n\n throw new CLIError(`Too many requests while ${action}.`, hint);\n}\n\nexport class CLIError extends Error {\n public readonly hint?: string;\n\n constructor(message: string, hint?: string) {\n super(message);\n this.name = \"CLIError\";\n this.hint = hint;\n Object.setPrototypeOf(this, CLIError.prototype);\n }\n}\n\n/**\n * Handle errors uniformly. Prints a branded, actionable error block and exits.\n */\nexport function handleError(error: unknown, exitCode = 1): never {\n console.log();\n\n if (error instanceof CLIError) {\n const lines = error.message.split(\"\\n\");\n const primary = lines[0];\n const rest = lines.slice(1);\n\n ui.fail(primary);\n\n for (const line of rest) {\n if (line.trim()) ui.hint(line);\n }\n\n if (error.hint) {\n console.log();\n console.log(\n boxen(`${ui.accent(\"$\")} ${ui.chalk.white(error.hint)}`, {\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 0, bottom: 0, left: 2, right: 0 },\n borderColor: \"#6C5CE7\",\n borderStyle: \"round\",\n dimBorder: true,\n title: ui.dim(\"fix\"),\n titleAlignment: \"left\",\n }),\n );\n }\n } else if (error instanceof Error) {\n ui.fail(error.message);\n } else {\n ui.fail(String(error));\n }\n\n console.log();\n const code =\n exitCode === 130 || (error instanceof CLIError && /cancelled/i.test(error.message))\n ? 130\n : exitCode;\n process.exit(code);\n}\n","// ─── Terminal output sanitization ──────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nconst CONTROL_CHARS =\r\n /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F\\u009B\\u009C\\u009D\\u009E\\u009F]/g;\r\n\r\n/** Strip control characters and ANSI/OSC sequences from untrusted strings. */\r\nexport function sanitizeTerminalOutput(value: string): string {\r\n return value\r\n .replace(/\\x1B\\][^\\x07]*(\\x07|\\x1B\\\\)/g, \"\")\r\n .replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, \"\")\r\n .replace(CONTROL_CHARS, \"\");\r\n}\r\n\r\nexport function shouldUseColor(): boolean {\r\n if (process.env.NO_COLOR !== undefined) return false;\r\n if (process.env.FORCE_COLOR === \"0\") return false;\r\n return Boolean(process.stdout.isTTY);\r\n}\r\n\r\nexport function shouldShowBanner(argv: string[] = process.argv): boolean {\r\n if (process.env.IUI_NO_BANNER === \"1\") return false;\r\n if (process.env.CI === \"true\" || process.env.CI === \"1\") return false;\r\n if (!process.stdout.isTTY) return false;\r\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) return false;\r\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) return false;\r\n return true;\r\n}\r\n\r\nexport function isInteractiveSession(): boolean {\r\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\r\n}\r\n\r\nexport function assertInteractivePrompt(context: string): void {\r\n if (isInteractiveSession() && process.env.IUI_CI !== \"1\") return;\r\n throw new CLIError(\r\n `Cannot run interactive ${context} in non-interactive mode.`,\r\n \"Pass required arguments, use -y/--yes where supported, or set IUI_CI=1 only in trusted CI with explicit flags.\",\r\n );\r\n}\r\n","// ─── iui login ───────────────────────────────────────────────────────────────\n\nimport ora from \"ora\";\nimport {\n startLogin,\n getAuthConfig,\n validateAuthToken,\n mergeValidatedAuth,\n} from \"../services/auth.js\";\nimport {\n writeGlobalNpmrcAuth,\n writeGlobalConfig,\n hasPackageJson,\n isInsideProject,\n ensureGitignoreHasNpmrc,\n} from \"../utils/filesystem.js\";\nimport { confirm } from \"../utils/prompts.js\";\nimport { initCommand } from \"./init.js\";\nimport { assetsAddCommand } from \"./assets.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { isInteractiveSession } from \"../utils/security/terminal.js\";\n\ntype LoginOptions = {\n force?: boolean;\n bootstrap?: boolean;\n};\n\nasync function runPostLoginBootstrap(): Promise<void> {\n const insideProject = isInsideProject();\n if (!insideProject) {\n if (!hasPackageJson()) {\n ui.hint(\"No package.json in this directory. Skipping initialization flow.\");\n return;\n }\n\n const shouldInit = await confirm(\"Initialize this project now?\", true);\n if (!shouldInit) return;\n await initCommand({ yes: process.env.IUI_YES === \"1\" || process.env.IUI_CI === \"1\" });\n }\n\n const shouldInstallAssets = await confirm(\"Install asset packages now?\", true);\n if (shouldInstallAssets) {\n await assetsAddCommand([]);\n }\n}\n\nexport async function loginCommand(opts?: LoginOptions): Promise<void> {\n try {\n ui.heading(\"Login\");\n const forceLogin = opts?.force === true;\n const runBootstrap = opts?.bootstrap === true;\n\n const existing = getAuthConfig();\n if (existing?.token && !forceLogin) {\n const validation = await validateAuthToken(existing.token).catch(() => null);\n if (validation?.valid) {\n const profile = mergeValidatedAuth(existing, validation);\n writeGlobalConfig(profile);\n\n ui.ok(\"Already signed in\");\n ui.kv(\"GitHub\", profile.github_id ?? \"—\");\n ui.kv(\"Email\", profile.email ?? \"—\");\n ui.kv(\"Role\", (profile.role ?? \"user\").toUpperCase());\n if (profile.plan_type) {\n ui.kv(\"Plan\", profile.plan_type === \"team\" ? \"Team\" : \"Individual\");\n }\n\n writeGlobalNpmrcAuth(profile.token);\n if (runBootstrap && isInteractiveSession()) {\n await runPostLoginBootstrap();\n } else if (runBootstrap) {\n ui.hint(\"Skipping bootstrap in non-interactive mode. Run iui init manually.\");\n }\n return;\n }\n\n ui.warn(\"Stored session is no longer valid. Re-authenticating…\");\n }\n\n if (existing?.token && forceLogin) {\n ui.hint(\"Forcing re-authentication and device registration.\");\n }\n\n ui.step(\"Opening browser for GitHub authentication…\");\n\n const spinner = ora({ text: \"Waiting for GitHub…\", prefixText: \" \" }).start();\n const config = await startLogin();\n spinner.succeed(\"Authenticated\");\n\n writeGlobalNpmrcAuth(config.token);\n ensureGitignoreHasNpmrc();\n\n ui.newline();\n ui.kv(\"GitHub\", config.github_id || \"—\");\n ui.kv(\"Email\", config.email || \"—\");\n ui.kv(\"Role\", (config.role ?? \"user\").toUpperCase());\n\n ui.done(\"You're in. Welcome to Inventive UI.\");\n\n if (runBootstrap && isInteractiveSession()) {\n await runPostLoginBootstrap();\n } else if (!runBootstrap) {\n ui.nextSteps([\"iui init — Set up this project\", \"iui list — View components\"]);\n }\n } catch (error) {\n handleError(error);\n }\n}\n","import open from \"open\";\nimport {\n API_BASE_URL,\n OAUTH_POLL_INTERVAL,\n OAUTH_MAX_ATTEMPTS,\n API_REQUEST_TIMEOUT_MS,\n} from \"../constants.js\";\nimport { assertSafeOAuthUrl } from \"../utils/security/apiOrigin.js\";\nimport type {\n AuthSession,\n AuthPollResult,\n GlobalConfig,\n DeviceInfo,\n DeployTokenInfo,\n DeployTokenCreateResult,\n AuthValidation,\n} from \"../types.js\";\nimport {\n readGlobalConfig,\n writeGlobalConfig,\n removeGlobalConfig,\n removeGlobalNpmrcAuth,\n} from \"../utils/filesystem.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\n\nasync function api<T>(path: string, opts?: RequestInit): Promise<T> {\n const res = await fetch(`${API_BASE_URL}${path}`, {\n ...opts,\n signal: opts?.signal ?? AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...opts?.headers },\n });\n throwIfRateLimited(res, `calling ${path}`);\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(`API error ${res.status}: ${body || res.statusText}`);\n }\n return res.json() as Promise<T>;\n}\n\nfunction parseApiErrorBody(body: string, fallback: string): string {\n const trimmed = body.trim();\n if (!trimmed) return fallback;\n if (!trimmed.startsWith(\"{\")) return `${fallback}: ${trimmed}`;\n try {\n const parsed = JSON.parse(trimmed) as { error?: unknown };\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n return parsed.error;\n }\n } catch {\n // ignore JSON parse errors, keep fallback\n }\n return fallback;\n}\n\nexport function mergeValidatedAuth(config: GlobalConfig, validation: AuthValidation): GlobalConfig {\n const githubLogin = validation.github_login?.trim();\n return {\n ...config,\n email: validation.email ?? config.email,\n github_id: githubLogin || config.github_id,\n role: validation.role ?? config.role,\n plan_type: validation.plan_type ?? config.plan_type,\n license_id: validation.license_id ?? config.license_id,\n expires_at: validation.expires_at ?? config.expires_at,\n };\n}\n\nlet validatedAuthCache: { token: string; config: GlobalConfig; at: number } | null = null;\nconst VALIDATED_AUTH_TTL_MS = 60_000;\n\nexport async function startLogin(): Promise<GlobalConfig> {\n const session = await api<AuthSession>(\"/auth/login\", { method: \"POST\" });\n assertSafeOAuthUrl(session.auth_url);\n\n console.log(`\\n If the browser does not open, visit:\\n ${session.auth_url}\\n`);\n\n try {\n await open(session.auth_url);\n } catch {\n /* headless / SSH — URL printed above */\n }\n\n const abort = new AbortController();\n const onSigint = (): void => {\n abort.abort();\n };\n process.once(\"SIGINT\", onSigint);\n\n let attempts = 0;\n try {\n while (attempts < OAUTH_MAX_ATTEMPTS && !abort.signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, OAUTH_POLL_INTERVAL));\n attempts++;\n\n const result = await api<AuthPollResult>(\n `/auth/cli/poll?poll_token=${encodeURIComponent(session.poll_token)}`,\n );\n\n if (result.status === \"complete\" && result.token) {\n const expiresAt =\n typeof result.token_ttl_seconds === \"number\"\n ? new Date(Date.now() + result.token_ttl_seconds * 1000).toISOString()\n : undefined;\n\n const config: GlobalConfig = {\n token: result.token,\n github_id: result.github_login ?? \"\",\n email: result.email,\n role: result.role,\n license_id: result.license_id,\n expires_at: expiresAt,\n };\n writeGlobalConfig(config);\n return config;\n }\n\n if (result.status === \"expired\") {\n throw new CLIError(\n result.error ?? \"Authentication session expired. Please try again.\",\n );\n }\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n\n if (abort.signal.aborted) {\n throw new CLIError(\"Login cancelled.\");\n }\n\n throw new CLIError(\"Authentication timed out. Please try again.\");\n}\n\nexport async function validateAuthToken(token: string): Promise<AuthValidation> {\n const res = await fetch(`${API_BASE_URL}/auth/validate`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"validating your session\");\n\n if (res.status === 401) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n return { valid: false, error: body.error ?? \"Unauthorized\" };\n }\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Session validation failed (${res.status}).`));\n }\n\n const payload = (await res.json()) as AuthValidation;\n if (!payload.valid) {\n return { valid: false, error: payload.error ?? \"Session is not valid.\" };\n }\n\n return payload;\n}\n\nexport async function requireValidatedAuth(): Promise<GlobalConfig> {\n const config = requireAuth();\n const validation = await validateAuthToken(config.token);\n if (!validation.valid) {\n validatedAuthCache = null;\n throw new CLIError(\n validation.error ?? \"Authentication expired or seat access was removed.\",\n \"iui login\",\n );\n }\n\n const merged = mergeValidatedAuth(config, validation);\n writeGlobalConfig(merged);\n validatedAuthCache = { token: merged.token, config: merged, at: Date.now() };\n return merged;\n}\n\n/** Cached session validation to avoid redundant network calls per CLI invocation. */\nexport async function requireValidatedAuthCached(): Promise<GlobalConfig> {\n const config = requireAuth();\n if (\n validatedAuthCache &&\n validatedAuthCache.token === config.token &&\n Date.now() - validatedAuthCache.at < VALIDATED_AUTH_TTL_MS\n ) {\n return validatedAuthCache.config;\n }\n return requireValidatedAuth();\n}\n\nexport async function listDevices(token: string): Promise<DeviceInfo[]> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/devices`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing devices\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) throw new CLIError(`Failed to list devices (${res.status}).`);\n const { devices } = (await res.json()) as { devices: DeviceInfo[] };\n return devices;\n}\n\nexport async function revokeDevice(token: string, deviceId: string): Promise<void> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/revoke`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ deviceId }),\n });\n throwIfRateLimited(res, \"revoking a device\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) throw new CLIError(`Failed to revoke device (${res.status}).`);\n}\n\nexport async function listDeployTokens(token: string): Promise<DeployTokenInfo[]> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing deploy tokens\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to list deploy tokens (${res.status}).`));\n }\n const data = (await res.json()) as { tokens?: DeployTokenInfo[] };\n return Array.isArray(data.tokens) ? data.tokens : [];\n}\n\nexport async function createDeployToken(\n token: string,\n input: { name?: string; expiresInDays?: number; packages?: string | string[] },\n): Promise<DeployTokenCreateResult> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({\n name: input.name,\n expires_in_days: input.expiresInDays,\n packages: input.packages,\n }),\n });\n throwIfRateLimited(res, \"creating deploy token\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to create deploy token (${res.status}).`));\n }\n return res.json() as Promise<DeployTokenCreateResult>;\n}\n\nexport async function revokeDeployToken(token: string, tokenId: string): Promise<void> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens/revoke`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ tokenId }),\n });\n throwIfRateLimited(res, \"revoking deploy token\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to revoke deploy token (${res.status}).`));\n }\n}\n\nexport function getAuthConfig(): GlobalConfig | null {\n return readGlobalConfig();\n}\n\nexport function requireAuth(): GlobalConfig {\n const config = readGlobalConfig();\n if (!config?.token) throw new CLIError(\"Not authenticated.\", \"iui login\");\n return config;\n}\n\nexport function logout(): void {\n validatedAuthCache = null;\n removeGlobalConfig();\n removeGlobalNpmrcAuth();\n}\n\nexport function authHeader(token: string): Record<string, string> {\n return { Authorization: `Bearer ${token}` };\n}\n","// ─── API origin validation ───────────────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nexport const DEFAULT_API_BASE_URL = \"https://api.inventiveui.com\";\r\n\r\nconst LOCAL_DEV_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\r\n\r\nfunction normalizeEnvFlag(value: string | undefined): boolean {\r\n if (!value) return false;\r\n const v = value.trim().toLowerCase();\r\n return v === \"1\" || v === \"true\" || v === \"yes\";\r\n}\r\n\r\nfunction isLocalDevUrl(url: URL): boolean {\r\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\r\n return LOCAL_DEV_HOSTS.has(url.hostname);\r\n}\r\n\r\nfunction isAllowedProductionHost(hostname: string): boolean {\r\n const h = hostname.toLowerCase();\r\n return h === \"api.inventiveui.com\" || h.endsWith(\".inventiveui.com\");\r\n}\r\n\r\n/**\r\n * Resolve and validate the Inventive UI API base URL.\r\n * Custom origins require IUI_ALLOW_CUSTOM_API=1 unless they are local dev hosts.\r\n */\r\nexport function resolveApiBaseUrl(): string {\r\n const raw = process.env.IUI_API_URL?.trim();\r\n if (!raw) return DEFAULT_API_BASE_URL;\r\n\r\n let parsed: URL;\r\n try {\r\n parsed = new URL(raw);\r\n } catch {\r\n throw new CLIError(\r\n `Invalid IUI_API_URL: \"${raw}\"`,\r\n \"Use a full URL such as https://api.inventiveui.com\",\r\n );\r\n }\r\n\r\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\r\n throw new CLIError(\r\n `Unsupported IUI_API_URL protocol: ${parsed.protocol}`,\r\n \"Only http: and https: are allowed.\",\r\n );\r\n }\r\n\r\n if (parsed.username || parsed.password) {\r\n throw new CLIError(\r\n \"IUI_API_URL must not include credentials in the URL.\",\r\n \"Set auth via iui login instead.\",\r\n );\r\n }\r\n\r\n if (parsed.pathname && parsed.pathname !== \"/\" && parsed.pathname !== \"\") {\r\n // Allow path prefixes like /v1 if explicitly configured\r\n const path = parsed.pathname.replace(/\\/+$/, \"\");\r\n if (path && !/^\\/[a-zA-Z0-9._/-]+$/.test(path)) {\r\n throw new CLIError(\r\n \"IUI_API_URL path contains invalid characters.\",\r\n \"Use a simple path prefix such as /v1\",\r\n );\r\n }\r\n }\r\n\r\n const allowCustom = normalizeEnvFlag(process.env.IUI_ALLOW_CUSTOM_API);\r\n\r\n if (isAllowedProductionHost(parsed.hostname) || isLocalDevUrl(parsed)) {\r\n return parsed.origin + (parsed.pathname === \"/\" ? \"\" : parsed.pathname.replace(/\\/+$/, \"\"));\r\n }\r\n\r\n if (allowCustom) {\r\n if (parsed.protocol !== \"https:\") {\r\n throw new CLIError(\r\n \"Custom IUI_API_URL must use https:// when not targeting localhost.\",\r\n \"Set IUI_ALLOW_CUSTOM_API=1 only for trusted development endpoints.\",\r\n );\r\n }\r\n return parsed.origin + (parsed.pathname === \"/\" ? \"\" : parsed.pathname.replace(/\\/+$/, \"\"));\r\n }\r\n\r\n throw new CLIError(\r\n `IUI_API_URL host \"${parsed.hostname}\" is not allowed.`,\r\n [\r\n \"Use the default https://api.inventiveui.com,\",\r\n \"a localhost URL for development,\",\r\n \"or set IUI_ALLOW_CUSTOM_API=1 for a trusted custom HTTPS API.\",\r\n ].join(\" \"),\r\n );\r\n}\r\n\r\nexport function assertSafeOAuthUrl(authUrl: string): void {\r\n let parsed: URL;\r\n try {\r\n parsed = new URL(authUrl);\r\n } catch {\r\n throw new CLIError(\"Invalid authentication URL returned by the API.\");\r\n }\r\n\r\n if (parsed.protocol !== \"https:\") {\r\n throw new CLIError(\r\n \"Refusing to open a non-HTTPS authentication URL.\",\r\n authUrl,\r\n );\r\n }\r\n\r\n const host = parsed.hostname.toLowerCase();\r\n const allowed =\r\n host === \"github.com\" ||\r\n host.endsWith(\".github.com\") ||\r\n isAllowedProductionHost(host) ||\r\n isLocalDevUrl(parsed);\r\n\r\n if (!allowed) {\r\n throw new CLIError(\r\n `Refusing to open authentication URL with untrusted host: ${parsed.hostname}`,\r\n \"If this is expected, verify IUI_API_URL and your network.\",\r\n );\r\n }\r\n}\r\n","// ─── IUI CLI Constants ───────────────────────────────────────────────────────\n//\n// Infrastructure constants, asset package catalogue, and config defaults.\n// Component metadata (names, slot types, etc.) is served by the API from the\n// published @inventive-ui/components package — nothing component-specific\n// is hardcoded here.\n\nimport { resolveApiBaseUrl } from \"./utils/security/apiOrigin.js\";\n\n/** Official API base URL for the Inventive UI backend (validated at startup) */\nexport const API_BASE_URL = resolveApiBaseUrl();\n\n/** npm package name for the core Framework engine */\nexport const FRAMEWORK_PACKAGE = \"@inventive-ui/framework\";\n\n/** Minimum framework version with compile-first CSS pipeline support */\nexport const COMPILE_FIRST_MIN_FRAMEWORK_VERSION = \"1.0.50\";\n\n/** npm package name for the component library */\nexport const COMPONENTS_PACKAGE = \"@inventive-ui/components\";\n\n/** npm registry scope */\nexport const NPM_SCOPE = \"@inventive-ui\";\n\n/** Local hidden metadata directory created inside every project */\nexport const IUI_DIR = \".iui\";\n\n/** Global config directory in the user's home folder */\nexport const GLOBAL_CONFIG_DIR = \".iui\";\n\n/** Managed project-level config file */\nexport const PROJECT_CONFIG_FILE = \"iui.config.ts\";\n\n/** Default target directory for installed UI components */\nexport const DEFAULT_COMPONENTS_DIR = \"src/components/ui\";\n\n/** Default target directory for framework source files */\nexport const DEFAULT_FRAMEWORK_DIR = \"src/framework\";\n\n/** Required React major version */\nexport const REQUIRED_REACT_MAJOR = 19;\n\n/** Safe React version to install when missing or outdated */\nexport const REACT_SAFE_VERSION = \"^19.0.0\";\n\n/** Minimum Vite major version supported by Inventive UI (Vite 6+) */\nexport const REQUIRED_VITE_MAJOR = 6;\n\n/** Safe Vite version to install when missing or outdated */\nexport const VITE_SAFE_VERSION = \"^6.0.0\";\n\n/** Minimum @vitejs/plugin-react major (4+ works with Vite 6/7) */\nexport const REQUIRED_VITE_PLUGIN_REACT_MAJOR = 4;\n\n/** Safe @vitejs/plugin-react version to install */\nexport const VITE_PLUGIN_REACT_SAFE_VERSION = \"^4.0.0\";\n\n/** Node types for vite.config.ts (node:fs, node:path, etc.) */\nexport const NODE_TYPES_SAFE_VERSION = \"^22.0.0\";\n\n/** GitHub OAuth callback path */\nexport const OAUTH_CALLBACK_PATH = \"/auth/cli/callback\";\n\n/** Polling interval (ms) while waiting for OAuth */\nexport const OAUTH_POLL_INTERVAL = 2000;\n\n/** Maximum OAuth polling attempts (2s interval; 10 minutes total) */\nexport const OAUTH_MAX_ATTEMPTS = 300;\n\n/** Default request timeout (ms) for API calls — avoid hanging. */\nexport const API_REQUEST_TIMEOUT_MS = 30_000;\n\n/** Managed component configuration file */\nexport const COMPONENT_CONFIG_FILE = \"component.config.ts\";\n\n/** Managed assets config (slot-type → library mapping for SlotRenderer) */\nexport const ASSETS_CONFIG_FILE = \"assets.config.json\";\n\n/** Component slug is a plain string — validated at runtime against the API registry */\nexport type ComponentSlug = string;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ASSET PACKAGES\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface AssetPackageDef {\n id: string;\n npm: string;\n displayName: string;\n slotType: string;\n category: AssetCategory;\n description: string;\n}\n\nexport type AssetCategory =\n | \"icons\"\n | \"illustrations\"\n | \"logos\"\n | \"flags\"\n | \"emoji\"\n | \"loaders\"\n | \"file-types\";\n\nexport const ASSET_PACKAGES: AssetPackageDef[] = [\n // ── Icons ──────────────────────────────────────────────────────────────\n {\n id: \"icons-lucide\",\n npm: \"@inventive-ui/icons-lucide\",\n displayName: \"Lucide Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Beautiful & consistent open-source icons\",\n },\n {\n id: \"icons-material\",\n npm: \"@inventive-ui/icons-material\",\n displayName: \"Material Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Google Material Design icon set\",\n },\n {\n id: \"icons-phosphor\",\n npm: \"@inventive-ui/icons-phosphor\",\n displayName: \"Phosphor Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Flexible icon family by Phosphor\",\n },\n {\n id: \"material-symbols\",\n npm: \"@inventive-ui/material-symbols\",\n displayName: \"Material Symbols\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Google Material Symbols variable icon set\",\n },\n\n // ── Illustrations ──────────────────────────────────────────────────────\n {\n id: \"illustrations\",\n npm: \"@inventive-ui/illustrations\",\n displayName: \"Storyset Illustrations\",\n slotType: \"illustration\",\n category: \"illustrations\",\n description: \"Customizable illustrations by Storyset (Freepik)\",\n },\n\n // ── Logos ──────────────────────────────────────────────────────────────\n {\n id: \"logos\",\n npm: \"@inventive-ui/logos\",\n displayName: \"Mono Logos\",\n slotType: \"logo\",\n category: \"logos\",\n description: \"Monochrome brand / product logo set\",\n },\n {\n id: \"color-logos\",\n npm: \"@inventive-ui/color-logos\",\n displayName: \"Color Logos\",\n slotType: \"color-logo\",\n category: \"logos\",\n description: \"Full-color brand / product logo set\",\n },\n\n // ── Flags ──────────────────────────────────────────────────────────────\n {\n id: \"flags\",\n npm: \"@inventive-ui/flags\",\n displayName: \"Flagpack\",\n slotType: \"flag\",\n category: \"flags\",\n description: \"Open-source flag icons by Flagpack\",\n },\n\n // ── Emoji ──────────────────────────────────────────────────────────────\n {\n id: \"emoji\",\n npm: \"@inventive-ui/emoji\",\n displayName: \"Emoji\",\n slotType: \"emoji\",\n category: \"emoji\",\n description: \"Cross-platform emoji set with skin-tone support\",\n },\n\n // ── Loaders ────────────────────────────────────────────────────────────\n {\n id: \"loaders\",\n npm: \"@inventive-ui/loaders\",\n displayName: \"LDRS Loaders\",\n slotType: \"loader\",\n category: \"loaders\",\n description: \"Lightweight animated loaders by LDRS\",\n },\n\n // ── File Types ─────────────────────────────────────────────────────────\n {\n id: \"file-types\",\n npm: \"@inventive-ui/file-types\",\n displayName: \"File Type Icons\",\n slotType: \"file-type\",\n category: \"file-types\",\n description: \"File extension and MIME-type icons\",\n },\n];\n\n/** Quick lookup by package id */\nexport const ASSET_PACKAGES_MAP = Object.fromEntries(\n ASSET_PACKAGES.map((pkg) => [pkg.id, pkg]),\n) as Record<string, AssetPackageDef>;\n\n/**\n * Slot type id (CLI catalogue) → `assets.config.json` / {@link IUIAssetsConfig} key.\n * Framework uses camelCase (`colorLogo`, `fileType`); slot types stay kebab-case internally.\n */\nexport const SLOT_TYPE_TO_ASSETS_CONFIG_KEY: Record<string, string> = {\n icon: \"icon\",\n logo: \"logo\",\n \"color-logo\": \"colorLogo\",\n flag: \"flag\",\n \"file-type\": \"fileType\",\n loader: \"loader\",\n illustration: \"illustration\",\n emoji: \"emoji\",\n};\n\n/** Legacy kebab-case keys older CLI versions wrote — removed on the next `writeAssetsConfig`. */\nexport const LEGACY_ASSETS_CONFIG_KEYS: Record<string, string> = {\n \"color-logo\": \"colorLogo\",\n \"file-type\": \"fileType\",\n};\n\n/** `assets.config.json` keys the CLI regenerates from installed asset packages (keeps catalog in sync). */\nexport const MANAGED_ASSET_CONFIG_SLOTS = new Set(\n Object.values(SLOT_TYPE_TO_ASSETS_CONFIG_KEY),\n);\n\n// ── Shared Commander options ─────────────────────────────────────────────────\n\nexport const CLI_INSTALL_SOURCE_FLAGS = \"--source <source>\";\nexport const CLI_INSTALL_SOURCE_DESCRIPTION =\n 'Install source for optional fallbacks: \"api\" | \"registry\"';\n\nexport function defaultCliInstallSource(): string {\n return process.env.IUI_INSTALL_SOURCE ?? \"api\";\n}\n\n/** Display names for `assets.icon.library` (and prompts). */\nexport const ICON_LIBRARY_LABELS: Record<string, string> = {\n \"material-icons\": \"Material Icons\",\n \"material-symbols\": \"Material Symbols\",\n lucide: \"Lucide Icons\",\n phosphor: \"Phosphor Icons\",\n};\n\n/** Storyset illustration styles (`assets.illustration.style`). */\nexport const STORYSET_ILLUSTRATION_STYLES = [\n \"Amico\",\n \"Bro\",\n \"Cuate\",\n \"Pana\",\n \"Rafiki\",\n] as const;\n\nexport type StorysetIllustrationStyle = (typeof STORYSET_ILLUSTRATION_STYLES)[number];\n\n/** Display names for illustration style prompts. */\nexport const ILLUSTRATION_STYLE_LABELS: Record<StorysetIllustrationStyle, string> = {\n Amico: \"Amico\",\n Bro: \"Bro\",\n Cuate: \"Cuate\",\n Pana: \"Pana\",\n Rafiki: \"Rafiki\",\n};\n\n/** Emoji CDN families (`assets.emoji.family`). */\nexport const EMOJI_FAMILIES = [\n \"apple\",\n \"google\",\n \"facebook\",\n \"twitter\",\n \"native\",\n] as const;\n\nexport type EmojiFamily = (typeof EMOJI_FAMILIES)[number];\n\n/** Default emoji skin tone written to `assets.emoji.skinTone` on install. */\nexport const DEFAULT_EMOJI_SKIN_TONE = \"medium-light\";\n\n/** Display names for emoji family prompts. */\nexport const EMOJI_FAMILY_LABELS: Record<EmojiFamily, string> = {\n apple: \"Apple\",\n google: \"Google\",\n facebook: \"Facebook\",\n twitter: \"Twitter\",\n native: \"Native (device detection)\",\n};\n\n/**\n * Maps asset package id → framework slot config for IUIAssetsConfig.\n * Icons: default `library` is **`assets.config.json`** → `icon.library`. Regenerating merges package defaults with user edits.\n */\nexport const ASSET_PACKAGE_TO_SLOT_CONFIG: Record<\n string,\n Record<string, unknown>\n> = {\n \"icons-lucide\": { library: \"lucide\" },\n \"icons-material\": { library: \"material-icons\" },\n \"icons-phosphor\": { library: \"phosphor\" },\n \"material-symbols\": { library: \"material-symbols\" },\n flags: { library: \"flagpack\" },\n logos: { variant: \"mono\" },\n \"color-logos\": { variant: \"color\" },\n loaders: {\n library: \"ldrs\",\n name: \"ring\",\n color: \"currentColor\",\n speed: 1,\n },\n illustrations: { library: \"storyset\", style: \"Amico\" },\n emoji: { family: \"apple\", skinTone: DEFAULT_EMOJI_SKIN_TONE },\n \"file-types\": {},\n};\n\n/** Category display names */\nexport const ASSET_CATEGORY_LABELS: Record<AssetCategory, string> = {\n icons: \"Icons\",\n illustrations: \"Illustrations\",\n logos: \"Logos\",\n flags: \"Flags\",\n emoji: \"Emoji\",\n loaders: \"Loaders\",\n \"file-types\": \"File Types\",\n};\n","// ─── Filesystem Helpers ──────────────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport os from \"node:os\";\nimport fs from \"fs-extra\";\nimport { CLIError } from \"./errors.js\";\nimport { writeJsonRestricted, writeFileRestricted } from \"./security/fsSecure.js\";\nimport { normalizeComponentsDir } from \"./security/paths.js\";\nimport {\n installTarball as installTarballPm,\n runSyncInstall as runSyncInstallPm,\n type PackageManager,\n} from \"./security/process.js\";\nimport { parseAndValidateRegistryManifest } from \"../validation/registryManifest.js\";\nimport { buildProjectConfigSource } from \"./theme-config-scaffold.js\";\nimport { assertJsIdentifier } from \"./security/identifiers.js\";\nimport { atomicWriteFile, atomicWriteJson } from \"./atomic.js\";\nimport {\n isExactMinimalScaffold,\n isIuiManagedViteConfig,\n MINIMAL_VITE_SCAFFOLD,\n patchViteConfigContent,\n type ViteConfigEnsureAction,\n} from \"./config-patch/vite-config.js\";\nimport { patchProjectConfigBuildBlock } from \"./config-patch/iui-config.js\";\nimport { mergeComponentConfigContent } from \"./config-patch/component-config.js\";\nimport { stripAssetsFromIuiConfig } from \"../validation/configTierChecks.js\";\nimport { IUI_CACHE_GITIGNORE_LINES } from \"../services/iui-paths.js\";\nimport {\n IUI_DIR,\n PROJECT_CONFIG_FILE,\n COMPONENT_CONFIG_FILE,\n ASSETS_CONFIG_FILE,\n DEFAULT_COMPONENTS_DIR,\n GLOBAL_CONFIG_DIR,\n API_BASE_URL,\n NPM_SCOPE,\n ASSET_PACKAGES_MAP,\n ASSET_PACKAGE_TO_SLOT_CONFIG,\n LEGACY_ASSETS_CONFIG_KEYS,\n SLOT_TYPE_TO_ASSETS_CONFIG_KEY,\n MANAGED_ASSET_CONFIG_SLOTS,\n DEFAULT_EMOJI_SKIN_TONE,\n REQUIRED_VITE_MAJOR,\n} from \"../constants.js\";\nimport type {\n GlobalConfig,\n ProjectMeta,\n ComponentManifest,\n PackageManifest,\n SlotManifest,\n ComponentPackageManifest,\n RegistryItem,\n IUIConfig,\n} from \"../types.js\";\nimport { resolveComponentExport } from \"./componentExports.js\";\nimport {\n findIuiProjectRoot,\n resolveIuiProjectRoot,\n resolvePackageDir,\n findPackageJsonWithDep,\n findWorkspaceRoot,\n resolveDependencyInstallRoot,\n resolveProjectConfigRoot,\n resolveWorkspaceInstallRouting,\n isMonorepoInstallContext,\n} from \"./workspace.js\";\n\n// ── Global config (~/.iui/config.json) ──────────────────────────────────────\n\nfunction globalConfigPath(): string {\n return path.join(os.homedir(), GLOBAL_CONFIG_DIR, \"config.json\");\n}\n\nfunction globalSecretsPath(): string {\n return path.join(os.homedir(), GLOBAL_CONFIG_DIR, \"secrets.json\");\n}\n\nfunction readSecretsFile(): { token?: string } | null {\n const p = globalSecretsPath();\n if (!fs.existsSync(p)) return null;\n try {\n const data = fs.readJsonSync(p) as { token?: string };\n return data && typeof data.token === \"string\" ? data : null;\n } catch {\n return null;\n }\n}\n\nfunction writeSecretsFile(token: string): void {\n writeJsonRestricted(globalSecretsPath(), { token });\n}\n\nfunction stripProfileFields(config: GlobalConfig): Omit<GlobalConfig, \"token\" | \"license_key\"> {\n const { license_key: _lk, token: _t, ...profile } = config;\n return profile;\n}\n\nexport function readGlobalConfig(): GlobalConfig | null {\n const p = globalConfigPath();\n let profile: Omit<GlobalConfig, \"token\"> & { token?: string } | null = null;\n\n if (fs.existsSync(p)) {\n try {\n const raw = fs.readJsonSync(p) as GlobalConfig;\n profile = stripProfileFields(raw);\n if (raw.token && !readSecretsFile()?.token) {\n writeSecretsFile(raw.token);\n writeJsonRestricted(globalConfigPath(), profile);\n }\n } catch {\n return null;\n }\n }\n\n const secrets = readSecretsFile();\n if (!secrets?.token && !profile) return null;\n\n return {\n ...(profile ?? { github_id: \"\" }),\n token: secrets?.token ?? \"\",\n } as GlobalConfig;\n}\n\nexport function writeGlobalConfig(config: GlobalConfig): void {\n const { token, license_key: _unused, ...profile } = config;\n if (token) {\n writeSecretsFile(token);\n }\n writeJsonRestricted(globalConfigPath(), profile);\n}\n\nexport function removeGlobalConfig(): void {\n const p = globalConfigPath();\n if (fs.existsSync(p)) fs.removeSync(p);\n const s = globalSecretsPath();\n if (fs.existsSync(s)) fs.removeSync(s);\n}\n\n// ── Project metadata (.iui/) ────────────────────────────────────────────────\n\nfunction iuiDir(cwd: string = process.cwd()): string {\n return path.join(resolveIuiProjectRoot(cwd), IUI_DIR);\n}\n\nfunction metaPath(file: string, cwd?: string): string {\n return path.join(iuiDir(cwd ?? process.cwd()), file);\n}\n\nexport function projectMetaPath(cwd?: string) { return metaPath(\"project.json\", cwd); }\nexport function componentManifestPath(cwd?: string) { return metaPath(\"components.json\", cwd); }\nexport function packageManifestPath(cwd?: string) { return metaPath(\"packages.json\", cwd); }\nexport function slotManifestPath(cwd?: string) { return metaPath(\"slots.json\", cwd); }\n\n// ── Generic read / write helpers ────────────────────────────────────────────\n\nfunction readProjectJsonStrict<T>(p: string, label: string): T {\n if (!fs.existsSync(p)) {\n throw new CLIError(`Missing ${label}.`, \"Run iui init to initialize the project.\");\n }\n try {\n const data = fs.readJsonSync(p) as T;\n if (data === null || typeof data !== \"object\" || Array.isArray(data)) {\n throw new CLIError(`Invalid ${label}: expected a JSON object.`);\n }\n return data;\n } catch (err) {\n if (err instanceof CLIError) throw err;\n throw new CLIError(\n `Corrupt or unreadable ${label}.`,\n `Fix or remove ${p} and run iui init or iui doctor again.`,\n );\n }\n}\n\nfunction writeJson(p: string, data: unknown): void {\n atomicWriteJson(p, data);\n}\n\n// ── Project meta ────────────────────────────────────────────────────────────\n\nexport function readProjectMeta(cwd?: string): ProjectMeta | null {\n const p = projectMetaPath(cwd);\n if (!fs.existsSync(p)) return null;\n return readProjectJsonStrict<ProjectMeta>(p, \".iui/project.json\");\n}\n\nexport function writeProjectMeta(meta: ProjectMeta, cwd?: string): void {\n writeJson(projectMetaPath(cwd), meta);\n}\n\n// ── Component manifest ──────────────────────────────────────────────────────\n\nexport function readComponentManifest(cwd?: string): ComponentManifest {\n const p = componentManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<ComponentManifest>(p, \".iui/components.json\");\n}\n\nexport function writeComponentManifest(manifest: ComponentManifest, cwd?: string): void {\n writeJson(componentManifestPath(cwd), manifest);\n}\n\n// ── Package manifest (asset packages) ───────────────────────────────────────\n\nexport function readPackageManifest(cwd?: string): PackageManifest {\n const p = packageManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<PackageManifest>(p, \".iui/packages.json\");\n}\n\nexport function writePackageManifest(manifest: PackageManifest, cwd?: string): void {\n writeJson(packageManifestPath(cwd), manifest);\n}\n\n// ── Assets config (assets.config.json) ───────────────────────────────────────\n\nfunction getCliTemplatesDir(): string {\n return path.join(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"templates\");\n}\n\nfunction loadAssetsConfigTemplate(): Record<string, unknown> {\n const templatePath = path.join(getCliTemplatesDir(), \"assets.config.defaults.json\");\n if (!fs.existsSync(templatePath)) return {};\n try {\n return fs.readJsonSync(templatePath) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nfunction loadComponentConfigPresetsTemplate(): Record<string, Record<string, unknown>> {\n const templatePath = path.join(getCliTemplatesDir(), \"component.config.presets.json\");\n if (!fs.existsSync(templatePath)) return {};\n try {\n return fs.readJsonSync(templatePath) as Record<string, Record<string, unknown>>;\n } catch {\n return {};\n }\n}\n\nfunction mergeAssetSlotWithTemplate(\n slot: Record<string, unknown> | undefined,\n templateSlot: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!templateSlot) return slot ?? {};\n const out: Record<string, unknown> = { ...templateSlot, ...(slot ?? {}) };\n for (const mapKey of [\n \"globalIcons\",\n \"globalEmojis\",\n \"globalLogos\",\n \"globalColorLogos\",\n \"globalLoaders\",\n \"globalIllustrations\",\n \"globalFlags\",\n \"globalFileTypes\",\n ] as const) {\n const tplMap = templateSlot[mapKey];\n const userMap = slot?.[mapKey];\n if (tplMap && typeof tplMap === \"object\") {\n out[mapKey] = {\n ...(tplMap as Record<string, string>),\n ...((userMap as Record<string, string> | undefined) ?? {}),\n };\n }\n }\n return out;\n}\n\nfunction seedAssetsOutputFromTemplate(output: Record<string, unknown>): void {\n const template = loadAssetsConfigTemplate();\n for (const [key, tplVal] of Object.entries(template)) {\n if (key === \"binding\") {\n if (output.binding === undefined && tplVal !== undefined) {\n output.binding = tplVal;\n }\n continue;\n }\n if (typeof tplVal === \"object\" && tplVal !== null && !Array.isArray(tplVal)) {\n output[key] = mergeAssetSlotWithTemplate(\n output[key] as Record<string, unknown> | undefined,\n tplVal as Record<string, unknown>,\n );\n }\n }\n if (output.binding === \"scanned\") {\n output.preload = output.preload ?? \"scanned\";\n const icon = output.icon;\n if (icon && typeof icon === \"object\" && !Array.isArray(icon)) {\n (icon as Record<string, unknown>).preload =\n (icon as Record<string, unknown>).preload ?? \"scanned\";\n }\n }\n}\n\nfunction assetsConfigPath(cwd?: string): string {\n return path.join(resolveIuiProjectRoot(cwd ?? process.cwd()), ASSETS_CONFIG_FILE);\n}\n\nfunction readExistingAssetsConfigRaw(cwd: string): Record<string, unknown> {\n const p = assetsConfigPath(cwd);\n if (!fs.existsSync(p)) return {};\n try {\n const data = fs.readJsonSync(p) as Record<string, unknown>;\n return data && typeof data === \"object\" && !Array.isArray(data) ? data : {};\n } catch {\n return {};\n }\n}\n\nexport function readAssetsConfigIconLibrary(\n cwd: string = process.cwd(),\n): string | null {\n const icon = readExistingAssetsConfigRaw(cwd).icon;\n if (\n icon &&\n typeof icon === \"object\" &&\n !Array.isArray(icon) &&\n typeof (icon as { library?: unknown }).library === \"string\"\n ) {\n return (icon as { library: string }).library;\n }\n return null;\n}\n\nexport function readAssetsConfigIllustrationStyle(\n cwd: string = process.cwd(),\n): string | null {\n const illustration = readExistingAssetsConfigRaw(cwd).illustration;\n if (\n illustration &&\n typeof illustration === \"object\" &&\n !Array.isArray(illustration) &&\n typeof (illustration as { style?: unknown }).style === \"string\"\n ) {\n return (illustration as { style: string }).style;\n }\n return null;\n}\n\nexport function readAssetsConfigEmojiFamily(\n cwd: string = process.cwd(),\n): string | null {\n const emoji = readExistingAssetsConfigRaw(cwd).emoji;\n if (\n emoji &&\n typeof emoji === \"object\" &&\n !Array.isArray(emoji) &&\n typeof (emoji as { family?: unknown }).family === \"string\"\n ) {\n return (emoji as { family: string }).family;\n }\n return null;\n}\n\n/**\n * Set default icon library in **assets.config.json** (merges with existing `icon` fields).\n */\nexport function persistPreferredIconLibrary(\n library: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevIcon =\n existing.icon && typeof existing.icon === \"object\" && !Array.isArray(existing.icon)\n ? { ...(existing.icon as Record<string, unknown>) }\n : {};\n prevIcon.library = library;\n existing.icon = prevIcon;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Set default Storyset illustration style in **assets.config.json** (`illustration.style`).\n */\nexport function persistPreferredIllustrationStyle(\n style: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevIllustration =\n existing.illustration &&\n typeof existing.illustration === \"object\" &&\n !Array.isArray(existing.illustration)\n ? { ...(existing.illustration as Record<string, unknown>) }\n : {};\n const base =\n (ASSET_PACKAGE_TO_SLOT_CONFIG.illustrations as Record<string, unknown> | undefined) ?? {};\n Object.assign(prevIllustration, base);\n prevIllustration.style = style;\n existing.illustration = prevIllustration;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Set default emoji family in **assets.config.json** (`emoji.family`).\n * Skin tone defaults to {@link DEFAULT_EMOJI_SKIN_TONE} (`medium-light`).\n */\nexport function persistPreferredEmojiFamily(\n family: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevEmoji =\n existing.emoji && typeof existing.emoji === \"object\" && !Array.isArray(existing.emoji)\n ? { ...(existing.emoji as Record<string, unknown>) }\n : {};\n const base =\n (ASSET_PACKAGE_TO_SLOT_CONFIG.emoji as Record<string, unknown> | undefined) ?? {};\n Object.assign(prevEmoji, base);\n prevEmoji.family = family;\n prevEmoji.skinTone = DEFAULT_EMOJI_SKIN_TONE;\n existing.emoji = prevEmoji;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Icon `library` keys (e.g. lucide, material-symbols) for all icon asset\n * packages listed in `.iui/packages.json`, in stable manifest key order.\n */\nexport function collectInstalledIconLibraries(\n cwd: string = process.cwd(),\n): string[] {\n const manifest = readPackageManifest(cwd);\n const libs: string[] = [];\n for (const pkgId of Object.keys(manifest)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const slotConfig = ASSET_PACKAGE_TO_SLOT_CONFIG[pkgId];\n if (def?.slotType !== \"icon\" || !slotConfig) continue;\n const lib = (slotConfig as { library?: string }).library;\n if (typeof lib === \"string\" && lib.length > 0 && !libs.includes(lib)) {\n libs.push(lib);\n }\n }\n return libs;\n}\n\n/**\n * Apply package defaults as base; user-edited fields from `existingSlot` win.\n * Keeps manual tweaks to loader, illustration style, emoji, icon options, etc.\n * when `writeAssetsConfig` runs after install or startup repair.\n */\nfunction readExistingAssetSlot(\n existing: Record<string, unknown>,\n configKey: string,\n slotType: string,\n): unknown {\n if (existing[configKey] !== undefined) return existing[configKey];\n return existing[slotType];\n}\n\nfunction mergeAssetsSlotWithUserEdits(\n fromPackage: Record<string, unknown>,\n existingSlot: unknown,\n): Record<string, unknown> {\n const base = { ...fromPackage };\n if (\n existingSlot === null ||\n existingSlot === undefined ||\n typeof existingSlot !== \"object\" ||\n Array.isArray(existingSlot)\n ) {\n return base;\n }\n const user = existingSlot as Record<string, unknown>;\n const out: Record<string, unknown> = { ...base };\n for (const [k, userVal] of Object.entries(user)) {\n if (\n userVal !== null &&\n typeof userVal === \"object\" &&\n !Array.isArray(userVal) &&\n typeof out[k] === \"object\" &&\n out[k] !== null &&\n !Array.isArray(out[k])\n ) {\n out[k] = mergeAssetsSlotWithUserEdits(\n out[k] as Record<string, unknown>,\n userVal,\n );\n } else {\n out[k] = userVal;\n }\n }\n return out;\n}\n\n/**\n * Write assets.config.json from installed asset packages.\n * Maps each installed package to its slot-type config (icon, flag, etc.).\n * For icons, preferred `library` from `assets.config.json` wins when multiple sets are installed.\n * Existing `assets.config.json` values are merged so user edits are preserved.\n */\nexport function writeAssetsConfig(cwd: string = process.cwd()): void {\n const packages = readPackageManifest(cwd);\n const existing = readExistingAssetsConfigRaw(cwd);\n\n const assets: Record<string, Record<string, unknown>> = {};\n\n // Default icon library: `assets.config.json` → `icon.library` (same object the framework loads).\n const preferredIconLibrary = readAssetsConfigIconLibrary(cwd);\n const preferredIllustrationStyle = readAssetsConfigIllustrationStyle(cwd);\n const preferredEmojiFamily = readAssetsConfigEmojiFamily(cwd);\n\n let latestIconSlotConfig: Record<string, unknown> | null = null;\n let latestIconLibrary: string | null = null;\n const iconByLibrary: Record<string, Record<string, unknown>> = {};\n\n for (const [pkgId] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const slotConfig = ASSET_PACKAGE_TO_SLOT_CONFIG[pkgId];\n if (!def || !slotConfig) continue;\n\n if (def.slotType === \"icon\") {\n // Track latest as fallback; we may overwrite with preferred library below.\n latestIconSlotConfig = slotConfig;\n latestIconLibrary = (slotConfig as { library?: string })?.library ?? null;\n if (latestIconLibrary) {\n iconByLibrary[latestIconLibrary] = slotConfig;\n }\n\n // Do not set assets.icon yet, because we may preserve the preferred default.\n continue;\n }\n\n const configKey =\n SLOT_TYPE_TO_ASSETS_CONFIG_KEY[def.slotType] ?? def.slotType;\n const mergedSlot = mergeAssetsSlotWithUserEdits(\n slotConfig,\n readExistingAssetSlot(existing, configKey, def.slotType),\n );\n if (def.slotType === \"illustration\" && preferredIllustrationStyle) {\n mergedSlot.style = preferredIllustrationStyle;\n }\n if (def.slotType === \"emoji\" && preferredEmojiFamily) {\n mergedSlot.family = preferredEmojiFamily;\n }\n assets[configKey] = mergedSlot;\n }\n\n if (latestIconSlotConfig) {\n let base: Record<string, unknown>;\n // If the preferred icon library is installed, keep it; otherwise fall back to latest installed.\n if (preferredIconLibrary && iconByLibrary[preferredIconLibrary]) {\n base = iconByLibrary[preferredIconLibrary];\n } else {\n base = latestIconSlotConfig;\n }\n // Never let a stale merged `library` override the resolved default; merge keeps\n // user `style` / `filled` / etc. `library` always matches preferred + installed sets.\n const mergedIcon = mergeAssetsSlotWithUserEdits(base, existing.icon);\n const baseLib = (base as { library?: string }).library;\n if (typeof baseLib === \"string\" && baseLib.length > 0) {\n mergedIcon.library = baseLib;\n }\n assets.icon = mergedIcon;\n }\n\n const output: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(existing)) {\n if (!MANAGED_ASSET_CONFIG_SLOTS.has(k)) {\n output[k] = v;\n }\n }\n Object.assign(output, assets);\n\n for (const [legacyKey, canonicalKey] of Object.entries(LEGACY_ASSETS_CONFIG_KEYS)) {\n if (output[canonicalKey] !== undefined) {\n delete output[legacyKey];\n }\n }\n\n if (\n output.binding === undefined &&\n Object.keys(assets).length > 0 &&\n projectHasViteTooling(cwd)\n ) {\n output.binding = \"scanned\";\n }\n\n seedAssetsOutputFromTemplate(output);\n\n writeJson(assetsConfigPath(cwd), output);\n\n // Older CLI versions used `.iui/icon-defaults.json`; remove it so only assets.config.json applies.\n try {\n const legacyIconDefaults = path.join(cwd ?? process.cwd(), IUI_DIR, \"icon-defaults.json\");\n if (fs.existsSync(legacyIconDefaults)) fs.removeSync(legacyIconDefaults);\n } catch {\n /* non-fatal */\n }\n}\n\n// ── Slot manifest ───────────────────────────────────────────────────────────\n\nexport function readSlotManifest(cwd?: string): SlotManifest {\n const p = slotManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<SlotManifest>(p, \".iui/slots.json\");\n}\n\nexport function writeSlotManifest(manifest: SlotManifest, cwd?: string): void {\n writeJson(slotManifestPath(cwd), manifest);\n}\n\n// ── Component package manifest (node_modules/@inventive-ui/components) ──────\n\n/**\n * Read iui-manifest.json from the installed @inventive-ui/components package.\n * Returns null when the package isn't installed yet.\n */\nexport function readComponentPackageManifest(\n cwd: string = process.cwd(),\n): ComponentPackageManifest | null {\n const pkgDir = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!pkgDir) return null;\n const p = path.join(pkgDir, \"iui-manifest.json\");\n if (!fs.existsSync(p)) return null;\n try {\n const raw = fs.readJsonSync(p) as unknown;\n return parseAndValidateRegistryManifest(raw, p);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n throw new CLIError(\n \"Invalid component registry in node_modules.\",\n \"Reinstall @inventive-ui/components and rerun iui doctor.\",\n );\n }\n}\n\n/**\n * Read the installed version of a package from node_modules (e.g. @inventive-ui/components).\n */\nexport function getInstalledPackageVersion(\n packageName: string,\n cwd: string = process.cwd(),\n): string | null {\n const pkgDir = resolvePackageDir(packageName, cwd);\n if (!pkgDir) return null;\n const pkgPath = path.join(pkgDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n try {\n const pkg = fs.readJsonSync(pkgPath) as { version?: string };\n return pkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Convert the registry items array to a name-keyed map for O(1) lookups.\n */\nexport function registryItemsMap(\n manifest: ComponentPackageManifest | null,\n): Record<string, RegistryItem> {\n if (!manifest) return {};\n const map: Record<string, RegistryItem> = {};\n for (const item of manifest.items) {\n map[item.name] = item;\n }\n return map;\n}\n\n// ── Project config (iui.config.ts) ──────────────────────────────────────────\n\nexport function writeProjectConfig(cwd: string = process.cwd()): void {\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n atomicWriteFile(configPath, buildProjectConfigSource(cwd));\n}\n\nexport type ProjectConfigEnsureAction = \"scaffolded\" | \"merged\" | \"noop\";\n\n/** Ensure compile-first build defaults without replacing user theme/config. */\nexport function ensureProjectConfigBuildBlock(cwd: string = process.cwd()): boolean {\n const configPath = path.join(resolveIuiProjectRoot(cwd), PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) return false;\n const before = fs.readFileSync(configPath, \"utf-8\");\n const result = patchProjectConfigBuildBlock(before);\n if (!result.changed) return false;\n atomicWriteFile(configPath, result.content);\n return true;\n}\n\n/**\n * Scaffold iui.config.ts when missing; otherwise strip assets tier bleed + merge build defaults.\n */\nexport function ensureProjectConfig(cwd: string = process.cwd()): ProjectConfigEnsureAction {\n const root = resolveIuiProjectRoot(cwd);\n const configPath = path.join(root, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n writeProjectConfig(root);\n return \"scaffolded\";\n }\n\n const before = fs.readFileSync(configPath, \"utf-8\");\n const stripped = stripAssetsFromIuiConfig(before);\n if (stripped !== before) {\n atomicWriteFile(configPath, stripped);\n }\n ensureProjectConfigBuildBlock(root);\n const after = fs.readFileSync(configPath, \"utf-8\");\n return before === after ? \"noop\" : \"merged\";\n}\n\n/**\n * True when this project intentionally uses Vite (direct package.json deps only).\n * Ignores transitive vite from @inventive-ui/framework — that must not create vite.config.ts.\n */\nexport function projectHasViteTooling(cwd: string = process.cwd()): boolean {\n return Boolean(\n isPackageInDeps(\"vite\", cwd) || isPackageInDeps(\"@vitejs/plugin-react\", cwd),\n );\n}\n\nfunction isIuiManagedOrMinimalScaffold(content: string): boolean {\n if (\n /^\\s*function\\s+iuiOptionalDeps\\s*\\(/m.test(content) &&\n /^\\s*name:\\s*[\"']iui-optional-deps[\"']/m.test(content)\n ) {\n return true;\n }\n return isIuiManagedViteConfig(content) || isExactMinimalScaffold(content);\n}\n\n/**\n * Remove CLI-generated vite.config.ts / tsconfig.node.json when the project uses React-only.\n */\nexport function removeStaleIuiViteConfig(cwd: string = process.cwd()): boolean {\n if (projectHasViteTooling(cwd)) return false;\n\n let removed = false;\n const configPath = path.join(cwd, \"vite.config.ts\");\n if (fs.existsSync(configPath)) {\n const existing = fs.readFileSync(configPath, \"utf-8\");\n if (isIuiManagedOrMinimalScaffold(existing)) {\n fs.removeSync(configPath);\n removed = true;\n }\n }\n\n const nodeTsPath = path.join(cwd, \"tsconfig.node.json\");\n if (fs.existsSync(nodeTsPath)) {\n try {\n const nodeTs = fs.readJsonSync(nodeTsPath) as { include?: unknown };\n const inc = nodeTs.include;\n if (Array.isArray(inc) && inc.length === 1 && inc[0] === \"vite.config.ts\") {\n fs.removeSync(nodeTsPath);\n removed = true;\n }\n } catch {\n /* keep user-managed tsconfig.node.json */\n }\n }\n\n return removed;\n}\n\n/** Typecheck vite.config.ts separately (Vite convention). */\nexport function writeTsConfigNode(cwd: string = process.cwd()): void {\n const nodeTsPath = path.join(cwd, \"tsconfig.node.json\");\n const content: Record<string, unknown> = {\n compilerOptions: {\n target: \"ES2022\",\n lib: [\"ES2023\"],\n module: \"ESNext\",\n skipLibCheck: true,\n moduleResolution: \"bundler\",\n noEmit: true,\n strict: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n isolatedModules: true,\n types: [\"node\"],\n },\n include: [\"vite.config.ts\"],\n };\n atomicWriteJson(nodeTsPath, content);\n}\n\nexport function writeTsConfig(\n framework: \"react\" | \"vite\",\n cwd: string = process.cwd(),\n): void {\n const tsconfigPath = path.join(cwd, \"tsconfig.json\");\n let existing: Record<string, unknown> = {};\n\n if (fs.existsSync(tsconfigPath)) {\n try {\n const parsed = fs.readJsonSync(tsconfigPath) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n existing = parsed as Record<string, unknown>;\n }\n } catch {\n existing = {};\n }\n }\n\n const compilerOptionsRaw = existing.compilerOptions;\n const compilerOptions =\n compilerOptionsRaw && typeof compilerOptionsRaw === \"object\" && !Array.isArray(compilerOptionsRaw)\n ? { ...(compilerOptionsRaw as Record<string, unknown>) }\n : {};\n\n if (!compilerOptions.target) compilerOptions.target = \"ES2022\";\n if (!compilerOptions.module) compilerOptions.module = \"ESNext\";\n if (!compilerOptions.moduleResolution) compilerOptions.moduleResolution = \"bundler\";\n if (!compilerOptions.jsx) compilerOptions.jsx = \"react-jsx\";\n if (compilerOptions.strict === undefined) compilerOptions.strict = true;\n if (compilerOptions.noEmit === undefined) compilerOptions.noEmit = true;\n if (compilerOptions.resolveJsonModule === undefined) compilerOptions.resolveJsonModule = true;\n if (compilerOptions.isolatedModules === undefined) compilerOptions.isolatedModules = true;\n if (compilerOptions.esModuleInterop === undefined) compilerOptions.esModuleInterop = true;\n if (compilerOptions.skipLibCheck === undefined) compilerOptions.skipLibCheck = true;\n\n const libs = Array.isArray(compilerOptions.lib)\n ? [...compilerOptions.lib.map(String)]\n : [];\n for (const lib of [\"ES2022\", \"DOM\", \"DOM.Iterable\"]) {\n if (!libs.includes(lib)) libs.push(lib);\n }\n compilerOptions.lib = libs;\n\n if (framework === \"vite\") {\n const types = Array.isArray(compilerOptions.types)\n ? [...compilerOptions.types.map(String)]\n : [];\n if (!types.includes(\"vite/client\")) {\n types.push(\"vite/client\");\n }\n compilerOptions.types = types;\n } else if (Array.isArray(compilerOptions.types)) {\n const types = compilerOptions.types.map(String).filter((t) => t !== \"vite/client\");\n if (types.length > 0) compilerOptions.types = types;\n else delete compilerOptions.types;\n }\n\n const include = Array.isArray(existing.include)\n ? [...existing.include.map(String)]\n : [];\n if (!include.includes(\"src\")) include.push(\"src\");\n\n const rootConfigFiles = [\"iui.config.ts\", \"component.config.ts\"];\n for (const rootFile of rootConfigFiles) {\n if (!include.includes(rootFile)) include.push(rootFile);\n }\n\n const viteConfigIdx = include.indexOf(\"vite.config.ts\");\n if (framework === \"vite\") {\n if (viteConfigIdx >= 0) include.splice(viteConfigIdx, 1);\n writeTsConfigNode(cwd);\n } else if (viteConfigIdx >= 0) {\n include.splice(viteConfigIdx, 1);\n }\n\n const exclude = Array.isArray(existing.exclude)\n ? [...existing.exclude.map(String)]\n : [\"node_modules\", \"dist\"];\n\n if (framework === \"react\") {\n for (const orphan of [\"vite.config.ts\", \"tsconfig.node.json\"]) {\n if (!exclude.includes(orphan)) exclude.push(orphan);\n }\n }\n\n const output: Record<string, unknown> = {\n ...existing,\n compilerOptions,\n include,\n exclude,\n };\n\n atomicWriteJson(tsconfigPath, output);\n}\n\n// ── Component config (component.config.ts) ──────────────────────────────────\n\n/**\n * Generate component.config.ts from the component package manifest.\n * Each component entry includes its defaultConfig from the published manifest,\n * so this file stays in sync with the registry without hardcoding anything.\n */\nexport function writeComponentConfig(\n manifest: import(\"../types.js\").ComponentPackageManifest | null,\n cwd: string = process.cwd(),\n): void {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n\n let entries = \"\";\n const typedEntries: string[] = [];\n const typeImports: string[] = [];\n const presetsTemplate = loadComponentConfigPresetsTemplate();\n if (manifest) {\n for (const item of manifest.items) {\n assertJsIdentifier(item.dirName, \"component dirName\");\n const cfg = (item.meta?.defaultConfig as Record<string, unknown>) ?? {};\n const presetBlock = presetsTemplate[item.dirName];\n const cfgStr = JSON.stringify(cfg, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n\n let extraBlocks = \"\";\n if (presetBlock?.presets) {\n const presetsStr = JSON.stringify(presetBlock.presets, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n extraBlocks += `\\n presets: ${presetsStr},`;\n }\n\n entries += ` ${item.dirName}: {\\n default: ${cfgStr},${extraBlocks}\\n },\\n\\n`;\n\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName && resolved.importSpecifier) {\n typeImports.push(`import type { ${resolved.propsName} } from \"${resolved.importSpecifier}\";`);\n typedEntries.push(` ${item.dirName}: { default: Partial<${resolved.propsName}> };`);\n } else {\n typedEntries.push(` ${item.dirName}: { default: Record<string, unknown> };`);\n }\n }\n }\n\n const imports = [...new Set(typeImports)].join(\"\\n\");\n const componentConfigType = typedEntries.length > 0\n ? `type ComponentConfigMap = {\\n${typedEntries.join(\"\\n\")}\\n};`\n : `type ComponentConfigMap = Record<string, { default: Record<string, unknown> }>;`;\n\n const content = `// ─── Component Configuration ─────────────────────────────────────────────────\n//\n// Default component presets for your Inventive UI project.\n// Customize variants, appearances, and slot assignments below.\n// Entries are rebuilt from the published component registry.\n//\n// Docs: https://inventiveui.com/docs/configuration\n\n${imports}\n\n${componentConfigType}\n\nexport const componentConfig: ComponentConfigMap = {\n${entries}};\n`;\n atomicWriteFile(configPath, content);\n}\n\nexport type ComponentConfigEnsureAction = \"scaffolded\" | \"merged\" | \"noop\" | \"replaced\";\n\n/**\n * Scaffold component.config.ts when missing; otherwise merge new registry entries only.\n */\nexport function ensureComponentConfig(\n manifest: import(\"../types.js\").ComponentPackageManifest | null,\n cwd: string = process.cwd(),\n options: { force?: boolean } = {},\n): ComponentConfigEnsureAction {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n\n if (options.force || !fs.existsSync(configPath)) {\n const existed = fs.existsSync(configPath);\n writeComponentConfig(manifest, cwd);\n return existed && options.force ? \"replaced\" : \"scaffolded\";\n }\n\n const before = fs.readFileSync(configPath, \"utf-8\");\n const result = mergeComponentConfigContent(before, manifest, cwd);\n if (!result.changed) return \"noop\";\n atomicWriteFile(configPath, result.content);\n return \"merged\";\n}\n\nexport function readProjectConfig(cwd: string = process.cwd()): IUIConfig | null {\n const iuiRoot = resolveIuiProjectRoot(cwd);\n const configPath = path.join(iuiRoot, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) return null;\n try {\n const raw = fs.readFileSync(configPath, \"utf-8\");\n const match = raw.match(/componentsDir:\\s*\"([^\"]+)\"/);\n const componentsDir = normalizeComponentsDir(\n match?.[1] ?? DEFAULT_COMPONENTS_DIR,\n iuiRoot,\n );\n return {\n componentsDir,\n framework: true,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * List component directory names present on disk (e.g. [\"Button\", \"Chip\"]).\n * Used by diagnostics to inspect component directories on disk.\n */\nexport function listComponentDirNames(cwd: string = process.cwd()): string[] {\n const config = readProjectConfig(cwd);\n const componentsDir = config?.componentsDir ?? DEFAULT_COMPONENTS_DIR;\n const fullPath = normalizeComponentsDir(componentsDir, cwd);\n if (!fs.existsSync(fullPath)) return [];\n try {\n return fs\n .readdirSync(fullPath, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n } catch {\n return [];\n }\n}\n\n// ── Detection helpers ───────────────────────────────────────────────────────\n\nexport function isInsideProject(cwd: string = process.cwd()): boolean {\n return findIuiProjectRoot(cwd) !== null;\n}\n\nexport {\n resolveIuiProjectRoot,\n findIuiProjectRoot,\n findWorkspaceRoot,\n isPackageInDirectDeps,\n resolveDependencyInstallRoot,\n resolveProjectConfigRoot,\n isWorkspaceChildPackage,\n listIuiInitializedPackages,\n resolveSetupDoctorTargets,\n listWorkspacePackageDirs,\n} from \"./workspace.js\";\n\nexport function detectRepoUrl(cwd: string = process.cwd()): string {\n try {\n const gitConfigPath = path.join(cwd, \".git\", \"config\");\n if (!fs.existsSync(gitConfigPath)) return cwd;\n const gitConfig = fs.readFileSync(gitConfigPath, \"utf-8\");\n const match = gitConfig.match(/url\\s*=\\s*(.+)/);\n return match?.[1]?.trim() ?? cwd;\n } catch {\n return cwd;\n }\n}\n\nexport function hasPackageJson(cwd: string = process.cwd()): boolean {\n return fs.existsSync(path.join(cwd, \"package.json\"));\n}\n\nexport function cleanupLegacyFrameworkMeta(cwd: string = process.cwd()): void {\n try {\n const legacyPath = path.join(cwd, IUI_DIR, \"framework.json\");\n if (fs.existsSync(legacyPath)) fs.removeSync(legacyPath);\n } catch {\n // Non-fatal cleanup\n }\n}\n\n/**\n * Returns the version string if `packageName` is in dependencies or\n * devDependencies of the project's package.json, otherwise null.\n */\nexport function isPackageInDeps(packageName: string, cwd: string = process.cwd()): string | null {\n return findPackageJsonWithDep(packageName, cwd)?.version ?? null;\n}\n\n/** How a package manager was chosen, for diagnostics/onboarding output. */\nexport type PackageManagerSource =\n | \"packageManager-field\"\n | \"lockfile\"\n | \"multiple-lockfiles\"\n | \"default\";\n\nexport interface PackageManagerDetection {\n pm: PackageManager;\n source: PackageManagerSource;\n warnings: string[];\n}\n\nconst LOCKFILES: ReadonlyArray<{ file: string; pm: PackageManager }> = [\n { file: \"bun.lockb\", pm: \"bun\" },\n { file: \"bun.lock\", pm: \"bun\" },\n { file: \"pnpm-lock.yaml\", pm: \"pnpm\" },\n { file: \"yarn.lock\", pm: \"yarn\" },\n { file: \"package-lock.json\", pm: \"npm\" },\n];\n\n/** Deterministic priority when multiple lockfiles coexist (project drift). */\nconst PM_PRIORITY: ReadonlyArray<PackageManager> = [\"bun\", \"pnpm\", \"yarn\", \"npm\"];\n\nfunction readPackageManagerField(cwd: string): PackageManager | null {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n try {\n const pkg = fs.readJsonSync(pkgPath) as { packageManager?: unknown };\n if (typeof pkg.packageManager !== \"string\") return null;\n // Format is \"<pm>@<version>\" (Corepack); strip the version.\n const name = pkg.packageManager.split(\"@\")[0]?.trim().toLowerCase();\n if (name === \"npm\" || name === \"yarn\" || name === \"pnpm\" || name === \"bun\") {\n return name;\n }\n } catch {\n return null;\n }\n return null;\n}\n\n/**\n * Detect the package manager with full provenance.\n *\n * Resolution is workspace-aware: in a monorepo the lockfile and\n * \"packageManager\" field live at the workspace root, so we resolve that\n * first and fall back to the current directory for standalone projects.\n *\n * Resolution order:\n * 1. package.json \"packageManager\" field (Corepack) — authoritative for teams.\n * 2. A single lockfile present in the project.\n * 3. Multiple lockfiles → warn and pick deterministically by priority.\n * 4. Default to npm.\n */\nexport function detectPackageManagerWithMeta(\n cwd: string = process.cwd(),\n): PackageManagerDetection {\n const warnings: string[] = [];\n const root = findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n\n const declared = readPackageManagerField(root);\n const presentLockPms = [\n ...new Set(\n LOCKFILES.filter(({ file }) => fs.existsSync(path.join(root, file))).map(\n ({ pm }) => pm,\n ),\n ),\n ];\n\n if (declared) {\n if (presentLockPms.length > 0 && !presentLockPms.includes(declared)) {\n warnings.push(\n `package.json \"packageManager\" is ${declared}, but the lockfile suggests ${presentLockPms.join(\", \")}. Using ${declared}.`,\n );\n }\n return { pm: declared, source: \"packageManager-field\", warnings };\n }\n\n if (presentLockPms.length === 1) {\n return { pm: presentLockPms[0]!, source: \"lockfile\", warnings };\n }\n\n if (presentLockPms.length > 1) {\n const chosen =\n PM_PRIORITY.find((pm) => presentLockPms.includes(pm)) ?? \"npm\";\n warnings.push(\n `Multiple lockfiles found (${presentLockPms.join(\", \")}). Using ${chosen}. Keep one package manager per project and set \"packageManager\" in package.json.`,\n );\n return { pm: chosen, source: \"multiple-lockfiles\", warnings };\n }\n\n return { pm: \"npm\", source: \"default\", warnings };\n}\n\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n return detectPackageManagerWithMeta(cwd).pm;\n}\n\n/** Human-readable full-install command for the given package manager. */\nexport function syncInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case \"yarn\": return \"yarn install\";\n case \"pnpm\": return \"pnpm install\";\n case \"bun\": return \"bun install\";\n default: return \"npm install\";\n }\n}\n\nexport function installCmd(\n pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\",\n pkg: string,\n cwd?: string,\n): string {\n if (cwd) {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n if (workspaceName) {\n const fromRoot =\n path.resolve(commandCwd) !== path.resolve(cwd)\n ? ` (run from ${commandCwd})`\n : \"\";\n switch (pm) {\n case \"yarn\":\n return `yarn workspace ${workspaceName} add ${pkg}${fromRoot}`;\n case \"pnpm\":\n return `pnpm add ${pkg} --filter ${workspaceName}${fromRoot}`;\n case \"bun\":\n return `bun add ${pkg}`;\n default:\n return `npm install ${pkg} -w ${workspaceName}${fromRoot}`;\n }\n }\n }\n switch (pm) {\n case \"yarn\": return `yarn add ${pkg}`;\n case \"pnpm\": return `pnpm add ${pkg}`;\n case \"bun\": return `bun add ${pkg}`;\n default: return `npm install ${pkg}`;\n }\n}\n\nexport function installDevCmd(pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\", pkg: string): string {\n switch (pm) {\n case \"yarn\": return `yarn add -D ${pkg}`;\n case \"pnpm\": return `pnpm add -D ${pkg}`;\n case \"bun\": return `bun add -d ${pkg}`;\n default: return `npm install --save-dev ${pkg}`;\n }\n}\n\n/**\n * Install a package from a local tarball without polluting package.json\n * with a `file:` path, then write the proper registry version entry.\n */\nexport function installTarballCmd(\n pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\",\n tarballPath: string,\n): string {\n const q = quotePathForShell(tarballPath);\n switch (pm) {\n case \"yarn\": return `yarn add ${q}`;\n case \"pnpm\": return `pnpm add ${q}`;\n case \"bun\": return `bun add ${q}`;\n default: return `npm install --no-save ${q}`;\n }\n}\n\n/**\n * Quote a path for safe use in a shell command (handles spaces and special chars on Windows/Unix).\n */\nfunction quotePathForShell(p: string): string {\n if (process.platform === \"win32\") {\n return `\"${p.replace(/\"/g, '\"\"')}\"`;\n }\n return `'${p.replace(/'/g, \"'\\\\''\")}'`;\n}\n\n/**\n * Run package manager install for a local tarball.\n * Uses quoted path so Windows paths with spaces work; avoids shell mangling.\n */\nexport function runTarballInstall(\n pm: PackageManager,\n tarballPath: string,\n cwd: string,\n): void {\n const resolvedTarball = path.resolve(tarballPath);\n if (!fs.existsSync(resolvedTarball)) {\n throw new CLIError(`Tarball not found: ${resolvedTarball}`);\n }\n installTarballPm(pm, resolvedTarball, cwd);\n}\n\n/**\n * Run a full install (e.g. npm install) to sync lockfile and node_modules\n * after package.json was updated. Standard practice after modifying dependencies.\n *\n * In npm/pnpm/yarn workspaces, installs always run at the workspace root.\n */\n/**\n * Standard workspace pre-install: sync lockfile at the monorepo root before adding\n * packages to a child app. Matches npm/pnpm/yarn docs and other CLI scaffolders.\n */\nexport function prepareWorkspaceForDependencyInstall(cwd: string = process.cwd()): void {\n if (!isMonorepoInstallContext(cwd)) return;\n const pm = detectPackageManager(cwd);\n runSyncInstallPm(pm, resolveDependencyInstallRoot(cwd));\n}\n\nexport function runSyncInstall(pm: PackageManager, cwd: string): void {\n runSyncInstallPm(pm, resolveDependencyInstallRoot(cwd));\n}\n\n/**\n * After tarball install, ensure package.json records the proper semver\n * version — replacing any `file:` temp path, adding the entry if missing,\n * or updating it when the installed version is newer.\n */\nexport function fixTarballDep(\n packageName: string,\n version: string,\n cwd: string = process.cwd(),\n): void {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const deps = pkg.dependencies ?? {};\n const current = deps[packageName];\n // Write a caret range (standard npm hygiene) rather than an exact pin, so\n // `npm install` / `npm update` can pick up compatible newer releases while\n // the lockfile still keeps installs reproducible for teammates.\n const desired = `^${version}`;\n if (!current || current.startsWith(\"file:\") || current !== desired) {\n deps[packageName] = desired;\n pkg.dependencies = deps;\n atomicWriteJson(pkgPath, pkg);\n }\n } catch {}\n}\n\n// ── .npmrc management ───────────────────────────────────────────────────────\n//\n// Auto-configures npm to resolve @inventive-ui packages through the API\n// registry proxy, eliminating the need for manual .npmrc setup or GitHub PATs.\n//\n// Project .npmrc: @inventive-ui:registry=<API>/registry/npm (safe to commit)\n// User ~/.npmrc: //<host>/registry/npm/:_authToken=<token> (never committed)\n\nconst NPMRC_SCOPE_LINE = `${NPM_SCOPE}:registry=${API_BASE_URL}/registry/npm`;\n\nfunction npmrcAuthLine(token: string): string {\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n return `//${url.host}${url.pathname}/:_authToken=${token}`;\n}\n\n/**\n * Ensure the project's .npmrc has the @inventive-ui scope pointing to the API.\n * Creates the file if missing; appends the line if not already present.\n */\nexport function ensureProjectNpmrc(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const npmrcPath = path.join(configRoot, \".npmrc\");\n let content = \"\";\n if (fs.existsSync(npmrcPath)) {\n content = fs.readFileSync(npmrcPath, \"utf-8\");\n }\n\n const lines = content.split(\"\\n\").filter((line) => {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith(\"#\")) return false;\n // Auth tokens belong in ~/.npmrc (iui login), never in the committed project file.\n if (trimmed.includes(\":_authToken=\")) return false;\n // Bare words like \"test\" break npm: Unknown project config \"test\"\n if (!trimmed.includes(\"=\")) return false;\n if (trimmed.startsWith(`${NPM_SCOPE}:registry=`)) return false;\n return true;\n });\n\n lines.push(NPMRC_SCOPE_LINE);\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim() + \"\\n\";\n atomicWriteFile(npmrcPath, result);\n}\n\n/**\n * Write the auth token to the user's global ~/.npmrc for the API registry.\n * This lets standard `npm install` authenticate without project-level secrets.\n */\nexport function writeGlobalNpmrcAuth(token: string): void {\n const globalNpmrc = path.join(os.homedir(), \".npmrc\");\n let content = \"\";\n if (fs.existsSync(globalNpmrc)) {\n content = fs.readFileSync(globalNpmrc, \"utf-8\");\n }\n\n const authLine = npmrcAuthLine(token);\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n const authPrefix = `//${url.host}${url.pathname}/:_authToken=`;\n\n // Replace existing auth line for this registry, or append\n const lines = content.split(\"\\n\").filter(\n (line) => !line.trim().startsWith(authPrefix),\n );\n lines.push(authLine);\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim() + \"\\n\";\n writeFileRestricted(globalNpmrc, result);\n}\n\n/**\n * Remove the auth token for the API registry from the user's global ~/.npmrc.\n */\nexport function removeGlobalNpmrcAuth(): void {\n const globalNpmrc = path.join(os.homedir(), \".npmrc\");\n if (!fs.existsSync(globalNpmrc)) return;\n\n const content = fs.readFileSync(globalNpmrc, \"utf-8\");\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n const authPrefix = `//${url.host}${url.pathname}/:_authToken=`;\n\n const lines = content.split(\"\\n\").filter(\n (line) => !line.trim().startsWith(authPrefix),\n );\n\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n if (!result) {\n fs.removeSync(globalNpmrc);\n return;\n }\n\n writeFileRestricted(globalNpmrc, `${result}\\n`);\n}\n\n/**\n * Ensure .gitignore contains .npmrc (in case the user writes tokens to it).\n * Only adds the entry if .gitignore exists and doesn't already list .npmrc.\n */\nexport function ensureGitignoreHasNpmrc(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const giPath = path.join(configRoot, \".gitignore\");\n if (!fs.existsSync(giPath)) return;\n const content = fs.readFileSync(giPath, \"utf-8\");\n if (content.split(\"\\n\").some((l) => l.trim() === \".npmrc\")) return;\n atomicWriteFile(giPath, `${content}\\n# npm registry auth (managed by iui)\\n.npmrc\\n`);\n}\n\nconst IUI_BUILD_CACHE_GITIGNORE_LINES = IUI_CACHE_GITIGNORE_LINES;\n\n/**\n * Append compile-first cache artifacts to .gitignore when missing.\n * Does not ignore .iui/generated/ — teams commit slot codegen.\n */\nexport function ensureGitignoreHasIuiBuildCache(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const giPath = path.join(configRoot, \".gitignore\");\n if (!fs.existsSync(giPath)) return;\n\n const content = fs.readFileSync(giPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n const missing = IUI_BUILD_CACHE_GITIGNORE_LINES.filter(\n (entry) => entry !== \"\" && !lines.some((l) => l.trim() === entry.trim()),\n );\n if (missing.length === 0) return;\n\n const suffix = missing.join(\"\\n\");\n const separator = content.endsWith(\"\\n\") || content.length === 0 ? \"\" : \"\\n\";\n atomicWriteFile(giPath, `${content}${separator}${suffix}\\n`);\n}\n\n// ── React detection ─────────────────────────────────────────────────────────\n\nexport type ReactCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\nexport type ReactDomCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\n/**\n * Inspect the consumer project's package.json to determine React status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectReactVersion(cwd: string = process.cwd()): ReactCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.dependencies?.react ??\n pkg.devDependencies?.react ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n // Attempt to read the *installed* version from node_modules\n const installedVersion = getInstalledReactVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isReact19(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\n/**\n * Read the actually-installed React version from node_modules/react/package.json.\n */\nfunction getInstalledReactVersion(cwd: string): string | null {\n try {\n const reactPkgPath = path.join(cwd, \"node_modules\", \"react\", \"package.json\");\n if (!fs.existsSync(reactPkgPath)) return null;\n const reactPkg = fs.readJsonSync(reactPkgPath) as Record<string, any>;\n return reactPkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check whether a version string represents React 19.x.\n * Handles exact versions (19.0.0), ranges (^19.0.0, ~19.1.0), and tagged versions.\n */\nfunction isReact19(version: string): boolean {\n // Strip leading semver range chars: ^, ~, >=, <=, >, <, =\n const cleaned = version.replace(/^[\\^~>=<]+/, \"\").trim();\n const major = parseInt(cleaned.split(\".\")[0], 10);\n return major === 19;\n}\n\n/**\n * Inspect the consumer project's package.json to determine react-dom status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectReactDomVersion(cwd: string = process.cwd()): ReactDomCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.dependencies?.[\"react-dom\"] ??\n pkg.devDependencies?.[\"react-dom\"] ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n const installedVersion = getInstalledReactDomVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isReact19(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\nfunction getInstalledReactDomVersion(cwd: string): string | null {\n try {\n const reactDomPkgPath = path.join(cwd, \"node_modules\", \"react-dom\", \"package.json\");\n if (!fs.existsSync(reactDomPkgPath)) return null;\n const reactDomPkg = fs.readJsonSync(reactDomPkgPath) as Record<string, any>;\n return reactDomPkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n// ── Vite detection ──────────────────────────────────────────────────────────\n\nexport type ViteCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\n/**\n * Inspect the consumer project's package.json to determine Vite status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectViteVersion(cwd: string = process.cwd()): ViteCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.devDependencies?.vite ??\n pkg.dependencies?.vite ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n // Attempt to read the *installed* version from node_modules\n const installedVersion = getInstalledViteVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isViteSupported(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\n/**\n * Read the actually-installed Vite version from node_modules/vite/package.json.\n */\nfunction getInstalledViteVersion(cwd: string): string | null {\n try {\n const vitePkgPath = path.join(cwd, \"node_modules\", \"vite\", \"package.json\");\n if (!fs.existsSync(vitePkgPath)) return null;\n const vitePkg = fs.readJsonSync(vitePkgPath) as Record<string, any>;\n return vitePkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * True when this project intentionally uses Webpack (direct package.json deps only).\n */\nexport function projectHasWebpackTooling(cwd: string = process.cwd()): boolean {\n return Boolean(\n isPackageInDeps(\"webpack\", cwd) ||\n isPackageInDeps(\"webpack-cli\", cwd) ||\n isPackageInDeps(\"webpack-dev-server\", cwd),\n );\n}\n\n/**\n * True when this project intentionally uses Next.js (direct package.json deps only).\n */\nexport function projectHasNextTooling(cwd: string = process.cwd()): boolean {\n return Boolean(isPackageInDeps(\"next\", cwd));\n}\n\n/**\n * Check whether a version string represents Vite 6.x or newer.\n */\nfunction isViteSupported(version: string): boolean {\n const cleaned = version.replace(/^[\\^~>=<]+/, \"\").trim();\n const major = parseInt(cleaned.split(\".\")[0], 10);\n return Number.isFinite(major) && major >= REQUIRED_VITE_MAJOR;\n}\n\n/**\n * Ensure vite.config.ts uses the framework Vite integration.\n *\n * Scaffold once when missing; patch existing configs (never full-replace user files).\n */\nexport function ensureInventiveUiViteConfig(\n cwd: string = process.cwd(),\n): ViteConfigEnsureAction {\n if (!projectHasViteTooling(cwd)) return \"skipped\";\n\n const configPath = path.join(cwd, \"vite.config.ts\");\n\n if (!fs.existsSync(configPath)) {\n atomicWriteFile(configPath, MINIMAL_VITE_SCAFFOLD);\n return \"scaffolded\";\n }\n\n const existing = fs.readFileSync(configPath, \"utf-8\");\n const result = patchViteConfigContent(existing);\n if (\"failed\" in result) return \"failed\";\n if (!result.changed) return \"noop\";\n\n atomicWriteFile(configPath, result.content);\n return /inventiveUiVite\\s*\\(/.test(existing) ? \"merged\" : \"patched\";\n}\n\n/** @deprecated Use ensureInventiveUiViteConfig — kept for existing call sites. */\nexport function writeViteConfig(cwd: string = process.cwd()): void {\n ensureInventiveUiViteConfig(cwd);\n}\n","// ─── Secure filesystem helpers ─────────────────────────────────────────────\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { atomicWriteFile } from \"../atomic.js\";\r\n\r\nconst SECRET_FILE_MODE = 0o600;\r\nconst CONFIG_DIR_MODE = 0o700;\r\n\r\nexport function ensureSecretDir(dirPath: string): void {\r\n fs.mkdirSync(dirPath, { recursive: true, mode: CONFIG_DIR_MODE });\r\n try {\r\n fs.chmodSync(dirPath, CONFIG_DIR_MODE);\r\n } catch {\r\n /* best effort on platforms that restrict chmod */\r\n }\r\n}\r\n\r\nexport function writeFileRestricted(filePath: string, content: string): void {\r\n const dir = path.dirname(filePath);\r\n ensureSecretDir(dir);\r\n atomicWriteFile(filePath, content, { mode: SECRET_FILE_MODE });\r\n try {\r\n fs.chmodSync(filePath, SECRET_FILE_MODE);\r\n } catch {\r\n /* best effort */\r\n }\r\n}\r\n\r\nexport function writeJsonRestricted(filePath: string, data: unknown): void {\r\n writeFileRestricted(filePath, `${JSON.stringify(data, null, 2)}\\n`);\r\n}\r\n","import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport os from \"node:os\";\r\nimport crypto from \"node:crypto\";\r\n\r\nexport interface AtomicWriteOptions {\r\n mode?: number;\r\n backup?: boolean;\r\n}\r\n\r\nexport function sha256(value: string): string {\r\n return crypto.createHash(\"sha256\").update(value).digest(\"hex\");\r\n}\r\n\r\nfunction fsyncDirectory(dir: string): void {\r\n if (process.platform === \"win32\") return;\r\n let fd: number | null = null;\r\n try {\r\n fd = fs.openSync(dir, \"r\");\r\n fs.fsyncSync(fd);\r\n } catch {\r\n /* best effort */\r\n } finally {\r\n if (fd !== null) {\r\n try {\r\n fs.closeSync(fd);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction tempPathFor(filePath: string): string {\r\n const dir = path.dirname(filePath);\r\n const base = path.basename(filePath);\r\n const nonce = `${process.pid}.${Date.now()}.${crypto.randomBytes(6).toString(\"hex\")}`;\r\n return path.join(dir, `.${base}.${nonce}.tmp`);\r\n}\r\n\r\nfunction backupPathFor(filePath: string): string {\r\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\r\n return `${filePath}.${stamp}.bak`;\r\n}\r\n\r\nexport function atomicWriteFile(\r\n filePath: string,\r\n content: string,\r\n options: AtomicWriteOptions = {},\r\n): void {\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n\r\n const tmp = tempPathFor(filePath);\r\n let fd: number | null = null;\r\n\r\n try {\r\n fd = fs.openSync(tmp, \"wx\", options.mode ?? 0o666);\r\n fs.writeFileSync(fd, content, { encoding: \"utf-8\" });\r\n fs.fsyncSync(fd);\r\n fs.closeSync(fd);\r\n fd = null;\r\n\r\n if (options.backup && fs.existsSync(filePath)) {\r\n fs.copyFileSync(filePath, backupPathFor(filePath));\r\n }\r\n\r\n fs.renameSync(tmp, filePath);\r\n fsyncDirectory(dir);\r\n } catch (error) {\r\n if (fd !== null) {\r\n try {\r\n fs.closeSync(fd);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n try {\r\n if (fs.existsSync(tmp)) fs.unlinkSync(tmp);\r\n } catch {\r\n /* best effort */\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport function atomicWriteJson(\r\n filePath: string,\r\n data: unknown,\r\n options: AtomicWriteOptions = {},\r\n): void {\r\n atomicWriteFile(filePath, `${JSON.stringify(data, null, 2)}\\n`, options);\r\n}\r\n\r\nexport function cleanupTempFiles(dir: string, maxAgeMs = 24 * 60 * 60 * 1000): void {\r\n if (!fs.existsSync(dir)) return;\r\n const now = Date.now();\r\n for (const name of fs.readdirSync(dir)) {\r\n if (!name.endsWith(\".tmp\")) continue;\r\n const fullPath = path.join(dir, name);\r\n try {\r\n const stat = fs.statSync(fullPath);\r\n if (now - stat.mtimeMs >= maxAgeMs) fs.unlinkSync(fullPath);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n}\r\n\r\nexport async function retry<T>(\r\n operation: () => T | Promise<T>,\r\n attempts = 3,\r\n delayMs = 75,\r\n): Promise<T> {\r\n let lastError: unknown;\r\n for (let attempt = 1; attempt <= attempts; attempt++) {\r\n try {\r\n return await operation();\r\n } catch (error) {\r\n lastError = error;\r\n if (attempt === attempts) break;\r\n await new Promise((resolve) => setTimeout(resolve, delayMs * attempt));\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\nexport function isWritableDirectory(dir: string): boolean {\r\n try {\r\n fs.mkdirSync(dir, { recursive: true });\r\n const probe = path.join(dir, `.write-test-${process.pid}-${Date.now()}`);\r\n fs.writeFileSync(probe, \"ok\");\r\n fs.unlinkSync(probe);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function systemTempDir(): string {\r\n return os.tmpdir();\r\n}\r\n","// ─── Path containment helpers ────────────────────────────────────────────────\r\n\r\nimport path from \"node:path\";\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nexport function assertWithinRoot(rootDir: string, targetPath: string, label: string): void {\r\n const root = path.resolve(rootDir);\r\n const target = path.resolve(targetPath);\r\n const rel = path.relative(root, target);\r\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\r\n throw new CLIError(\r\n `Unsafe ${label} path: ${targetPath}`,\r\n `Path must stay within ${rootDir}`,\r\n );\r\n }\r\n}\r\n\r\nexport function resolveWithinRoot(rootDir: string, ...segments: string[]): string {\r\n const joined = path.join(rootDir, ...segments);\r\n assertWithinRoot(rootDir, joined, \"file\");\r\n return joined;\r\n}\r\n\r\nexport function normalizeComponentsDir(componentsDir: string, projectRoot: string): string {\r\n const trimmed = componentsDir.trim();\r\n if (!trimmed) {\r\n throw new CLIError(\"componentsDir cannot be empty.\");\r\n }\r\n if (path.isAbsolute(trimmed)) {\r\n assertWithinRoot(projectRoot, trimmed, \"componentsDir\");\r\n return trimmed;\r\n }\r\n const resolved = path.resolve(projectRoot, trimmed);\r\n assertWithinRoot(projectRoot, resolved, \"componentsDir\");\r\n return resolved;\r\n}\r\n","// ─── Safe subprocess execution ─────────────────────────────────────────────\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { execFileSync, spawnSync } from \"node:child_process\";\nimport { atomicWriteJson } from \"../atomic.js\";\nimport { CLIError, formatExecSyncError } from \"../errors.js\";\nimport { isVersionEqual } from \"../version.js\";\nimport { resolveWorkspaceInstallRouting, resolvePackageDir } from \"../workspace.js\";\n\nexport type PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nconst WINDOWS_SHELL_COMMANDS = new Set([\"npm\", \"npx\", \"yarn\", \"pnpm\", \"bun\"]);\n\n/** npm/yarn/pnpm are .cmd shims on Windows; spawnSync needs shell or ENOENT. */\nexport function shouldUseShellForSpawn(file: string): boolean {\n if (process.platform !== \"win32\") return false;\n const base = file.replace(/\\.(cmd|exe|bat)$/i, \"\");\n return WINDOWS_SHELL_COMMANDS.has(base);\n}\n\nexport function execFileCommand(\n file: string,\n args: string[],\n cwd: string,\n inheritStdio = false,\n): void {\n const result = spawnSync(file, args, {\n cwd,\n stdio: inheritStdio ? \"inherit\" : \"pipe\",\n encoding: \"utf-8\",\n shell: shouldUseShellForSpawn(file),\n });\n\n if (result.status === 0) return;\n\n const err = new Error(\n formatExecSyncError(result) ?? `Command failed: ${file} ${args.join(\" \")}`,\n ) as Error & { stderr?: string; stdout?: string };\n if (typeof result.stderr === \"string\") err.stderr = result.stderr;\n if (typeof result.stdout === \"string\") err.stdout = result.stdout;\n throw err;\n}\n\n/**\n * npm 11 workspace installs crash with \"Cannot read properties of null (reading 'location')\"\n * when the root shrinkwrap is stale for the target workspace. Sync immediately before add.\n */\nfunction syncWorkspaceLockfileBeforeAdd(\n pm: PackageManager,\n commandCwd: string,\n workspaceName: string | null,\n): void {\n if (!workspaceName) return;\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"install\"], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"install\"], commandCwd);\n return;\n case \"bun\":\n return;\n default:\n execFileCommand(\"npm\", [\"install\"], commandCwd);\n }\n}\n\n/** Parse `pkg`, `pkg@latest`, or `@scope/pkg@^1.0.0`. */\nexport function parsePackageInstallSpec(spec: string): { name: string; range: string } {\n const trimmed = spec.trim();\n if (!trimmed) {\n throw new CLIError(\"Invalid package spec.\", \"Expected a non-empty package name.\");\n }\n\n if (trimmed.startsWith(\"@\")) {\n const slash = trimmed.indexOf(\"/\");\n if (slash === -1) {\n throw new CLIError(`Invalid scoped package spec: ${spec}`);\n }\n const at = trimmed.indexOf(\"@\", slash + 1);\n if (at === -1) return { name: trimmed, range: \"latest\" };\n return { name: trimmed.slice(0, at), range: trimmed.slice(at + 1) || \"latest\" };\n }\n\n const at = trimmed.indexOf(\"@\");\n if (at === -1) return { name: trimmed, range: \"latest\" };\n return { name: trimmed.slice(0, at), range: trimmed.slice(at + 1) || \"latest\" };\n}\n\n/** Range written to package.json before npm resolves and pins a semver. */\nexport function manifestDependencyRange(range: string): string {\n return range === \"*\" ? \"latest\" : range;\n}\n\nfunction readInstalledPackageVersion(packageName: string, startCwd: string): string | null {\n const pkgDir = resolvePackageDir(packageName, startCwd);\n if (!pkgDir) return null;\n try {\n const pkg = fs.readJsonSync(path.join(pkgDir, \"package.json\")) as { version?: string };\n return typeof pkg.version === \"string\" && pkg.version.length > 0 ? pkg.version : null;\n } catch {\n return null;\n }\n}\n\n/**\n * npm 11 crashes on `npm install <pkg> -w <name>` when the workspace root has\n * `file:` dependencies (e.g. a linked local CLI). Write deps to the child\n * package.json, then sync with `npm install` at the workspace root.\n */\nfunction npmInstallWorkspacePackagesViaManifest(\n packageDir: string,\n commandCwd: string,\n pkgList: string[],\n dev: boolean,\n): void {\n const pkgPath = path.join(packageDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) {\n throw new CLIError(\n `No package.json found in ${packageDir}.`,\n \"Run iui init from a directory that contains package.json.\",\n );\n }\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const field = dev ? \"devDependencies\" : \"dependencies\";\n const previousField = { ...(pkg[field] ?? {}) };\n const deps = { ...previousField };\n\n for (const spec of pkgList) {\n const { name, range } = parsePackageInstallSpec(spec);\n deps[name] = manifestDependencyRange(range);\n }\n\n pkg[field] = deps;\n atomicWriteJson(pkgPath, pkg);\n\n try {\n execFileCommand(\"npm\", [\"install\", \"--legacy-peer-deps\"], commandCwd);\n } catch (err) {\n pkg[field] = previousField;\n atomicWriteJson(pkgPath, pkg);\n throw err;\n }\n\n // Normalize to caret ranges and verify explicit semver installs resolved correctly.\n for (const spec of pkgList) {\n const { name, range } = parsePackageInstallSpec(spec);\n const installed = readInstalledPackageVersion(name, packageDir);\n const expectedExact = /^\\d+\\.\\d+\\.\\d+/.test(range)\n ? range.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] ?? null\n : null;\n\n if (expectedExact && installed && !isVersionEqual(installed, expectedExact)) {\n throw new CLIError(\n `Expected ${name}@${expectedExact} after install, but found v${installed}.`,\n \"Check registry auth (iui login) and retry the install from the workspace root.\",\n );\n }\n\n if (installed) {\n deps[name] = `^${installed}`;\n }\n }\n\n pkg[field] = deps;\n atomicWriteJson(pkgPath, pkg);\n}\n\nfunction npmInstallWorkspacePackages(\n pm: PackageManager,\n cwd: string,\n commandCwd: string,\n workspaceName: string,\n pkgList: string[],\n dev: boolean,\n): void {\n if (pm === \"npm\") {\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n npmInstallWorkspacePackagesViaManifest(cwd, commandCwd, pkgList, dev);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\n \"yarn\",\n [\"workspace\", workspaceName, \"add\", ...(dev ? [\"-D\"] : []), ...pkgList],\n commandCwd,\n );\n return;\n case \"pnpm\":\n execFileCommand(\n \"pnpm\",\n [\"add\", ...(dev ? [\"-D\"] : []), ...pkgList, \"--filter\", workspaceName],\n commandCwd,\n );\n return;\n default:\n execFileCommand(\"npm\", [\"install\", ...pkgList, \"-w\", workspaceName], commandCwd);\n }\n}\n\nexport function installPackages(pm: PackageManager, packages: string, cwd: string): void {\n const pkgList = packages.split(/\\s+/).filter(Boolean);\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n if (workspaceName) {\n npmInstallWorkspacePackages(pm, cwd, commandCwd, workspaceName, pkgList, false);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"add\", ...pkgList], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"add\", ...pkgList], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", ...pkgList], cwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\", ...pkgList], commandCwd);\n }\n}\n\nexport function installDevPackages(pm: PackageManager, packages: string, cwd: string): void {\n const pkgList = packages.split(/\\s+/).filter(Boolean);\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n if (workspaceName) {\n npmInstallWorkspacePackages(pm, cwd, commandCwd, workspaceName, pkgList, true);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"add\", \"-D\", ...pkgList], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"add\", \"-D\", ...pkgList], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", \"-d\", ...pkgList], cwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\", \"--save-dev\", ...pkgList], commandCwd);\n }\n}\n\nexport function installTarball(pm: PackageManager, tarballPath: string, cwd: string): void {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n\n switch (pm) {\n case \"yarn\":\n if (workspaceName) {\n execFileCommand(\"yarn\", [\"workspace\", workspaceName, \"add\", tarballPath], commandCwd);\n return;\n }\n execFileCommand(\"yarn\", [\"add\", tarballPath], commandCwd);\n return;\n case \"pnpm\":\n if (workspaceName) {\n execFileCommand(\"pnpm\", [\"add\", tarballPath, \"--filter\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"pnpm\", [\"add\", tarballPath], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", tarballPath], cwd);\n return;\n default:\n if (workspaceName) {\n execFileCommand(\n \"npm\",\n [\"install\", \"--no-save\", tarballPath, \"-w\", workspaceName],\n commandCwd,\n );\n return;\n }\n execFileCommand(\"npm\", [\"install\", \"--no-save\", tarballPath], commandCwd);\n }\n}\n\nexport function runSyncInstall(pm: PackageManager, cwd: string): void {\n const { commandCwd } = resolveWorkspaceInstallRouting(cwd);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"install\"], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"install\"], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"install\"], commandCwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\"], commandCwd);\n }\n}\n\nexport function uninstallPackage(pm: PackageManager, packageName: string, cwd: string): void {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n switch (pm) {\n case \"yarn\":\n if (workspaceName) {\n execFileCommand(\"yarn\", [\"workspace\", workspaceName, \"remove\", packageName], commandCwd);\n return;\n }\n execFileCommand(\"yarn\", [\"remove\", packageName], commandCwd);\n return;\n case \"pnpm\":\n if (workspaceName) {\n execFileCommand(\"pnpm\", [\"remove\", packageName, \"--filter\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"pnpm\", [\"remove\", packageName], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"remove\", packageName], cwd);\n return;\n default:\n if (workspaceName) {\n execFileCommand(\"npm\", [\"uninstall\", packageName, \"-w\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"npm\", [\"uninstall\", packageName], commandCwd);\n }\n}\n\nexport function runTscNoEmit(tscPath: string, args: string[], cwd: string): void {\n try {\n execFileSync(process.execPath, [tscPath, ...args], {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n encoding: \"utf-8\",\n });\n } catch (err) {\n throw err;\n }\n}\n\nexport function failInstall(err: unknown, context: string): never {\n throw new CLIError(\n `Failed during ${context}.`,\n formatExecSyncError(err) ?? \"Unknown install error\",\n );\n}\n","// ─── Semver helpers ─────────────────────────────────────────────────────────\r\n//\r\n// Lightweight, dependency-free semver utilities used for update planning and\r\n// version drift detection. Implements the comparison rules from semver 2.0.0\r\n// for major.minor.patch and the standard prerelease ordering (numeric vs\r\n// alphanumeric identifiers).\r\n\r\nexport interface SemVer {\r\n major: number;\r\n minor: number;\r\n patch: number;\r\n prerelease: ReadonlyArray<string | number>;\r\n build: ReadonlyArray<string>;\r\n}\r\n\r\nconst SEMVER_PATTERN =\r\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/;\r\n\r\n/**\r\n * Strip leading semver range characters (^, ~, >=, etc.) and surrounding\r\n * whitespace. Returns the bare candidate version string.\r\n */\r\nexport function cleanVersionString(version: string | null | undefined): string {\r\n if (!version) return \"\";\r\n return version.replace(/^[\\s\\^~>=<v]+/i, \"\").trim();\r\n}\r\n\r\n/**\r\n * Parse a strict semver string. Returns null when the input is not a valid\r\n * semver (range strings like `^1.2.3` must be cleaned first).\r\n */\r\nexport function parseVersion(input: string | null | undefined): SemVer | null {\r\n if (!input) return null;\r\n const cleaned = cleanVersionString(input);\r\n if (!cleaned) return null;\r\n\r\n const match = SEMVER_PATTERN.exec(cleaned);\r\n if (!match) return null;\r\n\r\n const [, major, minor, patch, prerelease, build] = match;\r\n const prereleaseIdentifiers = prerelease\r\n ? prerelease.split(\".\").map((part) => (/^\\d+$/.test(part) ? Number(part) : part))\r\n : [];\r\n\r\n return {\r\n major: Number(major),\r\n minor: Number(minor),\r\n patch: Number(patch),\r\n prerelease: prereleaseIdentifiers,\r\n build: build ? build.split(\".\") : [],\r\n };\r\n}\r\n\r\nfunction comparePrerelease(\r\n a: ReadonlyArray<string | number>,\r\n b: ReadonlyArray<string | number>,\r\n): number {\r\n // A version without prerelease has higher precedence than one with.\r\n if (a.length === 0 && b.length === 0) return 0;\r\n if (a.length === 0) return 1;\r\n if (b.length === 0) return -1;\r\n\r\n const len = Math.max(a.length, b.length);\r\n for (let i = 0; i < len; i++) {\r\n if (i >= a.length) return -1;\r\n if (i >= b.length) return 1;\r\n const left = a[i];\r\n const right = b[i];\r\n const leftIsNumber = typeof left === \"number\";\r\n const rightIsNumber = typeof right === \"number\";\r\n if (leftIsNumber && rightIsNumber) {\r\n if (left !== right) return (left as number) - (right as number) > 0 ? 1 : -1;\r\n continue;\r\n }\r\n if (leftIsNumber !== rightIsNumber) return leftIsNumber ? -1 : 1;\r\n const ls = String(left);\r\n const rs = String(right);\r\n if (ls === rs) continue;\r\n return ls < rs ? -1 : 1;\r\n }\r\n return 0;\r\n}\r\n\r\n/**\r\n * Strict semver comparison. Returns -1 if a<b, 1 if a>b, 0 if equal.\r\n * Unparseable inputs fall back to case-insensitive string comparison so the\r\n * caller can still order them deterministically.\r\n */\r\nexport function compareVersions(a: string, b: string): number {\r\n const av = parseVersion(a);\r\n const bv = parseVersion(b);\r\n if (!av || !bv) {\r\n const as = cleanVersionString(a).toLowerCase();\r\n const bs = cleanVersionString(b).toLowerCase();\r\n if (as === bs) return 0;\r\n return as < bs ? -1 : 1;\r\n }\r\n if (av.major !== bv.major) return av.major > bv.major ? 1 : -1;\r\n if (av.minor !== bv.minor) return av.minor > bv.minor ? 1 : -1;\r\n if (av.patch !== bv.patch) return av.patch > bv.patch ? 1 : -1;\r\n return comparePrerelease(av.prerelease, bv.prerelease);\r\n}\r\n\r\n/**\r\n * Returns true when `candidate` represents a strictly newer release than\r\n * `current`. Both arguments are tolerated as range strings.\r\n */\r\nexport function isVersionGreater(candidate: string, current: string): boolean {\r\n return compareVersions(candidate, current) > 0;\r\n}\r\n\r\n/**\r\n * Returns true when `candidate` represents the same release as `current`.\r\n */\r\nexport function isVersionEqual(candidate: string, current: string): boolean {\r\n return compareVersions(candidate, current) === 0;\r\n}\r\n","// ─── Monorepo / workspace helpers ────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { IUI_DIR } from \"../constants.js\";\n\nfunction isDirectory(p: string): boolean {\n try {\n return fs.statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction readPackageJson(dir: string): Record<string, unknown> | null {\n const p = path.join(dir, \"package.json\");\n if (!fs.existsSync(p)) return null;\n try {\n const data = fs.readJsonSync(p) as unknown;\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n return data as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n return null;\n}\n\n/** npm / yarn / bun workspaces from package.json */\nfunction workspacePatternsFromPackageJson(dir: string): string[] {\n const pkg = readPackageJson(dir);\n if (!pkg) return [];\n const workspaces = pkg.workspaces;\n if (Array.isArray(workspaces)) {\n return workspaces.map(String);\n }\n if (workspaces && typeof workspaces === \"object\" && !Array.isArray(workspaces)) {\n const w = workspaces as { packages?: unknown };\n if (Array.isArray(w.packages)) return w.packages.map(String);\n }\n return [];\n}\n\n/** pnpm-workspace.yaml `packages:` entries */\nfunction workspacePatternsFromPnpm(dir: string): string[] {\n const p = path.join(dir, \"pnpm-workspace.yaml\");\n if (!fs.existsSync(p)) return [];\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n const patterns: string[] = [];\n let inPackages = false;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n if (trimmed === \"packages:\") {\n inPackages = true;\n continue;\n }\n if (inPackages) {\n if (!trimmed.startsWith(\"-\")) {\n if (!line.startsWith(\" \") && !line.startsWith(\"\\t\")) inPackages = false;\n if (!inPackages) continue;\n }\n if (!trimmed.startsWith(\"-\")) continue;\n const value = trimmed.replace(/^-\\s*/, \"\").replace(/^['\"]|['\"]$/g, \"\");\n if (value) patterns.push(value);\n }\n }\n return patterns;\n } catch {\n return [];\n }\n}\n\nfunction expandWorkspacePattern(workspaceRoot: string, pattern: string): string[] {\n const normalized = pattern.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\");\n\n if (normalized.includes(\"**\")) {\n const prefix = normalized.split(\"**\")[0]!.replace(/\\/$/, \"\");\n const searchRoot = prefix ? path.join(workspaceRoot, prefix) : workspaceRoot;\n return findNestedPackageDirs(searchRoot);\n }\n\n if (normalized.includes(\"*\")) {\n const idx = normalized.indexOf(\"*\");\n const base = path.join(workspaceRoot, normalized.slice(0, idx).replace(/\\/$/, \"\"));\n if (!isDirectory(base)) return [];\n return fs\n .readdirSync(base)\n .map((name) => path.join(base, name))\n .filter((dir) => fs.existsSync(path.join(dir, \"package.json\")));\n }\n\n const dir = path.join(workspaceRoot, normalized);\n return fs.existsSync(path.join(dir, \"package.json\")) ? [dir] : [];\n}\n\n/** Discover workspace packages under a directory tree (for `packages/**` style globs). */\nfunction findNestedPackageDirs(rootDir: string, maxDepth = 6): string[] {\n if (!isDirectory(rootDir)) return [];\n\n const results: string[] = [];\n\n function walk(current: string, depth: number): void {\n if (depth > maxDepth) return;\n\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n results.push(current);\n return;\n }\n\n let entries: string[] = [];\n try {\n entries = fs.readdirSync(current);\n } catch {\n return;\n }\n\n for (const name of entries) {\n if (name === \"node_modules\" || name === \"dist\" || name === \"build\") continue;\n const child = path.join(current, name);\n if (isDirectory(child)) walk(child, depth + 1);\n }\n }\n\n walk(rootDir, 0);\n return results;\n}\n\n/**\n * Find the monorepo workspace root (directory with workspaces / pnpm-workspace.yaml).\n */\nexport function findWorkspaceRoot(startCwd: string): string | null {\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const patterns = [\n ...workspacePatternsFromPackageJson(dir),\n ...workspacePatternsFromPnpm(dir),\n ];\n if (patterns.length > 0) return dir;\n\n if (dir === fsRoot) break;\n dir = path.dirname(dir);\n }\n return null;\n}\n\n/**\n * Find the IUI project root for the current directory.\n * In monorepos, prefers the workspace root when both root and nested packages\n * were initialized separately.\n */\nexport function findIuiProjectRoot(startCwd: string): string | null {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n const candidates: string[] = [];\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n if (fs.existsSync(path.join(dir, IUI_DIR, \"project.json\"))) {\n candidates.push(dir);\n }\n if (dir === fsRoot) break;\n dir = path.dirname(dir);\n }\n\n if (candidates.length === 0) return null;\n if (\n workspaceRoot &&\n candidates.some((c) => path.resolve(c) === path.resolve(workspaceRoot))\n ) {\n return workspaceRoot;\n }\n return candidates[0];\n}\n\n/** Resolved IUI metadata root for the current working directory. */\nexport function resolveIuiProjectRoot(startCwd: string): string {\n return findIuiProjectRoot(startCwd) ?? path.resolve(startCwd);\n}\n\nexport type InitRootOptions = {\n /** When true, initialize once at the monorepo workspace root (opt-in). */\n workspace?: boolean;\n};\n\n/**\n * Where `iui init` should run.\n * Default: current package only. Pass workspace: true to init at the monorepo root.\n */\nexport function resolveInitRoot(\n invocationCwd: string,\n options: InitRootOptions = {},\n): {\n initRoot: string;\n workspaceRoot: string | null;\n redirectedFrom: string | null;\n} {\n const cwd = path.resolve(invocationCwd);\n const workspaceRoot = findWorkspaceRoot(cwd);\n\n if (!options.workspace) {\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n }\n\n if (!workspaceRoot) {\n return { initRoot: cwd, workspaceRoot: null, redirectedFrom: null };\n }\n\n if (path.resolve(workspaceRoot) === cwd) {\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n }\n\n if (readPackageJson(workspaceRoot)) {\n return { initRoot: workspaceRoot, workspaceRoot, redirectedFrom: cwd };\n }\n\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n}\n\n/**\n * Where `npm install` / `pnpm install` must run.\n * In npm/pnpm workspaces, installs from a child package fail — use the workspace root.\n */\nexport function resolveDependencyInstallRoot(cwd: string): string {\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/** Where committed project config (.npmrc scope, lockfile) should live in monorepos. */\nexport function resolveProjectConfigRoot(cwd: string): string {\n return resolveDependencyInstallRoot(cwd);\n}\n\n/**\n * True when installs must run against a workspace root (npm/pnpm/yarn workspaces).\n */\nexport function isMonorepoInstallContext(cwd: string): boolean {\n return findWorkspaceRoot(cwd) !== null;\n}\n\n/**\n * Monorepo child apps should use registry installs (`npm install <pkg> -w <name>`).\n * Local `--no-save` tarballs are non-standard in workspaces and can corrupt lockfiles.\n */\nexport function shouldUseWorkspaceRegistryInstall(cwd: string): boolean {\n return isWorkspaceChildPackage(cwd);\n}\n\n/** True when cwd is a workspace package but not the workspace root. */\nexport function isWorkspaceChildPackage(cwd: string): boolean {\n const workspaceRoot = findWorkspaceRoot(cwd);\n if (!workspaceRoot) return false;\n return path.resolve(workspaceRoot) !== path.resolve(cwd);\n}\n\nexport interface WorkspaceInstallRouting {\n /** Directory where the package manager command must run (workspace root in monorepos). */\n commandCwd: string;\n /** Workspace package name from package.json when installing into a child app. */\n workspaceName: string | null;\n}\n\n/**\n * Route `npm|pnpm|yarn add` to the workspace root with -w/--filter when cwd is apps/*.\n * Running `npm install <pkg>` inside a child workspace package fails on npm (null location).\n */\nexport function resolveWorkspaceInstallRouting(packageDir: string): WorkspaceInstallRouting {\n const resolved = path.resolve(packageDir);\n const commandCwd = resolveDependencyInstallRoot(resolved);\n if (!isWorkspaceChildPackage(resolved)) {\n return { commandCwd: resolved, workspaceName: null };\n }\n const pkg = readPackageJson(resolved);\n const name = pkg?.name;\n const workspaceName = typeof name === \"string\" && name.trim() ? name.trim() : null;\n return { commandCwd, workspaceName };\n}\n\n/** Workspace packages that have committed `.iui/project.json` (per-app init). */\nexport function listIuiInitializedPackages(startCwd: string): string[] {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n if (workspaceRoot) {\n const initialized = listWorkspacePackageDirs(workspaceRoot).filter((dir) =>\n fs.existsSync(path.join(dir, IUI_DIR, \"project.json\")),\n );\n if (initialized.length > 0) return initialized;\n }\n\n const iuiRoot = findIuiProjectRoot(startCwd);\n return iuiRoot ? [iuiRoot] : [];\n}\n\n/**\n * Packages to run `iui doctor` against during setup.\n * - Current dir when it has `.iui/`\n * - All initialized workspace apps when run from the monorepo root\n * - Otherwise the current directory (reports not initialized)\n */\nexport function resolveSetupDoctorTargets(cwd: string): string[] {\n const resolved = path.resolve(cwd);\n if (fs.existsSync(path.join(resolved, IUI_DIR, \"project.json\"))) {\n return [resolved];\n }\n\n const workspacePackages = listIuiInitializedPackages(cwd);\n if (workspacePackages.length > 0) return workspacePackages;\n\n return [resolved];\n}\n\n/** List workspace package directories (absolute paths). */\nexport function listWorkspacePackageDirs(workspaceRoot: string): string[] {\n const patterns = [\n ...workspacePatternsFromPackageJson(workspaceRoot),\n ...workspacePatternsFromPnpm(workspaceRoot),\n ];\n const seen = new Set<string>();\n const out: string[] = [];\n\n for (const pattern of patterns) {\n for (const dir of expandWorkspacePattern(workspaceRoot, pattern)) {\n const key = path.resolve(dir);\n if (!seen.has(key)) {\n seen.add(key);\n out.push(key);\n }\n }\n }\n\n return out.sort();\n}\n\n/** POSIX-style relative import path between two directories. */\nexport function relativeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile).replace(/\\\\/g, \"/\");\n if (!rel.startsWith(\".\")) rel = `./${rel}`;\n return rel.replace(/\\.tsx?$/, \"\");\n}\n\n/**\n * Walk upward from startCwd through workspace root (inclusive) to find an installed package directory.\n */\nexport function resolvePackageDir(packageName: string, startCwd: string): string | null {\n const parts = packageName.startsWith(\"@\") ? packageName.split(\"/\") : [packageName];\n const workspaceRoot = findWorkspaceRoot(startCwd);\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const pkgJson = path.join(dir, \"node_modules\", ...parts, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return path.dirname(pkgJson);\n }\n\n const atStop = workspaceRoot && path.resolve(dir) === path.resolve(workspaceRoot);\n if (dir === fsRoot || atStop) break;\n dir = path.dirname(dir);\n }\n\n return null;\n}\n\n/** True when `packageName` is declared in this directory's package.json only (not ancestors). */\nexport function isPackageInDirectDeps(packageName: string, cwd: string): string | null {\n const pkg = readPackageJson(path.resolve(cwd));\n if (!pkg) return null;\n const deps = pkg.dependencies as Record<string, string> | undefined;\n const devDeps = pkg.devDependencies as Record<string, string> | undefined;\n return deps?.[packageName] ?? devDeps?.[packageName] ?? null;\n}\n\n/** Find package.json declaring a dependency, walking up through the workspace. */\nexport function findPackageJsonWithDep(\n packageName: string,\n startCwd: string,\n): { dir: string; version: string } | null {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const pkg = readPackageJson(dir);\n if (pkg) {\n const deps = pkg.dependencies as Record<string, string> | undefined;\n const devDeps = pkg.devDependencies as Record<string, string> | undefined;\n const version = deps?.[packageName] ?? devDeps?.[packageName];\n if (version) return { dir, version };\n }\n\n const atStop = workspaceRoot && path.resolve(dir) === path.resolve(workspaceRoot);\n if (dir === fsRoot || atStop) break;\n dir = path.dirname(dir);\n }\n\n return null;\n}\n","// ─── Registry manifest validation (zod) ────────────────────────────────────\r\n\r\nimport { z } from \"zod\";\r\nimport type { ComponentPackageManifest } from \"../types.js\";\r\n\r\nconst slugSchema = z\r\n .string()\r\n .regex(/^[a-z][a-z0-9-]*$/, \"slug must be lowercase alphanumeric with hyphens\");\r\n\r\nconst registryItemSchema = z.object({\r\n name: slugSchema,\r\n type: z.string(),\r\n title: z.string().max(120),\r\n description: z.string().max(500).optional(),\r\n dirName: z\r\n .string()\r\n .regex(/^[A-Za-z][A-Za-z0-9]*$/, \"dirName must be a valid PascalCase identifier\"),\r\n dependencies: z.array(z.string()).optional(),\r\n registryDependencies: z.array(slugSchema).optional(),\r\n slots: z.array(z.string().max(64)).optional(),\r\n categories: z.array(z.string()).optional(),\r\n meta: z.record(z.unknown()).optional(),\r\n});\r\n\r\nconst manifestSchema = z.object({\r\n $schema: z.string().optional(),\r\n name: z.string().max(120),\r\n homepage: z.string().url().optional().or(z.literal(\"\")),\r\n version: z.string().max(64),\r\n items: z.array(registryItemSchema).min(1),\r\n});\r\n\r\nexport function parseAndValidateRegistryManifest(\r\n raw: unknown,\r\n source: string,\r\n): ComponentPackageManifest {\r\n const result = manifestSchema.safeParse(raw);\r\n if (!result.success) {\r\n const detail = result.error.issues\r\n .slice(0, 5)\r\n .map((i) => `${i.path.join(\".\")}: ${i.message}`)\r\n .join(\"; \");\r\n throw new Error(`Invalid component registry from ${source}: ${detail}`);\r\n }\r\n return result.data as ComponentPackageManifest;\r\n}\r\n","/**\n * Product CLI scaffold — loads contract defaults from @inventive-ui/framework only.\n * Accent palettes are never scaffolded; users define theme.colors.accent themselves.\n */\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createJiti } from \"jiti\";\nimport { CLIError } from \"./errors.js\";\nimport { FRAMEWORK_PACKAGE } from \"../constants.js\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nfunction resolveFrameworkScriptsDir(startCwd: string): string {\n const searchRoots = [startCwd, process.cwd(), join(__dirname, \"../..\")];\n for (const root of searchRoots) {\n const frameworkDir = resolvePackageDir(FRAMEWORK_PACKAGE, root);\n if (!frameworkDir) continue;\n const scriptsDir = join(frameworkDir, \"scripts\");\n const loader = join(scriptsDir, \"load-framework-theme-defaults.mjs\");\n if (existsSync(loader)) return scriptsDir;\n }\n\n throw new CLIError(\n `Cannot scaffold iui.config.ts: ${FRAMEWORK_PACKAGE} is not installed or is missing scripts/load-framework-theme-defaults.mjs.`,\n );\n}\n\nexport function buildProjectConfigSource(cwd: string = process.cwd()): string {\n const scriptsDir = resolveFrameworkScriptsDir(cwd);\n const jiti = createJiti(import.meta.url, { interopDefault: true });\n const loader = jiti(\n join(scriptsDir, \"load-framework-theme-defaults.mjs\"),\n ) as {\n loadFrameworkThemeDefaults: (dir: string) => unknown;\n buildThemeScaffoldConfig: (\n defaults: unknown,\n options?: { configType?: string },\n ) => string;\n };\n\n const defaults = loader.loadFrameworkThemeDefaults(scriptsDir);\n return loader.buildThemeScaffoldConfig(defaults, {\n configType: \"IUIThemeConfig\",\n });\n}\n","// ─── Identifier / slug validation ──────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nconst SLUG_RE = /^[a-z][a-z0-9-]*$/;\r\nconst JS_IDENTIFIER_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\r\nconst NPM_SCOPE_IMPORT_RE = /^@inventive-ui\\/[a-z0-9][a-z0-9._-]*$/;\r\nconst NPM_COMPONENT_SUBPATH_RE = /^@inventive-ui\\/components\\/[A-Za-z][A-Za-z0-9-]*$/;\r\n\r\nexport function assertComponentSlug(slug: string): void {\r\n if (!SLUG_RE.test(slug)) {\r\n throw new CLIError(\r\n `Invalid component slug: \"${slug}\"`,\r\n \"Use lowercase letters, numbers, and hyphens (e.g. button, input).\",\r\n );\r\n }\r\n}\r\n\r\nexport function assertJsIdentifier(name: string, label: string): void {\r\n if (!JS_IDENTIFIER_RE.test(name)) {\r\n throw new CLIError(`Invalid ${label}: \"${name}\"`);\r\n }\r\n}\r\n\r\nexport function assertImportSpecifier(specifier: string): void {\r\n if (NPM_SCOPE_IMPORT_RE.test(specifier)) return;\r\n if (NPM_COMPONENT_SUBPATH_RE.test(specifier)) return;\r\n if (/^@inventive-ui\\/[a-z0-9][a-z0-9-]*$/.test(specifier)) return;\r\n throw new CLIError(`Unsafe import specifier: \"${specifier}\"`);\r\n}\r\n\r\nexport function escapeTsStringLiteral(value: string): string {\r\n return JSON.stringify(value);\r\n}\r\n\r\n/** Resolve a user-provided slug against manifest keys (case-insensitive). */\r\nexport function resolveManifestKey(\r\n manifest: Record<string, unknown>,\r\n input: string,\r\n): string | null {\r\n const trimmed = input.trim();\r\n if (manifest[trimmed] !== undefined) return trimmed;\r\n const lower = trimmed.toLowerCase();\r\n for (const key of Object.keys(manifest)) {\r\n if (key.toLowerCase() === lower) return key;\r\n }\r\n return null;\r\n}\r\n\r\nexport function sanitizePackageVersionHeader(value: string | null): string | null {\r\n if (!value) return null;\r\n const trimmed = value.trim();\r\n if (!/^[0-9A-Za-z.+~^<>= -]+$/.test(trimmed) || trimmed.length > 64) {\r\n throw new CLIError(\"Server returned an invalid package version header.\");\r\n }\r\n return trimmed;\r\n}\r\n","// ─── Vite config: scaffold once, patch forever ─────────────────────────────\n\nimport ts from \"typescript\";\n\nexport type ViteConfigEnsureAction =\n | \"skipped\"\n | \"scaffolded\"\n | \"patched\"\n | \"merged\"\n | \"noop\"\n | \"failed\";\n\nconst IUI_MANAGED_MARKER = \"@iui-managed\";\nconst FRAMEWORK_VITE_MODULE = \"@inventive-ui/framework/vite\";\n\nconst DEDUPE_PACKAGES = [\"@inventive-ui/framework\", \"react\", \"react-dom\"] as const;\n\nexport const MINIMAL_VITE_SCAFFOLD = `import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport {\n inventiveUiVite,\n IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE,\n} from \"@inventive-ui/framework/vite\";\n\n// @iui-managed — safe to upgrade via iui init/repair\n// inventiveUiVite injects theme + compile-first CSS into <head> (zero-FOUC).\n// Do not import style-map \".generated\" files into the browser — scan them via Framework defaults (src, .iui).\nexport default defineConfig({\n plugins: [...inventiveUiVite({ root: import.meta.dirname }), react()],\n resolve: {\n dedupe: [\"@inventive-ui/framework\", \"react\", \"react-dom\"],\n },\n optimizeDeps: {\n exclude: [...IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE],\n },\n});\n`;\n\n/** Explicit CLI ownership — never infer from inventiveUiVite presence. */\nexport function isIuiManagedViteConfig(content: string): boolean {\n return new RegExp(`//\\\\s*${IUI_MANAGED_MARKER}\\\\b`).test(content);\n}\n\n/** Legacy minimal CLI scaffold (no marker) — eligible for delete on React-only cleanup. */\nexport function isExactMinimalScaffold(content: string): boolean {\n if (isIuiManagedViteConfig(content)) return true;\n const lines = content.split(\"\\n\").filter((line) => line.trim().length > 0);\n if (lines.length > 28) return false;\n if (/mdx|@mdx-js|shiki|manualChunks|alias:/i.test(content)) return false;\n return (\n /from\\s+[\"']@inventive-ui\\/framework\\/vite[\"']/.test(content) &&\n /plugins:\\s*\\[\\.\\.\\.inventiveUiVite/.test(content) &&\n /IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE/.test(content)\n );\n}\n\nfunction hasFrameworkViteImport(sourceFile: ts.SourceFile): boolean {\n let found = false;\n const visit = (node: ts.Node): void => {\n if (\n ts.isImportDeclaration(node) &&\n ts.isStringLiteral(node.moduleSpecifier) &&\n node.moduleSpecifier.text === FRAMEWORK_VITE_MODULE\n ) {\n found = true;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction hasInventiveUiViteCall(sourceFile: ts.SourceFile): boolean {\n let found = false;\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"inventiveUiVite\"\n ) {\n found = true;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction getCalleeName(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr)) return expr.text;\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) {\n return expr.name.text;\n }\n return undefined;\n}\n\nfunction getDefaultExportExpression(sourceFile: ts.SourceFile): ts.Expression | undefined {\n for (const stmt of sourceFile.statements) {\n if (ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n return stmt.expression;\n }\n }\n return undefined;\n}\n\nfunction getConfigObjectLiteral(expr: ts.Expression): ts.ObjectLiteralExpression | undefined {\n let current = expr;\n if (ts.isCallExpression(current) && getCalleeName(current.expression) === \"defineConfig\") {\n current = current.arguments[0] ?? current;\n }\n\n if (ts.isObjectLiteralExpression(current)) return current;\n\n if (ts.isArrowFunction(current) || ts.isFunctionExpression(current)) {\n const body = current.body;\n if (ts.isObjectLiteralExpression(body)) return body;\n if (ts.isBlock(body)) {\n for (const stmt of body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(stmt.expression)\n ) {\n return stmt.expression;\n }\n }\n }\n }\n\n return undefined;\n}\n\nfunction findProperty(\n obj: ts.ObjectLiteralExpression,\n name: string,\n): ts.PropertyAssignment | undefined {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (ts.isIdentifier(prop.name) && prop.name.text === name) return prop;\n if (ts.isStringLiteral(prop.name) && prop.name.text === name) return prop;\n }\n return undefined;\n}\n\nfunction createImportMetaDirname(): ts.Expression {\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createMetaProperty(\n ts.SyntaxKind.ImportKeyword,\n ts.factory.createIdentifier(\"meta\"),\n ),\n \"dirname\",\n );\n}\n\nfunction createInventiveUiViteSpread(): ts.Expression {\n return ts.factory.createSpreadElement(\n ts.factory.createCallExpression(ts.factory.createIdentifier(\"inventiveUiVite\"), undefined, [\n ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment(\"root\", createImportMetaDirname()),\n ]),\n ]),\n );\n}\n\nfunction createIuiExcludeSpread(): ts.Expression {\n return ts.factory.createSpreadElement(ts.factory.createIdentifier(\"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\"));\n}\n\nfunction arrayHasInventiveUiVite(arr: ts.ArrayLiteralExpression): boolean {\n return arr.elements.some(\n (el) =>\n ts.isSpreadElement(el) &&\n ts.isCallExpression(el.expression) &&\n ts.isIdentifier(el.expression.expression) &&\n el.expression.expression.text === \"inventiveUiVite\",\n );\n}\n\nfunction arrayHasIuiExcludeSpread(arr: ts.ArrayLiteralExpression): boolean {\n return arr.elements.some(\n (el) =>\n ts.isSpreadElement(el) &&\n ts.isIdentifier(el.expression) &&\n el.expression.text === \"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\",\n );\n}\n\nfunction arrayHasStringLiteral(arr: ts.ArrayLiteralExpression, value: string): boolean {\n return arr.elements.some(\n (el) => ts.isStringLiteral(el) && el.text === value,\n );\n}\n\nfunction findLeadingArrayLiteral(expr: ts.Expression): ts.ArrayLiteralExpression | undefined {\n if (ts.isArrayLiteralExpression(expr)) return expr;\n if (ts.isParenthesizedExpression(expr)) return findLeadingArrayLiteral(expr.expression);\n if (ts.isCallExpression(expr) && ts.isPropertyAccessExpression(expr.expression)) {\n return findLeadingArrayLiteral(expr.expression.expression);\n }\n return undefined;\n}\n\nfunction replaceLeadingArrayLiteral(\n expr: ts.Expression,\n replacement: ts.ArrayLiteralExpression,\n): { expression: ts.Expression; changed: boolean } {\n if (ts.isArrayLiteralExpression(expr)) {\n return { expression: replacement, changed: true };\n }\n if (ts.isParenthesizedExpression(expr)) {\n const inner = replaceLeadingArrayLiteral(expr.expression, replacement);\n if (!inner.changed) return { expression: expr, changed: false };\n return {\n expression: ts.factory.updateParenthesizedExpression(expr, inner.expression),\n changed: true,\n };\n }\n if (ts.isCallExpression(expr) && ts.isPropertyAccessExpression(expr.expression)) {\n const inner = replaceLeadingArrayLiteral(expr.expression.expression, replacement);\n if (!inner.changed) return { expression: expr, changed: false };\n const updatedAccess = ts.factory.updatePropertyAccessExpression(\n expr.expression,\n inner.expression,\n expr.expression.name,\n );\n return {\n expression: ts.factory.updateCallExpression(\n expr,\n updatedAccess,\n expr.typeArguments,\n expr.arguments,\n ),\n changed: true,\n };\n }\n return { expression: expr, changed: false };\n}\n\nfunction ensureFrameworkViteImport(sourceFile: ts.SourceFile): ts.SourceFile {\n if (hasFrameworkViteImport(sourceFile)) return sourceFile;\n\n const importDecl = ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports([\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(\"inventiveUiVite\"),\n ),\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(\"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\"),\n ),\n ]),\n ),\n ts.factory.createStringLiteral(FRAMEWORK_VITE_MODULE),\n );\n\n let insertIndex = 0;\n for (const stmt of sourceFile.statements) {\n if (ts.isImportDeclaration(stmt)) insertIndex++;\n else break;\n }\n\n return ts.factory.updateSourceFile(sourceFile, [\n ...sourceFile.statements.slice(0, insertIndex),\n importDecl,\n ...sourceFile.statements.slice(insertIndex),\n ]);\n}\n\nfunction ensurePluginsOnConfig(\n config: ts.ObjectLiteralExpression,\n pluginOnly: boolean,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n if (pluginOnly) return { config, changed: false };\n\n const pluginsProp = findProperty(config, \"plugins\");\n const iuiSpread = createInventiveUiViteSpread();\n\n if (!pluginsProp) {\n const newProp = ts.factory.createPropertyAssignment(\n \"plugins\",\n ts.factory.createArrayLiteralExpression([iuiSpread]),\n );\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [newProp, ...config.properties]),\n changed: true,\n };\n }\n\n if (!ts.isArrayLiteralExpression(pluginsProp.initializer)) {\n const pluginsArray = findLeadingArrayLiteral(pluginsProp.initializer);\n if (!pluginsArray) {\n return { config, changed: false };\n }\n if (arrayHasInventiveUiVite(pluginsArray)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(pluginsArray, [\n iuiSpread,\n ...pluginsArray.elements,\n ]);\n const replaced = replaceLeadingArrayLiteral(pluginsProp.initializer, newArr);\n if (!replaced.changed) {\n return { config, changed: false };\n }\n const newPluginsProp = ts.factory.updatePropertyAssignment(\n pluginsProp,\n pluginsProp.name,\n replaced.expression,\n );\n const newProps = config.properties.map((p) => (p === pluginsProp ? newPluginsProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newProps),\n changed: true,\n };\n }\n\n const arr = pluginsProp.initializer;\n if (arrayHasInventiveUiVite(arr)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(arr, [iuiSpread, ...arr.elements]);\n const newPluginsProp = ts.factory.updatePropertyAssignment(\n pluginsProp,\n pluginsProp.name,\n newArr,\n );\n const newProps = config.properties.map((p) => (p === pluginsProp ? newPluginsProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newProps),\n changed: true,\n };\n}\n\nfunction ensureDedupeOnConfig(\n config: ts.ObjectLiteralExpression,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n const resolveProp = findProperty(config, \"resolve\");\n let changed = false;\n\n if (!resolveProp || !ts.isObjectLiteralExpression(resolveProp.initializer)) {\n const dedupeProp = ts.factory.createPropertyAssignment(\n \"dedupe\",\n ts.factory.createArrayLiteralExpression(\n DEDUPE_PACKAGES.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ),\n );\n const resolveObj = ts.factory.createObjectLiteralExpression([dedupeProp]);\n if (resolveProp) {\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n resolveObj,\n );\n const newProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return { config: ts.factory.updateObjectLiteralExpression(config, newProps), changed: true };\n }\n const newResolve = ts.factory.createPropertyAssignment(\"resolve\", resolveObj);\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [...config.properties, newResolve]),\n changed: true,\n };\n }\n\n const resolveObj = resolveProp.initializer;\n const dedupeProp = findProperty(resolveObj, \"dedupe\");\n const required = [...DEDUPE_PACKAGES];\n\n if (!dedupeProp || !ts.isArrayLiteralExpression(dedupeProp.initializer)) {\n const newDedupe = ts.factory.createPropertyAssignment(\n \"dedupe\",\n ts.factory.createArrayLiteralExpression(\n required.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ),\n );\n const newResolveProps = dedupeProp\n ? resolveObj.properties.map((p) => (p === dedupeProp ? newDedupe : p))\n : [...resolveObj.properties, newDedupe];\n const newResolveObj = ts.factory.updateObjectLiteralExpression(resolveObj, newResolveProps);\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n newResolveObj,\n );\n const newConfigProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n }\n\n const arr = dedupeProp.initializer;\n const missing = required.filter((pkg) => !arrayHasStringLiteral(arr, pkg));\n if (missing.length === 0) return { config, changed: false };\n\n const newArr = ts.factory.updateArrayLiteralExpression(arr, [\n ...arr.elements,\n ...missing.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ]);\n changed = true;\n const newDedupeProp = ts.factory.updatePropertyAssignment(\n dedupeProp,\n dedupeProp.name,\n newArr,\n );\n const newResolveProps = resolveObj.properties.map((p) => (p === dedupeProp ? newDedupeProp : p));\n const newResolveObj = ts.factory.updateObjectLiteralExpression(resolveObj, newResolveProps);\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n newResolveObj,\n );\n const newConfigProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed,\n };\n}\n\nfunction ensureOptimizeDepsExcludeOnConfig(\n config: ts.ObjectLiteralExpression,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n const optimizeProp = findProperty(config, \"optimizeDeps\");\n const excludeSpread = createIuiExcludeSpread();\n\n if (!optimizeProp || !ts.isObjectLiteralExpression(optimizeProp.initializer)) {\n const excludeProp = ts.factory.createPropertyAssignment(\n \"exclude\",\n ts.factory.createArrayLiteralExpression([excludeSpread]),\n );\n const optimizeObj = ts.factory.createObjectLiteralExpression([excludeProp]);\n if (optimizeProp) {\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n optimizeObj,\n );\n const newProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return { config: ts.factory.updateObjectLiteralExpression(config, newProps), changed: true };\n }\n const newOptimize = ts.factory.createPropertyAssignment(\"optimizeDeps\", optimizeObj);\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [...config.properties, newOptimize]),\n changed: true,\n };\n }\n\n const optimizeObj = optimizeProp.initializer;\n const excludeProp = findProperty(optimizeObj, \"exclude\");\n\n if (!excludeProp || !ts.isArrayLiteralExpression(excludeProp.initializer)) {\n const newExclude = ts.factory.createPropertyAssignment(\n \"exclude\",\n ts.factory.createArrayLiteralExpression([excludeSpread]),\n );\n const newOptimizeProps = excludeProp\n ? optimizeObj.properties.map((p) => (p === excludeProp ? newExclude : p))\n : [...optimizeObj.properties, newExclude];\n const newOptimizeObj = ts.factory.updateObjectLiteralExpression(optimizeObj, newOptimizeProps);\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n newOptimizeObj,\n );\n const newConfigProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n }\n\n if (arrayHasIuiExcludeSpread(excludeProp.initializer)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(excludeProp.initializer, [\n ...excludeProp.initializer.elements,\n excludeSpread,\n ]);\n const newExcludeProp = ts.factory.updatePropertyAssignment(\n excludeProp,\n excludeProp.name,\n newArr,\n );\n const newOptimizeProps = optimizeObj.properties.map((p) => (p === excludeProp ? newExcludeProp : p));\n const newOptimizeObj = ts.factory.updateObjectLiteralExpression(optimizeObj, newOptimizeProps);\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n newOptimizeObj,\n );\n const newConfigProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n}\n\nfunction replaceConfigObjectInTree(\n root: ts.Node,\n oldConfig: ts.ObjectLiteralExpression,\n newConfig: ts.ObjectLiteralExpression,\n): ts.Node {\n const transformer: ts.TransformerFactory<ts.Node> = (context) => {\n const visit: ts.Visitor = (node) => {\n if (node === oldConfig) return newConfig;\n return ts.visitEachChild(node, visit, context);\n };\n return (node) => ts.visitNode(node, visit) as ts.Node;\n };\n\n const result = ts.transform(root, [transformer]);\n const updated = result.transformed[0] ?? root;\n result.dispose();\n return updated;\n}\n\nfunction printSourceFile(sourceFile: ts.SourceFile): string {\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n return `${printer.printNode(ts.EmitHint.Unspecified, sourceFile, sourceFile)}\\n`;\n}\n\nexport function patchViteConfigContent(source: string): { content: string; changed: boolean } | { failed: true } {\n const sourceFile = ts.createSourceFile(\n \"vite.config.ts\",\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const exportExpr = getDefaultExportExpression(sourceFile);\n if (!exportExpr) return { failed: true };\n\n if (!getConfigObjectLiteral(exportExpr)) return { failed: true };\n\n const pluginOnly = hasInventiveUiViteCall(sourceFile);\n let changed = false;\n\n let nextSource = sourceFile;\n if (!hasFrameworkViteImport(sourceFile)) {\n nextSource = ensureFrameworkViteImport(sourceFile);\n changed = true;\n }\n\n const exportExprAfter = getDefaultExportExpression(nextSource);\n if (!exportExprAfter) return { failed: true };\n\n let configObject = getConfigObjectLiteral(exportExprAfter);\n if (!configObject) return { failed: true };\n let config = configObject;\n const pluginsResult = ensurePluginsOnConfig(config, pluginOnly);\n config = pluginsResult.config;\n changed = changed || pluginsResult.changed;\n\n const dedupeResult = ensureDedupeOnConfig(config);\n config = dedupeResult.config;\n changed = changed || dedupeResult.changed;\n\n const excludeResult = ensureOptimizeDepsExcludeOnConfig(config);\n config = excludeResult.config;\n changed = changed || excludeResult.changed;\n\n if (!changed) return { content: source, changed: false };\n\n const updatedExport = replaceConfigObjectInTree(exportExprAfter, configObject, config);\n const updatedStatements = nextSource.statements.map((stmt) => {\n if (ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n return ts.factory.updateExportAssignment(stmt, stmt.modifiers, updatedExport as ts.Expression);\n }\n return stmt;\n });\n\n return {\n content: printSourceFile(ts.factory.updateSourceFile(nextSource, updatedStatements)),\n changed: true,\n };\n}\n","// ─── iui.config.ts: scaffold once, patch forever ───────────────────────────\n\nconst BUILD_BLOCK = ` /**\n * Compile-first CSS — scanned at build time by the Vite/Webpack/Next plugin.\n * Do not import style-map \".generated\" files into the browser graph.\n * scanDirs / scanPackages default in Framework — override only when needed.\n * See Framework docs/01-compile-first-guide.md for all build options.\n */\n build: {\n safelist: [],\n packageSafelist: false,\n includeShadeMatrix: false,\n includeThemePresets: true,\n resolvePalettePatterns: true,\n includeArbitraryScan: true,\n writeFiles: false,\n minify: true,\n useAst: true,\n },\n`;\n\nconst BUILD_DEFAULT_ENTRIES: ReadonlyArray<[string, string]> = [\n [\"safelist\", \"[]\"],\n [\"packageSafelist\", \"false\"],\n [\"includeShadeMatrix\", \"false\"],\n [\"includeThemePresets\", \"true\"],\n [\"resolvePalettePatterns\", \"true\"],\n [\"includeArbitraryScan\", \"true\"],\n [\"writeFiles\", \"false\"],\n [\"minify\", \"true\"],\n [\"useAst\", \"true\"],\n];\n\nexport function patchProjectConfigBuildBlock(content: string): { content: string; changed: boolean } {\n if (!/\\bbuild\\s*:\\s*\\{/.test(content)) {\n const updated = content.replace(\n /(\\n)(};)\\s*\\n(\\s*export default config;)/,\n `$1${BUILD_BLOCK}$1$2\\n$3`,\n );\n if (updated === content) return { content, changed: false };\n return { content: updated, changed: true };\n }\n\n let next = content;\n let changed = false;\n\n if (!/\\bbuild\\s*:\\s*\\{/.test(next)) {\n return { content, changed: false };\n }\n\n for (const [key, value] of BUILD_DEFAULT_ENTRIES) {\n if (new RegExp(`\\\\b${key}\\\\s*:`).test(next)) continue;\n const replaced = next.replace(/(\\bbuild\\s*:\\s*\\{\\n)/, `$1 ${key}: ${value},\\n`);\n if (replaced !== next) {\n next = replaced;\n changed = true;\n }\n }\n\n return { content: next, changed };\n}\n","// ─── component.config.ts: scaffold once, merge new registry entries ────────\n\nimport ts from \"typescript\";\nimport type { ComponentPackageManifest, RegistryItem } from \"../../types.js\";\nimport { resolveComponentExport } from \"../componentExports.js\";\nimport { assertJsIdentifier } from \"../security/identifiers.js\";\n\nfunction findComponentConfigObject(\n sourceFile: ts.SourceFile,\n): ts.ObjectLiteralExpression | undefined {\n let found: ts.ObjectLiteralExpression | undefined;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (ts.isVariableStatement(node)) {\n for (const decl of node.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.name.text === \"componentConfig\" &&\n decl.initializer &&\n ts.isObjectLiteralExpression(decl.initializer)\n ) {\n found = decl.initializer;\n return;\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction findComponentConfigMapType(\n sourceFile: ts.SourceFile,\n): ts.TypeLiteralNode | undefined {\n let found: ts.TypeLiteralNode | undefined;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (\n ts.isTypeAliasDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === \"ComponentConfigMap\" &&\n node.type &&\n ts.isTypeLiteralNode(node.type)\n ) {\n found = node.type;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction existingComponentKeys(obj: ts.ObjectLiteralExpression): Set<string> {\n const keys = new Set<string>();\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (ts.isIdentifier(prop.name)) keys.add(prop.name.text);\n else if (ts.isStringLiteral(prop.name)) keys.add(prop.name.text);\n }\n return keys;\n}\n\nfunction formatDefaultConfig(cfg: Record<string, unknown>): string {\n return JSON.stringify(cfg, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n}\n\nfunction buildComponentEntry(item: RegistryItem): string {\n assertJsIdentifier(item.dirName, \"component dirName\");\n const cfg = (item.meta?.defaultConfig as Record<string, unknown>) ?? {};\n const cfgStr = formatDefaultConfig(cfg);\n return ` ${item.dirName}: {\\n default: ${cfgStr},\\n },\\n\\n`;\n}\n\nfunction buildTypeEntry(item: RegistryItem, cwd: string): string {\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName) {\n return ` ${item.dirName}: { default: Partial<${resolved.propsName}> };`;\n }\n return ` ${item.dirName}: { default: Record<string, unknown> };`;\n}\n\nfunction buildTypeImport(item: RegistryItem, cwd: string): string | null {\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName && resolved.importSpecifier) {\n return `import type { ${resolved.propsName} } from \"${resolved.importSpecifier}\";`;\n }\n return null;\n}\n\nfunction insertBeforeClosingBrace(source: string, objectEnd: number, insertion: string): string {\n let pos = objectEnd - 1;\n while (pos >= 0 && /\\s/.test(source[pos] ?? \"\")) pos--;\n if (source[pos] === \"}\") {\n const prev = source[pos - 1] ?? \"\";\n const needsComma = prev !== \",\" && prev !== \"{\" && prev !== \"\\n\";\n const prefix = needsComma ? \",\\n\" : \"\\n\";\n return `${source.slice(0, pos)}${prefix}${insertion}${source.slice(pos)}`;\n }\n return source;\n}\n\nexport function mergeComponentConfigContent(\n source: string,\n manifest: ComponentPackageManifest | null,\n cwd: string,\n): { content: string; changed: boolean } {\n if (!manifest || manifest.items.length === 0) {\n return { content: source, changed: false };\n }\n\n const sourceFile = ts.createSourceFile(\n \"component.config.ts\",\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const configObject = findComponentConfigObject(sourceFile);\n if (!configObject) return { content: source, changed: false };\n\n const existing = existingComponentKeys(configObject);\n const missing = manifest.items.filter((item) => !existing.has(item.dirName));\n if (missing.length === 0) return { content: source, changed: false };\n\n let next = source;\n const newEntries = missing.map((item) => buildComponentEntry(item)).join(\"\");\n next = insertBeforeClosingBrace(next, configObject.getEnd(), newEntries);\n\n const typeLiteral = findComponentConfigMapType(\n ts.createSourceFile(\"component.config.ts\", next, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS),\n );\n if (typeLiteral) {\n const typeLines = `${missing.map((item) => buildTypeEntry(item, cwd)).join(\"\\n\")}\\n`;\n next = insertBeforeClosingBrace(next, typeLiteral.getEnd(), typeLines);\n }\n\n const existingImportLines = new Set(next.match(/^import\\s.+;$/gm) ?? []);\n const newImports = missing\n .map((item) => buildTypeImport(item, cwd))\n .filter((line): line is string => line !== null && !existingImportLines.has(line));\n\n if (newImports.length > 0) {\n const importMatches = [...next.matchAll(/^import\\s.+;$/gm)];\n const lastImport = importMatches.at(-1);\n if (lastImport?.index !== undefined) {\n const insertAt = lastImport.index + lastImport[0].length;\n next = `${next.slice(0, insertAt)}\\n${[...new Set(newImports)].join(\"\\n\")}${next.slice(insertAt)}`;\n } else {\n next = `${[...new Set(newImports)].join(\"\\n\")}\\n\\n${next}`;\n }\n }\n\n return { content: next, changed: true };\n}\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport type { RegistryItem } from \"../types.js\";\nimport { assertImportSpecifier } from \"./security/identifiers.js\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\ninterface ParsedExports {\n valueExports: Set<string>;\n typeExports: Set<string>;\n}\n\nexport interface ComponentExportResolution {\n ok: boolean;\n importSpecifier?: string;\n /** When the subpath types omit default/named runtime exports, lazy-load from here instead. */\n lazyImportSpecifier?: string;\n componentName?: string;\n propsName?: string;\n /** Suffix after dynamic import(), e.g. \".Switch\" or \".Input.Text\". */\n lazyAccess?: string;\n reason?: string;\n}\n\ninterface ComponentsPackageInfo {\n packageRoot: string;\n exportsField: Record<string, unknown>;\n rootTypesPath: string | null;\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nexport function toPascalCase(value: string): string {\n return value\n .replace(/(^|[-_\\s]+)([a-zA-Z0-9])/g, (_m, _p, c: string) => c.toUpperCase())\n .replace(/[^a-zA-Z0-9]/g, \"\");\n}\n\nfunction readComponentsPackageInfo(cwd: string): ComponentsPackageInfo | null {\n const packageRoot = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!packageRoot) return null;\n const pkgPath = path.join(packageRoot, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, unknown>;\n const exportsField = toRecord(pkg.exports) ?? {};\n\n const rootExport = toRecord(exportsField[\".\"]);\n const rootTypes =\n resolveTypesPathFromExportEntry(rootExport) ??\n (typeof pkg.types === \"string\" ? pkg.types : null);\n\n return {\n packageRoot,\n exportsField,\n rootTypesPath: rootTypes ? path.join(packageRoot, rootTypes) : null,\n };\n } catch {\n return null;\n }\n}\n\nfunction resolveTypesPathFromExportEntry(entry: unknown): string | null {\n if (!entry) return null;\n if (typeof entry === \"string\") return null;\n\n const obj = toRecord(entry);\n if (!obj) return null;\n\n if (typeof obj.types === \"string\") return obj.types;\n\n for (const key of [\"import\", \"require\", \"default\", \"node\", \"browser\"]) {\n const nested = toRecord(obj[key]);\n if (!nested) continue;\n if (typeof nested.types === \"string\") return nested.types;\n }\n\n return null;\n}\n\nfunction parseNamedExportClause(clause: string, parsed: ParsedExports): void {\n const parts = clause\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean);\n\n for (const rawPart of parts) {\n let part = rawPart;\n let isTypeOnly = false;\n if (part.startsWith(\"type \")) {\n isTypeOnly = true;\n part = part.slice(\"type \".length).trim();\n }\n\n const asMatch = part.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s+as\\s+([A-Za-z_][A-Za-z0-9_]*)$/);\n const symbol = asMatch ? asMatch[2] : part;\n if (!symbol) continue;\n\n if (isTypeOnly) parsed.typeExports.add(symbol);\n else parsed.valueExports.add(symbol);\n }\n}\n\nfunction mergeParsedExports(target: ParsedExports, source: ParsedExports): void {\n for (const sym of source.valueExports) target.valueExports.add(sym);\n for (const sym of source.typeExports) target.typeExports.add(sym);\n}\n\nfunction resolveRelativeTypesPath(fromFile: string, rel: string): string | null {\n const base = path.dirname(fromFile);\n const noExt = path.join(base, rel);\n const candidates = [`${noExt}.d.ts`, path.join(noExt, \"index.d.ts\")];\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\nfunction parseTypeExports(typesFilePath: string, visited = new Set<string>()): ParsedExports {\n const parsed: ParsedExports = {\n valueExports: new Set<string>(),\n typeExports: new Set<string>(),\n };\n\n const abs = path.resolve(typesFilePath);\n if (visited.has(abs)) return parsed;\n visited.add(abs);\n\n if (!fs.existsSync(abs)) return parsed;\n\n let text = \"\";\n try {\n text = fs.readFileSync(abs, \"utf-8\");\n } catch {\n return parsed;\n }\n\n applyTypeExportPatterns(text, parsed);\n\n const reexportFrom = text.matchAll(\n /export\\s+(?:type\\s+)?(?:\\{[^}]*\\}|\\*)\\s+from\\s+[\"'](\\.[^\"']+)[\"']/g,\n );\n for (const m of reexportFrom) {\n const refPath = resolveRelativeTypesPath(abs, m[1]);\n if (refPath) mergeParsedExports(parsed, parseTypeExports(refPath, visited));\n }\n\n return parsed;\n}\n\nfunction parseTypeExportsLocal(typesFilePath: string): ParsedExports {\n const parsed: ParsedExports = {\n valueExports: new Set<string>(),\n typeExports: new Set<string>(),\n };\n\n const abs = path.resolve(typesFilePath);\n if (!fs.existsSync(abs)) return parsed;\n\n let text = \"\";\n try {\n text = fs.readFileSync(abs, \"utf-8\");\n } catch {\n return parsed;\n }\n\n applyTypeExportPatterns(text, parsed);\n return parsed;\n}\n\nfunction applyTypeExportPatterns(text: string, parsed: ParsedExports): void {\n const valueDecl = /export\\s+(?:declare\\s+)?(?:const|let|var|function|class)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n const typeDecl = /export\\s+(?:declare\\s+)?(?:type|interface)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n const namedClause = /export\\s+(?!type\\s*\\{)\\{([^}]+)\\}/g;\n const typeNamedClause = /export\\s+type\\s*\\{([^}]+)\\}/g;\n\n for (const m of text.matchAll(valueDecl)) {\n parsed.valueExports.add(m[1]);\n }\n for (const m of text.matchAll(typeDecl)) {\n parsed.typeExports.add(m[1]);\n }\n for (const m of text.matchAll(namedClause)) {\n parseNamedExportClause(m[1], parsed);\n }\n for (const m of text.matchAll(typeNamedClause)) {\n parseNamedExportClause(m[1], parsed);\n }\n}\n\nfunction pickComponentName(item: RegistryItem, parsed: ParsedExports): string | null {\n const expected = [toPascalCase(item.dirName), toPascalCase(item.name)];\n for (const name of expected) {\n if (parsed.valueExports.has(name)) return name;\n }\n\n const lowered = new Set(expected.map((n) => n.toLowerCase()));\n for (const exp of parsed.valueExports) {\n if (lowered.has(exp.toLowerCase())) return exp;\n }\n\n return null;\n}\n\nfunction pickPropsName(componentName: string, parsed: ParsedExports): string | null {\n const direct = `${componentName}Props`;\n if (parsed.typeExports.has(direct) || parsed.valueExports.has(direct)) return direct;\n\n for (const sym of parsed.typeExports) {\n if (sym.toLowerCase() === direct.toLowerCase()) return sym;\n }\n for (const sym of parsed.valueExports) {\n if (sym.toLowerCase() === direct.toLowerCase()) return sym;\n }\n\n return null;\n}\n\nfunction pickDefaultExportComponent(item: RegistryItem, typesIndexPath: string): string | null {\n const expected = [toPascalCase(item.dirName), toPascalCase(item.name)];\n for (const name of expected) {\n const mainTypesPath = findMainComponentTypesPath(typesIndexPath, name);\n if (!mainTypesPath) continue;\n const mainText = readTypesFileText(mainTypesPath);\n const defaultExportMatch = mainText.match(/export\\s+default\\s+([A-Za-z_][A-Za-z0-9_]*)/);\n if (!defaultExportMatch) continue;\n const symbol = defaultExportMatch[1];\n if (expected.some((candidate) => candidate.toLowerCase() === symbol.toLowerCase())) {\n return symbol;\n }\n }\n return null;\n}\n\nfunction readTypesFileText(typesFilePath: string): string {\n try {\n return fs.readFileSync(typesFilePath, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\nfunction findMainComponentTypesPath(typesIndexPath: string, componentName: string): string | null {\n const dir = path.dirname(typesIndexPath);\n const indexText = readTypesFileText(typesIndexPath);\n\n const fromMatches = indexText.matchAll(/from\\s+[\"']\\.\\/([^\"']+)[\"']/g);\n for (const match of fromMatches) {\n const candidate = path.join(dir, `${match[1]}.d.ts`);\n if (fs.existsSync(candidate)) return candidate;\n }\n\n const byName = path.join(dir, `${componentName}.d.ts`);\n return fs.existsSync(byName) ? byName : null;\n}\n\nfunction isNonCallableCompoundExport(typesText: string, symbolName: string): boolean {\n const objectDecl = new RegExp(\n `(?:declare\\\\s+const|const)\\\\s+${symbolName}\\\\s*:\\\\s*\\\\{`,\n );\n return objectDecl.test(typesText);\n}\n\nfunction pickCompoundRenderMember(typesText: string): string {\n if (/\\bText\\s*:\\s*React\\./.test(typesText)) return \"Text\";\n const memberMatch = typesText.match(\n /^\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*React\\.(?:ForwardRefExoticComponent|NamedExoticComponent|FC)/m,\n );\n return memberMatch?.[1] ?? \"Text\";\n}\n\nfunction resolveLazyAccess(\n typesIndexPath: string,\n componentName: string,\n): string {\n const indexText = readTypesFileText(typesIndexPath);\n const mainTypesPath = findMainComponentTypesPath(typesIndexPath, componentName);\n const mainText = mainTypesPath ? readTypesFileText(mainTypesPath) : \"\";\n\n const defaultAsMatch = indexText.match(\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\bdefault\\\\s+as\\\\s+${componentName}\\\\b[^}]*\\\\}`),\n );\n const namedExportMatch = indexText.match(\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\b${componentName}\\\\b[^}]*\\\\}`),\n );\n\n const defaultExportMatch = mainText.match(/export\\s+default\\s+([A-Za-z_][A-Za-z0-9_]*)/);\n const defaultSymbol = defaultExportMatch?.[1];\n\n const compoundSymbol =\n defaultSymbol && isNonCallableCompoundExport(mainText, defaultSymbol)\n ? defaultSymbol\n : isNonCallableCompoundExport(mainText, componentName)\n ? componentName\n : null;\n\n if (compoundSymbol) {\n const member = pickCompoundRenderMember(mainText);\n if (defaultAsMatch || namedExportMatch) {\n return `.${componentName}.${member}`;\n }\n return `.default.${member}`;\n }\n\n if (defaultAsMatch || namedExportMatch) return `.${componentName}`;\n\n if (defaultSymbol && defaultSymbol === componentName) {\n return `.default`;\n }\n\n return `.${componentName}`;\n}\n\nfunction subpathExposesLazyBinding(typesIndexPath: string, componentName: string): boolean {\n const indexText = readTypesFileText(typesIndexPath);\n if (\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\bdefault\\\\s+as\\\\s+${componentName}\\\\b[^}]*\\\\}`).test(\n indexText,\n )\n ) {\n return true;\n }\n if (new RegExp(`export\\\\s*\\\\{[^}]*\\\\b${componentName}\\\\b[^}]*\\\\}`).test(indexText)) {\n return true;\n }\n if (/export\\s+default\\b/.test(indexText)) return true;\n return pickComponentName(\n { name: componentName, dirName: componentName } as RegistryItem,\n parseTypeExportsLocal(typesIndexPath),\n ) !== null;\n}\n\nfunction resolveLazyImport(\n pkgInfo: ComponentsPackageInfo,\n importSpecifier: string,\n typesFilePath: string,\n componentName: string,\n): Pick<ComponentExportResolution, \"lazyImportSpecifier\" | \"lazyAccess\"> {\n let lazyImportSpecifier = importSpecifier;\n let lazyAccess = resolveLazyAccess(typesFilePath, componentName);\n\n if (\n importSpecifier !== \"@inventive-ui/components\" &&\n !subpathExposesLazyBinding(typesFilePath, componentName) &&\n pkgInfo.rootTypesPath\n ) {\n lazyImportSpecifier = \"@inventive-ui/components\";\n lazyAccess = `.${componentName}`;\n }\n\n return { lazyImportSpecifier, lazyAccess };\n}\n\nfunction describeExpected(item: RegistryItem): string {\n return `${toPascalCase(item.dirName)} / ${toPascalCase(item.name)}`;\n}\n\nfunction resolveFromTypesFile(\n item: RegistryItem,\n importSpecifier: string,\n typesFilePath: string,\n pkgInfo: ComponentsPackageInfo,\n): ComponentExportResolution {\n const parsed = parseTypeExports(typesFilePath);\n const indexParsed = parseTypeExportsLocal(typesFilePath);\n const componentName =\n pickComponentName(item, parsed) ?? pickDefaultExportComponent(item, typesFilePath);\n if (!componentName) {\n return {\n ok: false,\n reason: `No matching component export in ${importSpecifier}. Expected ${describeExpected(item)}.`,\n };\n }\n\n const propsName =\n pickPropsName(componentName, indexParsed) ??\n pickPropsName(componentName, parsed) ??\n (() => {\n const typesPath = path.join(path.dirname(typesFilePath), \"types.d.ts\");\n if (!fs.existsSync(typesPath)) return null;\n return pickPropsName(componentName, parseTypeExports(typesPath));\n })();\n\n const lazyImport = resolveLazyImport(\n pkgInfo,\n importSpecifier,\n typesFilePath,\n componentName,\n );\n\n return {\n ok: true,\n importSpecifier,\n lazyImportSpecifier: lazyImport.lazyImportSpecifier,\n componentName,\n propsName: propsName ?? undefined,\n lazyAccess: lazyImport.lazyAccess,\n };\n}\n\nfunction exportCandidatesForItem(item: RegistryItem): string[] {\n const candidates = [\n `./${item.name}`,\n `./${item.name.toLowerCase()}`,\n `./${item.dirName}`,\n `./${item.dirName.toLowerCase()}`,\n ];\n\n return [...new Set(candidates)];\n}\n\nfunction componentFolderCandidates(item: RegistryItem): string[] {\n return [\n ...new Set([\n item.dirName,\n item.name,\n toPascalCase(item.dirName),\n toPascalCase(item.name),\n ]),\n ];\n}\n\nfunction resolveWildcardTypesPath(\n pkgInfo: ComponentsPackageInfo,\n segment: string,\n): string | null {\n const wildcardEntry = pkgInfo.exportsField[\"./*\"];\n if (!wildcardEntry) return null;\n\n const typesRel = resolveTypesPathFromExportEntry(wildcardEntry);\n if (!typesRel || !typesRel.includes(\"*\")) return null;\n\n const resolvedRel = typesRel.replace(/\\*/g, segment);\n const fullPath = path.join(pkgInfo.packageRoot, resolvedRel);\n return fs.existsSync(fullPath) ? fullPath : null;\n}\n\nfunction resolveTypesPathForExportCandidate(\n pkgInfo: ComponentsPackageInfo,\n candidate: string,\n): string | null {\n const entry = pkgInfo.exportsField[candidate];\n if (entry) {\n const typesRel = resolveTypesPathFromExportEntry(entry);\n return typesRel ? path.join(pkgInfo.packageRoot, typesRel) : null;\n }\n\n const segment = candidate.replace(/^\\.\\//, \"\");\n return resolveWildcardTypesPath(pkgInfo, segment);\n}\n\nfunction resolveFromComponentFolders(\n item: RegistryItem,\n pkgInfo: ComponentsPackageInfo,\n): ComponentExportResolution | null {\n for (const folder of componentFolderCandidates(item)) {\n const typesPath =\n resolveWildcardTypesPath(pkgInfo, folder) ??\n (() => {\n const directPath = path.join(\n pkgInfo.packageRoot,\n \"dist\",\n \"components\",\n folder,\n \"index.d.ts\",\n );\n return fs.existsSync(directPath) ? directPath : null;\n })();\n\n if (!typesPath) continue;\n\n const importSpecifier = `@inventive-ui/components/${folder}`;\n try {\n assertImportSpecifier(importSpecifier);\n } catch {\n continue;\n }\n\n const resolved = resolveFromTypesFile(item, importSpecifier, typesPath, pkgInfo);\n if (resolved.ok) return resolved;\n }\n\n return null;\n}\n\nfunction componentBuildExists(item: RegistryItem, pkgInfo: ComponentsPackageInfo): boolean {\n return componentFolderCandidates(item).some((folder) =>\n fs.existsSync(path.join(pkgInfo.packageRoot, \"dist\", \"components\", folder)),\n );\n}\n\nfunction buildMissingComponentReason(item: RegistryItem): string {\n return (\n `Component \"${item.name}\" is listed in iui-manifest.json but is missing from the published ` +\n `@inventive-ui/components build (expected dist/components/${item.dirName}). ` +\n `Run a full components build, export ${describeExpected(item)} from dist/index.d.ts, and republish.`\n );\n}\n\nexport function resolveComponentExport(\n item: RegistryItem,\n cwd: string = process.cwd(),\n): ComponentExportResolution {\n const pkgInfo = readComponentsPackageInfo(cwd);\n if (!pkgInfo) {\n return {\n ok: false,\n reason: \"@inventive-ui/components is not installed in node_modules.\",\n };\n }\n\n const fromFolders = resolveFromComponentFolders(item, pkgInfo);\n if (fromFolders?.ok) return fromFolders;\n\n for (const candidate of exportCandidatesForItem(item)) {\n const typesPath = resolveTypesPathForExportCandidate(pkgInfo, candidate);\n if (!typesPath) continue;\n\n const importSpecifier = `@inventive-ui/components/${candidate.replace(/^\\.\\//, \"\")}`;\n try {\n assertImportSpecifier(importSpecifier);\n } catch {\n continue;\n }\n const resolved = resolveFromTypesFile(item, importSpecifier, typesPath, pkgInfo);\n if (resolved.ok) return resolved;\n }\n\n if (pkgInfo.rootTypesPath) {\n const fromRoot = resolveFromTypesFile(item, \"@inventive-ui/components\", pkgInfo.rootTypesPath, pkgInfo);\n if (fromRoot.ok) return fromRoot;\n }\n\n if (!componentBuildExists(item, pkgInfo)) {\n return {\n ok: false,\n reason: buildMissingComponentReason(item),\n };\n }\n\n return {\n ok: false,\n reason:\n `No matching component export for \"${item.name}\" in @inventive-ui/components. ` +\n `Expected a value export named ${describeExpected(item)}.`,\n };\n}\n","// ─── Three-config tier bleed detection ───────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport {\n ASSETS_CONFIG_FILE,\n COMPONENT_CONFIG_FILE,\n PROJECT_CONFIG_FILE,\n} from \"../constants.js\";\nimport { AssetsConfigSchema, formatZodIssues } from \"./configSchemas.js\";\n\nexport interface TierCheckResult {\n ok: boolean;\n summary: string;\n details?: string;\n}\n\nconst COMPONENT_NAME_RE =\n /\\b(Button|Badge|Tag|Menu|Modal|Avatar|Checkbox|Text|Footer|Listbox|Tree|Switch|Popover|Toast|Alert)\\s*:/;\n\nconst ASSET_BLEED_IN_IUI = [\n { pattern: /import\\s+.*assets\\.config\\.json/, message: \"imports assets.config.json\" },\n { pattern: /\\bassets\\s*:\\s*assetsConfig/, message: \"nests assets via assetsConfig\" },\n { pattern: /\\bassets\\s*:\\s*\\{/, message: \"contains inline assets block\" },\n { pattern: /\\bglobalIcons\\s*:/, message: \"contains globalIcons (belongs in assets.config.json)\" },\n { pattern: /\\bicon\\s*:\\s*\\{[^}]*library\\s*:/, message: \"contains icon.library (belongs in assets.config.json)\" },\n {\n pattern: /loading\\s*:\\s*\\{[^}]*loader\\s*:\\s*\\{/,\n message: \"contains states.loading.loader object (use assets.loader tier)\",\n },\n { pattern: COMPONENT_NAME_RE, message: \"contains component config keys (belongs in component.config.ts)\" },\n];\n\nconst ASSET_BLEED_IN_COMPONENT = [\n { pattern: /\\bglobalIcons\\s*:/, message: \"contains globalIcons\" },\n { pattern: /\\blibrary\\s*:\\s*[\"']/, message: \"contains library assignment\" },\n { pattern: /\\bglobalLogos\\s*:/, message: \"contains globalLogos\" },\n { pattern: /\\bglobalEmojis\\s*:/, message: \"contains globalEmojis\" },\n];\n\nexport function stripAssetsFromIuiConfig(content: string): string {\n let next = content;\n next = next.replace(/^import\\s+assetsConfig\\s+from\\s+[\"']\\.\\/assets\\.config\\.json[\"'];\\s*\\n?/m, \"\");\n next = next.replace(\n /^import\\s+type\\s+\\{([^}]+)\\}\\s+from\\s+\"@inventive-ui\\/framework\\/config\";\\s*\\n?/m,\n (_m, types: string) => {\n const cleaned = types\n .split(\",\")\n .map((t: string) => t.trim())\n .filter((t: string) => t !== \"IUIAssetsConfig\" && t.length > 0)\n .join(\", \");\n if (!cleaned) {\n return 'import type { IUIThemeConfig } from \"@inventive-ui/framework/config\";\\n';\n }\n const hasTheme = cleaned.includes(\"IUIThemeConfig\");\n const typeList = hasTheme ? cleaned : `IUIThemeConfig, ${cleaned}`;\n return `import type { ${typeList} } from \"@inventive-ui/framework/config\";\\n`;\n },\n );\n next = next.replace(/\\n\\s*assets:\\s*assetsConfig\\s+as\\s+IUIAssetsConfig,?\\s*\\n/, \"\\n\");\n next = next.replace(/\\bIUIConfig\\b/g, \"IUIThemeConfig\");\n return next;\n}\n\nexport function checkIuiConfigTierBleed(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): TierCheckResult {\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return {\n ok: false,\n summary: \"iui.config.ts not found\",\n details: \"Run iui init to scaffold project config.\",\n };\n }\n\n let content = fs.readFileSync(configPath, \"utf-8\");\n const issues: string[] = [];\n\n if (!/\\bbuild\\s*:\\s*\\{/.test(content)) {\n issues.push(\"missing compile-first build block\");\n }\n\n for (const { pattern, message } of ASSET_BLEED_IN_IUI) {\n if (pattern.test(content)) {\n issues.push(message);\n }\n }\n\n if (issues.length === 0) {\n return { ok: true, summary: \"iui.config.ts tier boundaries are valid\" };\n }\n\n if (options.autoFix) {\n const fixed = stripAssetsFromIuiConfig(content);\n if (fixed !== content) {\n fs.writeFileSync(configPath, fixed, \"utf-8\");\n content = fixed;\n const remaining = ASSET_BLEED_IN_IUI.filter(({ pattern }) => pattern.test(content)).map(\n (x) => x.message,\n );\n if (remaining.length === 0 && /\\bbuild\\s*:\\s*\\{/.test(content)) {\n return {\n ok: true,\n summary: \"iui.config.ts repaired (removed assets tier bleed)\",\n };\n }\n }\n }\n\n return {\n ok: false,\n summary: \"iui.config.ts violates three-config tier boundaries\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n}\n\nexport function checkAssetsConfigValidity(\n cwd: string = process.cwd(),\n): TierCheckResult {\n const assetsPath = path.join(cwd, ASSETS_CONFIG_FILE);\n if (!fs.existsSync(assetsPath)) {\n return {\n ok: false,\n summary: \"assets.config.json not found\",\n details: \"Run iui init or install asset packages.\",\n };\n }\n\n let raw: unknown;\n try {\n raw = fs.readJsonSync(assetsPath);\n } catch {\n return { ok: false, summary: \"assets.config.json is not valid JSON\" };\n }\n\n const parsed = AssetsConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return {\n ok: false,\n summary: \"assets.config.json failed schema validation\",\n details: formatZodIssues(parsed.error),\n };\n }\n\n const assets = parsed.data;\n const icon = assets.icon as { globalIcons?: Record<string, string> } | undefined;\n if (assets.icon && (!icon?.globalIcons || Object.keys(icon.globalIcons).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing icon.globalIcons\",\n details: \"Run iui init or merge CLI defaults so @alias icons resolve.\",\n };\n }\n\n const logo = assets.logo as { globalLogos?: Record<string, string> } | undefined;\n if (assets.logo && (!logo?.globalLogos || Object.keys(logo.globalLogos).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing logo.globalLogos\",\n details: \"Run iui init or merge CLI defaults so @alias logos resolve.\",\n };\n }\n\n const emoji = assets.emoji as { globalEmojis?: Record<string, string> } | undefined;\n if (assets.emoji && (!emoji?.globalEmojis || Object.keys(emoji.globalEmojis).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing emoji.globalEmojis\",\n details: \"Run iui init or merge CLI defaults so @alias emojis resolve.\",\n };\n }\n\n const colorLogo = assets.colorLogo as\n | { globalColorLogos?: Record<string, string> }\n | undefined;\n if (\n assets.colorLogo &&\n (!colorLogo?.globalColorLogos ||\n Object.keys(colorLogo.globalColorLogos).length === 0)\n ) {\n return {\n ok: false,\n summary: \"assets.config.json is missing colorLogo.globalColorLogos\",\n details: \"Run iui init or merge CLI defaults so @alias color logos resolve.\",\n };\n }\n\n return { ok: true, summary: \"assets.config.json is valid\" };\n}\n\nexport function checkComponentConfigTierBleed(\n cwd: string = process.cwd(),\n): TierCheckResult {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return { ok: true, summary: \"component.config.ts tier check skipped (missing)\" };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const issues: string[] = [];\n for (const { pattern, message } of ASSET_BLEED_IN_COMPONENT) {\n if (pattern.test(content)) {\n issues.push(message);\n }\n }\n\n if (issues.length === 0) {\n return { ok: true, summary: \"component.config.ts has no asset tier bleed\" };\n }\n\n return {\n ok: false,\n summary: \"component.config.ts contains asset keys (use assets.config.json)\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n}\n","// ─── Project config validation (Zod) ─────────────────────────────────────────\n\nimport { z } from \"zod\";\n\n/** Permissive theme/states/build — doctor enforces tier bleed separately. */\nconst iuiThemeConfigSchema = z\n .object({\n theme: z.record(z.unknown()).optional(),\n states: z.record(z.unknown()).optional(),\n core: z.record(z.unknown()).optional(),\n build: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const IuiThemeConfigSchema = iuiThemeConfigSchema.refine(\n (data) => !(\"assets\" in data),\n { message: \"iui.config must not contain an assets key — use assets.config.json\" },\n);\n\nexport const AssetsConfigSchema = z\n .object({\n binding: z.enum([\"lazy\", \"scanned\"]).optional(),\n preload: z.enum([\"none\", \"configured\", \"scanned\"]).optional(),\n icon: z\n .object({\n library: z.string().optional(),\n globalIcons: z.record(z.string()).optional(),\n preload: z.enum([\"none\", \"configured\", \"scanned\"]).optional(),\n })\n .passthrough()\n .optional(),\n })\n .passthrough()\n .refine((data) => !(\"theme\" in data) && !(\"build\" in data), {\n message: \"assets.config.json must not contain theme or build keys\",\n });\n\nexport const ComponentConfigEntrySchema = z\n .object({\n default: z.record(z.unknown()).optional(),\n presets: z.record(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nexport const ComponentConfigSchema = z.record(ComponentConfigEntrySchema);\n\nexport const ProjectMetaSchema = z\n .object({\n projectId: z.string().min(1),\n repoUrl: z.string().min(1),\n createdAt: z.string().min(1),\n initScope: z.enum([\"package\", \"workspace\"]).optional(),\n configs: z\n .object({\n theme: z.string().min(1),\n assets: z.string().min(1),\n components: z.string().min(1),\n })\n .strict()\n .optional(),\n })\n .strict()\n .refine((data) => !(\"theme\" in data) && !(\"assets\" in data), {\n message: \"project.json must not contain config values — use configs paths only\",\n });\n\nexport function formatZodIssues(error: z.ZodError): string {\n return error.issues\n .slice(0, 8)\n .map((i) => `${i.path.join(\".\") || \"(root)\"}: ${i.message}`)\n .join(\"\\n\");\n}\n","// Canonical `.iui/` layout — metadata, generated source, and disposable cache.\n\nimport path from \"node:path\";\nimport { IUI_DIR } from \"../constants.js\";\nimport { resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\nexport const IUI_GENERATED_SEGMENT = \"generated\";\nexport const IUI_CACHE_SEGMENT = \"cache\";\n\nexport const IUI_CACHE_FILES = {\n scan: \"scan.cache.json\",\n styles: \"styles.css\",\n manifest: \"manifest.js\",\n stylesInject: \"styles.inject.js\",\n stylesInline: \"styles.inline.js\",\n slotState: \"slot-state.json\",\n slotLock: \"slot.lock\",\n utilities: \"utilities.css\",\n manifestJson: \"manifest.json\",\n slotWarmup: \"slot-warmup.mjs\",\n} as const;\n\n/** Compile-first CSS cache artifacts per active bundler integration. */\nexport const CSS_CACHE_ARTIFACTS_BY_INTEGRATION = {\n vite: [\"styles\", \"manifest\"],\n webpack: [\"styles\", \"manifest\", \"stylesInject\"],\n next: [\"styles\", \"manifest\", \"stylesInline\"],\n} as const;\n\nexport type IuiBuildIntegration = keyof typeof CSS_CACHE_ARTIFACTS_BY_INTEGRATION;\n\nexport function iuiProjectRoot(cwd: string = process.cwd()): string {\n return resolveIuiProjectRoot(cwd);\n}\n\nexport function iuiRoot(cwd: string = process.cwd()): string {\n return path.join(iuiProjectRoot(cwd), IUI_DIR);\n}\n\nexport function iuiGeneratedDir(cwd: string = process.cwd()): string {\n return path.join(iuiRoot(cwd), IUI_GENERATED_SEGMENT);\n}\n\nexport function iuiCacheDir(cwd: string = process.cwd()): string {\n return path.join(iuiRoot(cwd), IUI_CACHE_SEGMENT);\n}\n\nexport function iuiCacheFile(\n cwd: string,\n name: keyof typeof IUI_CACHE_FILES,\n): string {\n return path.join(iuiCacheDir(cwd), IUI_CACHE_FILES[name]);\n}\n\n/** Gitignore entries for disposable IUI state (single directory). */\nexport const IUI_CACHE_GITIGNORE_LINES = [\n \"\",\n \"# IUI disposable cache (.iui/generated/ stays committed)\",\n `${IUI_DIR}/${IUI_CACHE_SEGMENT}/`,\n `${IUI_DIR}/slot-registration-state.json`,\n `${IUI_DIR}/slot-registration.lock`,\n `${IUI_DIR}/classes.cache.json`,\n `${IUI_DIR}/utilities.css`,\n `${IUI_DIR}/build-styles.generated.css`,\n `${IUI_DIR}/build-styles.generated.js`,\n `${IUI_DIR}/build-manifest.generated.js`,\n `${IUI_DIR}/build-css-inline.js`,\n `${IUI_DIR}/build-manifest.json`,\n `${IUI_DIR}/slot-warmup.generated.mjs`,\n \".iui-bootstrap-client.js\",\n \".iui-bootstrap-server.js\",\n \".iui-bootstrap.js\",\n \"public/iui/\",\n];\n","// ─── Interactive Prompts ─────────────────────────────────────────────────────\n//\n// Gemini-style framed input experience.\n// Every prompt gets a clear visual header, then a clean branded input line.\n\nimport inquirer from \"inquirer\";\nimport chalk from \"chalk\";\nimport {\n ASSET_PACKAGES,\n ASSET_CATEGORY_LABELS,\n ICON_LIBRARY_LABELS,\n ILLUSTRATION_STYLE_LABELS,\n STORYSET_ILLUSTRATION_STYLES,\n EMOJI_FAMILIES,\n EMOJI_FAMILY_LABELS,\n type AssetCategory,\n type StorysetIllustrationStyle,\n type EmojiFamily,\n} from \"../constants.js\";\nimport * as ui from \"./ui.js\";\nimport { assertInteractivePrompt } from \"./security/terminal.js\";\n\n// ── Prompt building blocks ────────────────────────────────────────────────────\n\n/** Brand-colored ◆ prefix used on every prompt line. */\nconst PROMPT_PREFIX = ` ${ui.brand.bold(\"◆\")}`;\n\n/**\n * Prints a visual header above a prompt — title in white bold,\n * optional hint in dim. Creates a clear \"input zone\" feel.\n */\nexport function promptHeader(title: string, hint?: string): void {\n console.log();\n console.log(` ${ui.brand.bold(\"◆\")} ${chalk.white.bold(title)}`);\n if (hint) console.log(` ${ui.dim(hint)}`);\n console.log();\n}\n\n// ── Asset selection ────────────────────────────────────────────────────────────\n\nexport async function promptAssetSelection(\n installedPackages: string[] = [],\n): Promise<string[]> {\n assertInteractivePrompt(\"asset package selection\");\n\n promptHeader(\n \"Select Asset Packages\",\n \"Type to filter by name, ID, or category. Space to select, Enter to confirm.\",\n );\n\n const { filter } = await inquirer.prompt<{ filter: string }>([\n {\n type: \"input\",\n name: \"filter\",\n message: chalk.dim(\"Filter (leave empty for all)\"),\n prefix: PROMPT_PREFIX,\n default: \"\",\n },\n ]);\n\n const term = filter.trim().toLowerCase();\n const filtered = term\n ? ASSET_PACKAGES.filter((pkg) => {\n const haystack = `${pkg.displayName} ${pkg.id} ${pkg.category} ${pkg.slotType}`.toLowerCase();\n return haystack.includes(term);\n })\n : ASSET_PACKAGES;\n\n const catalogue = filtered.length > 0 ? filtered : ASSET_PACKAGES;\n if (term && filtered.length === 0) {\n ui.warn(`No packages matched \"${filter}\". Showing full catalogue.`);\n console.log();\n }\n\n const categories = [...new Set(catalogue.map((p) => p.category))] as AssetCategory[];\n\n const choices: Array<\n { name: string; value: string; disabled?: string } | typeof inquirer.Separator.prototype\n > = [];\n\n for (const cat of categories) {\n const inCategory = catalogue.filter((p) => p.category === cat);\n choices.push(\n new inquirer.Separator(\n `\\n ${ui.brand.bold(ASSET_CATEGORY_LABELS[cat])} ${ui.dim(`(${inCategory.length})`)}`,\n ) as typeof inquirer.Separator.prototype,\n );\n for (const pkg of inCategory) {\n choices.push({\n name: `${pkg.displayName.padEnd(26)} ${ui.dim(`[${pkg.id}]`)} ${ui.accent(pkg.slotType)}`,\n value: pkg.id,\n disabled: installedPackages.includes(pkg.id) ? ui.dim(\"installed\") : undefined,\n });\n }\n }\n\n console.log();\n\n const { selected } = await inquirer.prompt<{ selected: string[] }>([\n {\n type: \"checkbox\",\n name: \"selected\",\n message: chalk.dim(\"Toggle packages to install\"),\n prefix: PROMPT_PREFIX,\n choices: choices as any,\n pageSize: 20,\n loop: false,\n },\n ]);\n\n return selected;\n}\n\n// ── Icon library ─────────────────────────────────────────────────────────────\n\nfunction iconLibraryDisplayName(lib: string): string {\n return ICON_LIBRARY_LABELS[lib] ?? lib;\n}\n\nexport async function promptChooseDefaultIconLibrary(\n installedLibraries: string[],\n fallbackCurrent: string | null,\n justInstalledLibrary: string,\n): Promise<string> {\n const libs = [...new Set(installedLibraries)].filter(Boolean);\n if (libs.length === 0) return justInstalledLibrary;\n if (libs.length === 1) return libs[0];\n\n const autoChoice = process.env.IUI_ICON_DEFAULT_CHOICE;\n if (autoChoice === \"keep\") {\n if (fallbackCurrent && libs.includes(fallbackCurrent)) return fallbackCurrent;\n return libs[0];\n }\n if (autoChoice === \"switch\") {\n if (libs.includes(justInstalledLibrary)) return justInstalledLibrary;\n return libs[libs.length - 1];\n }\n\n const defaultSelection =\n (fallbackCurrent && libs.includes(fallbackCurrent) ? fallbackCurrent : null) ??\n (libs.includes(justInstalledLibrary) ? justInstalledLibrary : null) ??\n libs[0];\n\n assertInteractivePrompt(\"icon library choice\");\n\n promptHeader(\n \"Default Icon Library\",\n \"Multiple icon packages are installed. Choose which is the active default.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: string }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: chalk.dim(\"Select default icon set\"),\n prefix: PROMPT_PREFIX,\n choices: libs.map((lib) => ({\n name:\n lib === justInstalledLibrary\n ? `${iconLibraryDisplayName(lib)} ${ui.dim(\"(just installed)\")}`\n : iconLibraryDisplayName(lib),\n value: lib,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Illustration style ─────────────────────────────────────────────────────\n\n/**\n * When Storyset illustrations are installed, pick the default `illustration.style`\n * in assets.config.json (Amico, Bro, Cuate, Pana, Rafiki).\n */\nexport async function promptChooseIllustrationStyle(\n fallbackCurrent: string | null,\n): Promise<StorysetIllustrationStyle> {\n const styles = [...STORYSET_ILLUSTRATION_STYLES];\n\n const autoChoice = process.env.IUI_ILLUSTRATION_STYLE_CHOICE;\n if (autoChoice) {\n const match = styles.find((s) => s.toLowerCase() === autoChoice.trim().toLowerCase());\n if (match) return match;\n }\n\n const defaultSelection =\n (fallbackCurrent &&\n styles.includes(fallbackCurrent as StorysetIllustrationStyle)\n ? (fallbackCurrent as StorysetIllustrationStyle)\n : null) ?? \"Amico\";\n\n assertInteractivePrompt(\"illustration style choice\");\n ui.inputBox(\n \"Illustration Style\",\n \"Storyset includes five visual styles. Pick the default for illustration slots.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: StorysetIllustrationStyle }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: \"Which Storyset style should be the default?\",\n prefix: PROMPT_PREFIX,\n choices: styles.map((style) => ({\n name: ILLUSTRATION_STYLE_LABELS[style],\n value: style,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Emoji family ───────────────────────────────────────────────────────────\n\n/**\n * When the emoji package is installed, pick the default `emoji.family`\n * in assets.config.json (apple, google, facebook, twitter, native).\n * Skin tone is set separately to `medium-light` by the installer.\n */\nexport async function promptChooseEmojiFamily(\n fallbackCurrent: string | null,\n): Promise<EmojiFamily> {\n const families = [...EMOJI_FAMILIES];\n\n const autoChoice = process.env.IUI_EMOJI_FAMILY_CHOICE;\n if (autoChoice) {\n const match = families.find((f) => f.toLowerCase() === autoChoice.trim().toLowerCase());\n if (match) return match;\n }\n\n const defaultSelection =\n (fallbackCurrent && families.includes(fallbackCurrent as EmojiFamily)\n ? (fallbackCurrent as EmojiFamily)\n : null) ?? \"apple\";\n\n assertInteractivePrompt(\"emoji family choice\");\n ui.inputBox(\n \"Emoji Family\",\n \"Choose the default CDN style for emoji slots. Skin tone defaults to medium-light.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: EmojiFamily }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: \"Which emoji family should be the default?\",\n prefix: PROMPT_PREFIX,\n choices: families.map((family) => ({\n name: EMOJI_FAMILY_LABELS[family],\n value: family,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Confirm ───────────────────────────────────────────────────────────────────\n\nexport async function confirm(message: string, defaultValue = true): Promise<boolean> {\n assertInteractivePrompt(\"confirmation\");\n const { ok } = await inquirer.prompt<{ ok: boolean }>([\n {\n type: \"confirm\",\n name: \"ok\",\n message: chalk.white(message),\n prefix: PROMPT_PREFIX,\n default: defaultValue,\n },\n ]);\n return ok;\n}\n\n// ── Update selection ──────────────────────────────────────────────────────────\n\nexport async function promptUpdateSelection(\n updates: Array<{\n name: string;\n displayName: string;\n current: string;\n latest: string;\n eligible: boolean;\n }>,\n message = \"Select packages to update\",\n): Promise<string[]> {\n assertInteractivePrompt(\"update selection\");\n const eligible = updates.filter((u) => u.eligible);\n if (eligible.length === 0) return [];\n\n console.log();\n\n const { selected } = await inquirer.prompt<{ selected: string[] }>([\n {\n type: \"checkbox\",\n name: \"selected\",\n message: chalk.dim(message),\n prefix: PROMPT_PREFIX,\n choices: eligible.map((u) => ({\n name: `${u.displayName.padEnd(22)} ${ui.dim(u.current)} ${ui.dim(\"→\")} ${ui.success(u.latest)}`,\n value: u.name,\n checked: true,\n })),\n },\n ]);\n\n return selected;\n}\n\n// ── Framework choice ──────────────────────────────────────────────────────────\n\nexport async function promptFrameworkChoice(): Promise<\"react\" | \"vite\"> {\n assertInteractivePrompt(\"framework choice\");\n\n promptHeader(\n \"Framework Preset\",\n \"React 19 = library only (Next.js, Webpack, or custom Vite). Vite preset = React + dev server + vite.config.ts.\",\n );\n\n const { framework } = await inquirer.prompt<{ framework: \"react\" | \"vite\" }>([\n {\n type: \"list\",\n name: \"framework\",\n message: chalk.dim(\"Choose a setup\"),\n prefix: PROMPT_PREFIX,\n choices: [\n {\n name: `React 19 only ${ui.dim(\"no vite.config.ts — bring your own bundler\")}`,\n value: \"react\",\n },\n {\n name: `Vite 6+ + React ${ui.dim(\"includes vite.config.ts and npm run dev\")}`,\n value: \"vite\",\n },\n ],\n },\n ]);\n return framework;\n}\n\n// ── Text input ────────────────────────────────────────────────────────────────\n\n/**\n * Generic styled text input with a header.\n * Used in command files to avoid re-implementing the framing pattern.\n */\nexport async function promptText(\n title: string,\n hint: string | undefined,\n placeholder: string,\n validate?: (value: string) => true | string,\n): Promise<string> {\n assertInteractivePrompt(title);\n promptHeader(title, hint);\n const { value } = await inquirer.prompt<{ value: string }>([\n {\n type: \"input\",\n name: \"value\",\n message: chalk.dim(placeholder),\n prefix: PROMPT_PREFIX,\n validate,\n },\n ]);\n return value.trim();\n}\n","// ─── iui init ────────────────────────────────────────────────────────────────\n//\n// Full project initialisation:\n// auth → license → register project → configure npm → install framework → generate configs\n//\n// Default: init in the current package only (e.g. apps/docs).\n// Optional --workspace: shared setup at the monorepo root.\n\nimport path from \"node:path\";\nimport ora from \"ora\";\nimport { formatSeatUsage, formatPlanLabel } from \"../services/license.js\";\nimport { registerProject } from \"../services/project.js\";\nimport { fetchComponentRegistry } from \"../services/registry.js\";\nimport { installFramework, ensureFrameworkDeps } from \"../services/framework.js\";\nimport { installComponentsPackage } from \"../services/installer.js\";\nimport {\n bootstrapRegisteredPackages,\n bootstrapWorkspacePackage,\n registerAllWorkspacePackages,\n registerWorkspacePackage,\n} from \"../services/workspace-bootstrap.js\";\nimport {\n ensureProjectConfig,\n ensureComponentConfig,\n ensureInventiveUiViteConfig,\n writeProjectMeta,\n writeAssetsConfig,\n writeTsConfig,\n removeStaleIuiViteConfig,\n isInsideProject,\n detectRepoUrl,\n hasPackageJson,\n ensureProjectNpmrc,\n ensureGitignoreHasNpmrc,\n ensureGitignoreHasIuiBuildCache,\n writeGlobalNpmrcAuth,\n detectPackageManager,\n syncInstallCommand,\n installCmd,\n prepareWorkspaceForDependencyInstall,\n} from \"../utils/filesystem.js\";\nimport { FRAMEWORK_PACKAGE, COMPONENTS_PACKAGE } from \"../constants.js\";\nimport {\n findIuiProjectRoot,\n resolveInitRoot,\n isWorkspaceChildPackage,\n isMonorepoInstallContext,\n} from \"../utils/workspace.js\";\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\ntype InitOptions = {\n source?: string;\n framework?: \"react\" | \"vite\";\n yes?: boolean;\n workspace?: boolean;\n};\n\nexport async function initCommand(opts?: InitOptions): Promise<void> {\n const invocationCwd = process.cwd();\n const sharedWorkspace = opts?.workspace === true;\n\n try {\n ui.heading(\"Initialize Project\");\n\n const existingIuiRoot = findIuiProjectRoot(invocationCwd);\n if (\n existingIuiRoot &&\n path.resolve(existingIuiRoot) !== path.resolve(invocationCwd)\n ) {\n await bootstrapWorkspacePackage(invocationCwd, existingIuiRoot);\n return;\n }\n\n const { initRoot, redirectedFrom } = resolveInitRoot(invocationCwd, {\n workspace: sharedWorkspace,\n });\n\n if (!hasPackageJson(initRoot)) {\n throw new CLIError(\n redirectedFrom\n ? \"Monorepo workspace root has no package.json.\"\n : \"No package.json found in the current directory.\",\n redirectedFrom\n ? \"Add a package.json at the workspace root, or run iui init without --workspace.\"\n : \"npm init\",\n );\n }\n\n if (isInsideProject(initRoot)) {\n ui.warn(\"This project is already initialized.\");\n ui.hint(\"Run iui doctor to check project health.\");\n return;\n }\n\n const originalCwd = process.cwd();\n if (path.resolve(initRoot) !== path.resolve(originalCwd)) {\n process.chdir(initRoot);\n ui.hint(\n `Monorepo --workspace: initializing at ${path.relative(invocationCwd, initRoot) || initRoot}`,\n );\n } else if (!sharedWorkspace && findIuiProjectRoot(initRoot) === null) {\n ui.hint(\"Initializing this package only — other monorepo apps are untouched.\");\n if (isWorkspaceChildPackage(invocationCwd)) {\n ui.hint(\"After clone, teammates run iui setup from the monorepo root (or from this app).\");\n }\n }\n\n try {\n // ── Monorepo: sync lockfile before any package.json changes ────────\n let workspacePrepared = false;\n if (isMonorepoInstallContext(initRoot)) {\n ui.step(\"Preparing workspace for install…\");\n const pm = detectPackageManager(initRoot);\n const syncSpinner = ora({\n text: `Running ${syncInstallCommand(pm)} at workspace root…`,\n prefixText: ` ${ui.dim(\"│\")}`,\n }).start();\n try {\n prepareWorkspaceForDependencyInstall(initRoot);\n workspacePrepared = true;\n syncSpinner.succeed(\"Workspace lockfile synced\");\n } catch (err) {\n syncSpinner.fail(\"Workspace sync failed\");\n throw new CLIError(\n \"Could not sync the monorepo lockfile before installing packages.\",\n formatExecSyncError(err) ?? syncInstallCommand(pm),\n );\n }\n }\n\n // ── Pre-check: React 19.x or Vite 6.x+ ────────────────────────────\n ui.step(\"Checking framework dependencies…\");\n const framework = await ensureFrameworkDeps(initRoot, {\n preferredFramework: opts?.framework,\n autoApprove: opts?.yes === true,\n alwaysPrompt: !opts?.framework && opts?.yes !== true,\n });\n\n // ── Step 1: Auth ───────────────────────────────────────────────────\n ui.step(\"Verifying authentication…\");\n const auth = await ensureAuthSession();\n const license = await ensureLicenseSession();\n ui.ok(`Authenticated as ${ui.accent(auth.github_id ?? \"\")}`);\n\n // ── Step 2: License ────────────────────────────────────────────────\n ui.step(\"Validating license…\");\n const spinner1 = ora({ text: \"Contacting license server…\", prefixText: ` ${ui.dim(\"│\")}` }).start();\n spinner1.succeed(\"License valid\");\n ui.kv(\"Plan\", formatPlanLabel(license.plan));\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats (users)\", seatUsage);\n }\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n\n // ── Step 3: Register project ───────────────────────────────────────\n ui.newline();\n ui.step(\"Registering project…\");\n const repoUrl = detectRepoUrl(initRoot);\n const spinner2 = ora({ text: \"Registering with Inventive UI…\", prefixText: ` ${ui.dim(\"│\")}` }).start();\n const project = await registerProject(auth.token, repoUrl);\n spinner2.succeed(\"Project registered\");\n ui.kv(\"Project ID\", project.project_id);\n\n // ── Step 4: Persist metadata ───────────────────────────────────────\n const meta = {\n projectId: project.project_id,\n repoUrl,\n createdAt: new Date().toISOString(),\n initScope: sharedWorkspace ? (\"workspace\" as const) : (\"package\" as const),\n configs: {\n theme: \"./iui.config.ts\",\n assets: \"./assets.config.json\",\n components: \"./component.config.ts\",\n },\n };\n writeProjectMeta(meta, initRoot);\n\n // ── Step 5: Configure npm registry ─────────────────────────────────\n ui.step(\"Configuring npm registry…\");\n ensureProjectNpmrc(initRoot);\n ensureGitignoreHasNpmrc(initRoot);\n ensureGitignoreHasIuiBuildCache(initRoot);\n writeGlobalNpmrcAuth(auth.token);\n ui.ok(\"npm configured for @inventive-ui packages\");\n\n // Re-sync after npmrc/auth changes — npm workspace adds need a fresh lockfile.\n if (isMonorepoInstallContext(initRoot)) {\n prepareWorkspaceForDependencyInstall(initRoot);\n workspacePrepared = true;\n }\n\n const installOpts = {\n skipWorkspacePrepare: workspacePrepared,\n };\n\n // ── Step 6: Install framework ──────────────────────────────────────\n ui.newline();\n ui.step(\"Installing Inventive UI Framework…\");\n let frameworkOk = true;\n try {\n await installFramework({\n token: auth.token,\n projectId: project.project_id,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: initRoot,\n ...installOpts,\n });\n } catch (err) {\n frameworkOk = false;\n if (err instanceof CLIError) {\n ui.warn(err.message);\n if (err.hint) ui.hint(err.hint);\n } else {\n ui.warn(\"Framework installation failed — continuing with config generation.\");\n }\n }\n\n // ── Step 7: Install components package ─────────────────────────────\n ui.newline();\n ui.step(\"Installing component library…\");\n let componentsOk = true;\n try {\n await installComponentsPackage({\n token: auth.token,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: initRoot,\n ...installOpts,\n });\n } catch (err) {\n componentsOk = false;\n if (err instanceof CLIError) {\n ui.warn(err.message);\n if (err.hint) ui.hint(err.hint);\n } else {\n ui.warn(\"Component library installation failed; continuing with config generation.\");\n }\n }\n\n // ── Step 8: Generate project config files\n ui.step(\"Generating config files…\");\n writeAssetsConfig(initRoot);\n ensureProjectConfig(initRoot);\n writeTsConfig(framework.framework, initRoot);\n if (framework.framework === \"vite\") {\n ensureInventiveUiViteConfig(initRoot);\n ui.ok(\"Config files ready (iui.config.ts, tsconfig.json, tsconfig.node.json, vite.config.ts)\");\n } else {\n if (removeStaleIuiViteConfig(initRoot)) {\n ui.hint(\"Removed vite.config.ts (React-only preset — no Vite tooling required).\");\n }\n ui.ok(\"Config files ready (iui.config.ts, tsconfig.json)\");\n }\n\n // ── Step 9: Generate component.config.ts (from registry) ──────────\n ui.step(\"Generating component.config.ts…\");\n const fetchedRegistry = await fetchComponentRegistry(auth.token);\n if (!fetchedRegistry.registry && fetchedRegistry.apiFailure) {\n ui.warn(`Component registry API: ${fetchedRegistry.apiFailure}`);\n }\n ensureComponentConfig(fetchedRegistry.registry, initRoot);\n ui.ok(\"component.config.ts ready\");\n\n if (framework.framework === \"react\" && removeStaleIuiViteConfig(initRoot)) {\n ui.hint(\"Removed vite.config.ts (React-only preset — no Vite tooling required).\");\n }\n\n if (sharedWorkspace) {\n registerAllWorkspacePackages(initRoot);\n } else {\n registerWorkspacePackage(initRoot, initRoot);\n }\n bootstrapRegisteredPackages(initRoot);\n\n // ── Done ───────────────────────────────────────────────────────────\n if (frameworkOk && componentsOk) {\n ui.done(\"Project initialized successfully!\");\n } else {\n const pm = detectPackageManager(initRoot);\n const missing: string[] = [];\n if (!frameworkOk) missing.push(FRAMEWORK_PACKAGE);\n if (!componentsOk) missing.push(COMPONENTS_PACKAGE);\n\n ui.done(\"Project initialized (config files created), but some packages are still missing.\");\n ui.hint(`Install manually: ${installCmd(pm, missing.join(\" \"), initRoot)}`);\n ui.newline();\n ui.hint(\"If you see npm 'location' or ENOTEMPTY errors, clean the workspace and retry:\");\n ui.hint(\"• cd to monorepo root → remove node_modules/next if present → npm install\");\n ui.hint(\"• Then run: iui install framework && iui install components (from this app)\");\n ui.newline();\n ui.hint(\"Auth-related failures:\");\n ui.hint(\"• Seat/license error → ask an admin to run: iui team add <your-github-email>\");\n ui.hint(\"• Then re-authenticate: iui login\");\n ui.hint(\"• CI / non-interactive builds → set IUI_DEPLOY_TOKEN (see docs/TEAM-ONBOARDING.md)\");\n }\n\n ui.nextSteps([\n \"iui install assets — Install asset packages (icons, illustrations…)\",\n \"iui list — View installed components\",\n \"iui doctor — Check project health\",\n ]);\n } finally {\n process.chdir(originalCwd);\n }\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── License Service ─────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type { LicenseInfo, LicenseSeatList } from \"../types.js\";\n\nexport type LicenseMode = \"seat_based\" | \"individual_plan\";\n\nfunction parseApiErrorBody(body: string, fallback: string): string {\n const trimmed = body.trim();\n if (!trimmed) return fallback;\n if (!trimmed.startsWith(\"{\")) return `${fallback}: ${trimmed}`;\n try {\n const parsed = JSON.parse(trimmed) as { error?: unknown };\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n return parsed.error;\n }\n } catch {\n // ignore\n }\n return fallback;\n}\n\nexport async function validateLicense(token: string): Promise<LicenseInfo> {\n const res = await fetch(`${API_BASE_URL}/license/validate`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"validating your license\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) throw new CLIError(\"License invalid or revoked.\", \"Visit inventiveui.com\");\n if (!res.ok) throw new CLIError(`License validation failed (${res.status}).`);\n\n const license = (await res.json()) as LicenseInfo;\n if (!license.valid) throw new CLIError(\"Your license is not valid.\", \"Visit inventiveui.com\");\n return license;\n}\n\nexport function isUpdateEligible(releaseDate: string, expiresAt: string): boolean {\n return new Date(releaseDate) <= new Date(expiresAt);\n}\n\nexport function getLicenseMode(license: LicenseInfo): LicenseMode {\n if (license.license_mode === \"seat_based\") {\n return \"seat_based\";\n }\n if (license.license_mode === \"individual_plan\" || license.license_mode === \"unlimited\") {\n return \"individual_plan\";\n }\n return typeof license.seat_limit === \"number\" ? \"seat_based\" : \"individual_plan\";\n}\n\nexport function formatPlanLabel(plan?: string): string {\n const value = plan?.trim();\n if (!value) return \"—\";\n const normalized = value.toLowerCase();\n if (normalized === \"individual\" || normalized === \"individual_plan\") return \"Individual\";\n if (normalized === \"team\" || normalized === \"seat_based\") return \"Team\";\n return value;\n}\n\nexport function formatSeatUsage(license: LicenseInfo): string | null {\n if (getLicenseMode(license) !== \"seat_based\") return null;\n if (typeof license.seats_used !== \"number\" || typeof license.seat_limit !== \"number\") {\n return null;\n }\n return `${license.seats_used}/${license.seat_limit}`;\n}\n\nexport function hasAvailableSeat(license: LicenseInfo): boolean {\n if (getLicenseMode(license) !== \"seat_based\") return true;\n if (typeof license.seats_used !== \"number\" || typeof license.seat_limit !== \"number\") {\n return false;\n }\n return license.seats_used < license.seat_limit;\n}\n\nexport async function listLicenseUsers(token: string, includeInactive = false): Promise<LicenseSeatList> {\n const query = includeInactive ? \"?include_inactive=true\" : \"\";\n const res = await fetch(`${API_BASE_URL}/license/users${query}`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing team seats\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, \"Only license admin can list seats.\"));\n }\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to list seats (${res.status}).`));\n }\n return res.json() as Promise<LicenseSeatList>;\n}\n\nexport async function addLicenseUser(token: string, email: string): Promise<{ active_seats: number; seat_limit: number }> {\n const res = await fetch(`${API_BASE_URL}/license/users/add`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ email }),\n });\n throwIfRateLimited(res, \"adding a team seat\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to add seat (${res.status}).`));\n }\n const payload = (await res.json()) as { active_seats: number; seat_limit: number };\n return payload;\n}\n\nexport async function removeLicenseUser(token: string, email: string): Promise<{ active_seats: number; seat_limit: number }> {\n const res = await fetch(`${API_BASE_URL}/license/users/remove`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ email }),\n });\n throwIfRateLimited(res, \"removing a team seat\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to remove seat (${res.status}).`));\n }\n const payload = (await res.json()) as { active_seats: number; seat_limit: number };\n return payload;\n}\n","// ─── Project Service ─────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type { ProjectRegistration } from \"../types.js\";\n\nexport async function registerProject(\n token: string,\n repoUrl: string,\n): Promise<ProjectRegistration> {\n const res = await fetch(`${API_BASE_URL}/projects/register`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ repo_url: repoUrl }),\n });\n throwIfRateLimited(res, \"registering your project\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) {\n const body = await res.json().catch(() => ({})) as { error?: string };\n const message = body.error ?? \"Project registration forbidden.\";\n throw new CLIError(\n message,\n message.toLowerCase().includes(\"seat limit\")\n ? \"Visit inventiveui.com to upgrade\"\n : undefined,\n );\n }\n if (!res.ok) throw new CLIError(`Project registration failed (${res.status}).`);\n return (await res.json()) as ProjectRegistration;\n}\n\nexport async function markFrameworkInstalled(token: string, projectId: string): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/framework`, {\n method: \"PUT\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ framework_installed: true }),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n","// ─── Registry API errors (CLI ↔ IUI-CLI-API alignment) ───────────────────────\n//\n// API returns JSON: { \"error\": string, \"code\"?: string }\n// Keep `REGISTRY_*` / manifest code strings in sync with:\n// IUI-CLI-API/src/lib/registryErrorCodes.ts\n\nexport type RegistryApiErrorPayload = {\n error?: string;\n code?: string;\n};\n\n/** Try to parse `{ error, code }` from an API error body. */\nexport function parseRegistryApiErrorBody(body: string): RegistryApiErrorPayload | null {\n const t = body.trim();\n if (!t.startsWith(\"{\")) return null;\n try {\n const o = JSON.parse(t) as unknown;\n if (!o || typeof o !== \"object\") return null;\n const err = (o as { error?: unknown }).error;\n const code = (o as { code?: unknown }).code;\n return {\n error: typeof err === \"string\" ? err : undefined,\n code: typeof code === \"string\" ? code : undefined,\n };\n } catch {\n return null;\n }\n}\n\nconst GENERIC_HINT =\n \"Run iui login if you are not signed in. If the problem continues, check your network or try again later.\";\n\nconst OPERATOR_SERVER_HINT =\n \"If you operate the API: set NODE_AUTH_TOKEN (GitHub PAT with read:packages) or IUI_COMPONENTS_MANIFEST_URL / IUI_COMPONENTS_MANIFEST_PATH. See IUI-CLI-API .env.example.\";\n\n/**\n * User-facing hints keyed by API `code` (manifest, npm proxy, updates).\n * Sync with IUI-CLI-API/src/lib/registryErrorCodes.ts\n */\nexport const REGISTRY_API_ERROR_HINTS: Record<string, string> = {\n // Manifest / GitHub Packages (components)\n MANIFEST_URL_HTTP: \"The configured manifest URL returned an error. Operators should verify IUI_COMPONENTS_MANIFEST_URL.\",\n MANIFEST_URL_INVALID: \"Manifest JSON from the URL must include an \\\"items\\\" array. Fix the hosted file or override.\",\n MANIFEST_URL_ERROR: \"Could not load manifest from IUI_COMPONENTS_MANIFEST_URL. Check URL and network.\",\n MANIFEST_PATH_MISSING: OPERATOR_SERVER_HINT,\n MANIFEST_PATH_INVALID: \"Manifest file at IUI_COMPONENTS_MANIFEST_PATH must include an \\\"items\\\" array.\",\n MANIFEST_PATH_ERROR: \"Could not read IUI_COMPONENTS_MANIFEST_PATH on the server.\",\n REGISTRY_NOT_CONFIGURED: OPERATOR_SERVER_HINT,\n GITHUB_NETWORK_ERROR: \"The API could not reach GitHub Packages. Retry later or check server outbound network.\",\n GITHUB_UNAUTHORIZED: OPERATOR_SERVER_HINT,\n GITHUB_PACKAGE_NOT_FOUND:\n \"@inventive-ui/components may not be published to GitHub Packages, or the scope/name is wrong.\",\n GITHUB_REGISTRY_ERROR: \"GitHub Packages returned an unexpected error while loading component metadata.\",\n COMPONENTS_NO_LATEST: \"Published @inventive-ui/components has no dist-tags.latest on the registry.\",\n GITHUB_VERSION_NETWORK: \"Network error while resolving the latest components version on the server.\",\n COMPONENTS_RESOLVE_PKGJSON:\n \"Server could not read package.json for the latest components version (GitHub may return HTTP 405; tarball fallback failed).\",\n COMPONENTS_TARBALL_HTTP: \"Server could not download the components tarball from GitHub Packages.\",\n COMPONENTS_NO_PACKAGE_JSON_IN_TARBALL: \"Published tarball is missing package/package.json.\",\n COMPONENTS_PKGJSON_FROM_TARBALL: \"Server could not parse package.json from the published tarball.\",\n COMPONENTS_NO_IUI_FIELD:\n \"Published @inventive-ui/components must include an \\\"iui\\\" field in package.json (manifest path or embedded items).\",\n COMPONENTS_MANIFEST_PATH_UNSAFE: \"The manifest path in package.json contains unsafe segments; publish a safe relative path.\",\n COMPONENTS_NO_TARBALL: \"Registry metadata has no tarball URL for the latest components version.\",\n COMPONENTS_MANIFEST_NOT_IN_TARBALL: \"The manifest file declared in package.json was not found inside the tarball.\",\n COMPONENTS_MANIFEST_INVALID_JSON: \"iui-manifest.json inside the package is not valid JSON.\",\n\n // npm proxy (download / metadata)\n REGISTRY_UNAUTHORIZED: \"Run iui login and try again.\",\n REGISTRY_LICENSE_REQUIRED: \"Access requires an active license seat. Ask your admin to add your email or use a deploy token from a licensed account.\",\n REGISTRY_UPDATE_WINDOW_EXPIRED: \"Your update window has expired. Renew at inventiveui.com to access newer package versions.\",\n REGISTRY_PACKAGE_FORBIDDEN: \"This deploy token is scoped to different packages. Create a new token with the required package scope.\",\n REGISTRY_INVALID_PACKAGE: \"That package id is not served by this registry API.\",\n REGISTRY_PACKAGE_NOT_FOUND: \"Package not found on the registry. It may be unpublished or the name may be wrong.\",\n REGISTRY_NO_PUBLISHED_VERSION: \"No published version found for that package.\",\n REGISTRY_NO_TARBALL_URL: \"Registry metadata has no tarball URL for the requested version.\",\n REGISTRY_TARBALL_DOWNLOAD_FAILED: \"The API could not download the package tarball from GitHub Packages.\",\n REGISTRY_UPSTREAM_METADATA_ERROR: \"GitHub Packages returned an error while loading package metadata.\",\n\n // POST /registry/updates\n REGISTRY_UPDATES_INVALID_JSON: \"Request body was not valid JSON.\",\n REGISTRY_UPDATES_MISSING_PROJECT_ID: \"Project metadata is missing. Run iui init to register this repository.\",\n REGISTRY_UPDATES_PROJECT_NOT_FOUND: \"This project is not registered to your account. Re-run iui init in this repository.\",\n REGISTRY_UPDATES_MISSING_COMPONENTS: \"Request must include a \\\"components\\\" object with installed versions.\",\n};\n\nexport function registryApiHintForCode(code?: string): string | undefined {\n if (!code) return undefined;\n return REGISTRY_API_ERROR_HINTS[code];\n}\n\n/** One-line summary for dim() / logs when manifest fetch fails. */\nexport function formatManifestApiFailure(httpStatus: number, body: string): string {\n const p = parseRegistryApiErrorBody(body);\n if (p?.code && p?.error) return `${httpStatus} [${p.code}] ${p.error}`;\n if (p?.error) return `${httpStatus} — ${p.error}`;\n const raw = body.trim().replace(/\\s+/g, \" \");\n if (raw.length > 180) return `${httpStatus} — ${raw.slice(0, 177)}…`;\n return raw ? `${httpStatus} — ${raw}` : String(httpStatus);\n}\n\n/** Message + optional hint for failed tarball download via /registry/npm/download */\nexport function formatPackageDownloadFailure(\n httpStatus: number,\n body: string,\n packageLabel: string,\n): { message: string; hint?: string } {\n const p = parseRegistryApiErrorBody(body);\n const hint = registryApiHintForCode(p?.code) ?? (httpStatus === 401 || httpStatus === 403 ? GENERIC_HINT : undefined);\n const detail = p?.error ? ` ${p.error}` : \"\";\n return {\n message: `Failed to download ${packageLabel} (${httpStatus}).${detail}`.trim(),\n hint,\n };\n}\n\n/** CLIError payload when POST /registry/updates fails (includes manifest errors). */\nexport function formatComponentUpdatesFailure(httpStatus: number, body: string): {\n message: string;\n hint?: string;\n} {\n const p = parseRegistryApiErrorBody(body);\n const hint =\n registryApiHintForCode(p?.code) ?? (httpStatus >= 500 ? OPERATOR_SERVER_HINT : GENERIC_HINT);\n const detail = p?.error ? `: ${p.error}` : \"\";\n return {\n message: `Failed to check for updates (${httpStatus})${detail}`,\n hint,\n };\n}\n","// ─── Registry Service ────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport {\n formatComponentUpdatesFailure,\n formatManifestApiFailure,\n parseRegistryApiErrorBody,\n} from \"../constants/registry-api-errors.js\";\nimport { authHeader } from \"./auth.js\";\nimport { readComponentPackageManifest } from \"../utils/filesystem.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type {\n ComponentUpdate,\n ComponentPackageManifest,\n} from \"../types.js\";\nimport { parseAndValidateRegistryManifest } from \"../validation/registryManifest.js\";\n\nexport type ComponentRegistrySource = \"api\" | \"local\" | \"none\";\n\n/**\n * Fetch the component registry manifest from the API.\n *\n * The API reads the \"iui\" field from the latest published\n * @inventive-ui/components package.json on GitHub Packages.\n *\n * Uses API as source of truth, with local iui-manifest.json fallback when the\n * API is unreachable.\n */\nexport async function fetchComponentRegistry(\n token?: string,\n): Promise<{\n registry: ComponentPackageManifest | null;\n source: ComponentRegistrySource;\n /** Why the API did not return a manifest (aligned with API `{ error, code }` when JSON). */\n apiFailure?: string;\n /** Structured API error when manifest request failed with a JSON body. */\n apiError?: { httpStatus: number; code?: string; message?: string };\n}> {\n // Local fallback for offline/unavailable API scenarios.\n const local = readComponentPackageManifest();\n\n // Try remote API first (source of truth)\n const url = `${API_BASE_URL}/registry/components/manifest`;\n try {\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (token) Object.assign(headers, authHeader(token));\n\n const res = await fetch(url, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers,\n });\n\n if (res.ok) {\n const raw = await res.json();\n const registry = parseAndValidateRegistryManifest(raw, \"API\");\n return { registry, source: \"api\" };\n }\n\n const body = await res.text().catch(() => \"\");\n const apiFailure = formatManifestApiFailure(res.status, body);\n const parsed = parseRegistryApiErrorBody(body);\n const apiError =\n parsed?.error !== undefined || parsed?.code !== undefined\n ? {\n httpStatus: res.status,\n code: parsed.code,\n message: parsed.error ?? \"\",\n }\n : undefined;\n if (local) {\n return { registry: local, source: \"local\", apiFailure, apiError };\n }\n return { registry: null, source: \"none\", apiFailure, apiError };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (local) {\n return {\n registry: local,\n source: \"local\",\n apiFailure: `${msg} (${url})`,\n };\n }\n return {\n registry: null,\n source: \"none\",\n apiFailure: `${msg} (${url})`,\n };\n }\n}\n\nexport async function fetchComponentUpdates(\n token: string,\n projectId: string,\n installed: Record<string, string>,\n): Promise<ComponentUpdate[]> {\n const res = await fetch(`${API_BASE_URL}/registry/updates`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ project_id: projectId, components: installed }),\n });\n throwIfRateLimited(res, \"checking for component updates\");\n if (!res.ok) {\n const bodyText = await res.text().catch(() => \"\");\n const { message, hint } = formatComponentUpdatesFailure(res.status, bodyText);\n throw new CLIError(message, hint);\n }\n return (await res.json()) as ComponentUpdate[];\n}\n\nexport async function pingRegistry(): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE_URL}/health`, {\n signal: AbortSignal.timeout(5_000),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Fetch the latest published version for an @inventive-ui package short name\n * (e.g. \"components\", \"icons-lucide\", \"cli\") via the authenticated npm proxy.\n */\nexport async function fetchLatestScopedPackageVersion(\n token: string,\n shortName: string,\n): Promise<string | null> {\n const scopedName = `@inventive-ui/${shortName}`;\n const res = await fetch(`${API_BASE_URL}/registry/npm/${encodeURIComponent(scopedName)}`, {\n method: \"GET\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { Accept: \"application/json\", ...authHeader(token) },\n });\n\n throwIfRateLimited(res, `checking latest version for ${shortName}`);\n if (!res.ok) return null;\n\n try {\n const body = (await res.json()) as {\n \"dist-tags\"?: { latest?: string };\n version?: string;\n };\n return body[\"dist-tags\"]?.latest ?? body.version ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function fetchLatestCliVersion(token?: string): Promise<string | null> {\n try {\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (token) Object.assign(headers, authHeader(token));\n const cliPackage = \"inventive-ui\";\n const res = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(cliPackage)}`,\n {\n method: \"GET\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers,\n },\n );\n if (!res.ok) return null;\n const body = (await res.json()) as {\n \"dist-tags\"?: { latest?: string };\n version?: string;\n };\n return body[\"dist-tags\"]?.latest ?? body.version ?? null;\n } catch {\n return null;\n }\n}\n","// ─── Framework Installer Service ─────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport {\n isPackageInDeps,\n isPackageInDirectDeps,\n detectPackageManager,\n installCmd,\n installDevCmd,\n getInstalledPackageVersion,\n runSyncInstall,\n cleanupLegacyFrameworkMeta,\n detectReactVersion,\n detectReactDomVersion,\n detectViteVersion,\n type ReactCheckResult,\n type ReactDomCheckResult,\n type ViteCheckResult,\n} from \"../utils/filesystem.js\";\nimport { markFrameworkInstalled } from \"./project.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport {\n REACT_SAFE_VERSION,\n REQUIRED_REACT_MAJOR,\n VITE_SAFE_VERSION,\n REQUIRED_VITE_MAJOR,\n REQUIRED_VITE_PLUGIN_REACT_MAJOR,\n VITE_PLUGIN_REACT_SAFE_VERSION,\n NODE_TYPES_SAFE_VERSION,\n} from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { confirm, promptFrameworkChoice } from \"../utils/prompts.js\";\nimport { CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { installDevPackages, installPackages } from \"../utils/security/process.js\";\nimport { isMonorepoInstallContext } from \"../utils/workspace.js\";\nimport { prepareWorkspaceForDependencyInstall } from \"../utils/filesystem.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\nimport {\n getDirectDeclaredVersionFloor,\n syncDeclaredDependencyVersion,\n} from \"../utils/declared-deps.js\";\n\nexport { cleanupTempFile, downloadPackageTarball } from \"./registry-download.js\";\n// re-export for installer backward compatibility\n\nexport interface FrameworkInstallOptions {\n token: string;\n projectId: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport type FrameworkChoice = \"react\" | \"vite\";\n\nexport interface EnsureFrameworkDepsOptions {\n preferredFramework?: FrameworkChoice;\n autoApprove?: boolean;\n /** On fresh init, ask React vs Vite even when React is already in package.json. */\n alwaysPrompt?: boolean;\n}\n\nexport interface EnsureFrameworkDepsResult {\n framework: FrameworkChoice;\n reactVersion: string | null;\n reactDomVersion: string | null;\n viteVersion: string | null;\n}\n\nexport interface FrameworkInstallStatus {\n installed: boolean;\n version: string | null;\n declaredVersion: string | null;\n source: \"node_modules\" | \"yarn-pnp\" | \"declared\" | \"missing\";\n}\n\nconst FRAMEWORK_PACKAGE = \"@inventive-ui/framework\";\n\nfunction hasYarnPnP(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, \".pnp.cjs\")) ||\n fs.existsSync(path.join(cwd, \".pnp.js\"))\n );\n}\n\n/**\n * Baseline for update checks in npm/yarn/pnpm workspaces: compare registry\n * against this app's declared semver floor, not a sibling's hoisted install.\n */\nexport function getFrameworkUpdateBaselineVersion(\n cwd: string = process.cwd(),\n): string | null {\n return (\n getDirectDeclaredVersionFloor(FRAMEWORK_PACKAGE, cwd)\n ?? getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd)\n );\n}\n\nexport function getFrameworkInstallStatus(\n cwd: string = process.cwd(),\n): FrameworkInstallStatus {\n cleanupLegacyFrameworkMeta(cwd);\n\n const installedVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n const declaredInPkg =\n isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd) ?? isPackageInDeps(FRAMEWORK_PACKAGE, cwd);\n if (installedVersion) {\n return {\n installed: true,\n version: installedVersion,\n declaredVersion: declaredInPkg ?? installedVersion,\n source: \"node_modules\",\n };\n }\n\n const declaredVersion = isPackageInDeps(FRAMEWORK_PACKAGE, cwd);\n if (declaredVersion && hasYarnPnP(cwd)) {\n return {\n installed: true,\n version: declaredVersion,\n declaredVersion,\n source: \"yarn-pnp\",\n };\n }\n\n if (declaredVersion) {\n return {\n installed: false,\n version: null,\n declaredVersion,\n source: \"declared\",\n };\n }\n\n return {\n installed: false,\n version: null,\n declaredVersion: null,\n source: \"missing\",\n };\n}\n\nexport async function installFramework(opts: FrameworkInstallOptions): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n const source = normalizeInstallSource(opts.source);\n const forceLatest = opts.forceLatest === true;\n const status = getFrameworkInstallStatus(cwd);\n\n const declaredHere = isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd);\n if (declaredHere && status.installed && !forceLatest) {\n const synced = syncDeclaredDependencyVersion(FRAMEWORK_PACKAGE, cwd);\n const suffix = status.version ? ` ${ui.dim(`v${status.version}`)}` : \"\";\n ui.info(`Framework already installed${suffix}.`);\n if (synced && status.version) {\n ui.ok(`Synced package.json to ${ui.dim(`^${status.version}`)}`);\n }\n cleanupLegacyFrameworkMeta(cwd);\n await notifyIfUpdateAvailable(opts.token, \"framework\", status.version, \"Inventive UI Framework\");\n return;\n }\n\n const spinner = ora({\n text: forceLatest ? \"Updating Inventive UI Framework…\" : \"Installing Inventive UI Framework…\",\n prefixText: \" \",\n }).start();\n\n try {\n let installedVersion = \"0.0.0\";\n const pm = detectPackageManager(cwd);\n let installSucceeded = false;\n let installError: unknown = null;\n\n try {\n const result = await installPackageWithFallback(\n { packageShortName: \"framework\", npmName: FRAMEWORK_PACKAGE },\n {\n token: opts.token,\n source,\n cwd,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipIfInstalled: !forceLatest,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n installedVersion = result.version;\n installSucceeded = true;\n } catch (err) {\n installError = err;\n spinner.text = \"Install failed — checking local dependencies…\";\n }\n\n if (!installSucceeded) {\n const alreadyInDeps = isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd);\n if (alreadyInDeps) {\n try {\n runSyncInstall(pm, cwd);\n const nowInstalled = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n if (nowInstalled) {\n installedVersion = nowInstalled;\n installSucceeded = true;\n spinner.succeed(\n `Framework ${ui.dim(`v${installedVersion}`)} found in dependencies and installed`,\n );\n } else if (hasYarnPnP(cwd)) {\n installedVersion = alreadyInDeps;\n installSucceeded = true;\n spinner.succeed(\n `Framework ${ui.dim(`v${installedVersion}`)} resolved via Yarn PnP`,\n );\n }\n } catch {\n // Fall through to error below.\n }\n } else {\n spinner.fail(\"Framework installation failed\");\n if (installError instanceof CLIError) throw installError;\n throw new CLIError(\n `Could not install ${FRAMEWORK_PACKAGE}.`,\n formatExecSyncError(installError) ??\n \"Ensure you are logged in (iui login) and registry auth is configured.\",\n );\n }\n }\n\n if (!installSucceeded) {\n spinner.fail(\"Framework installation failed\");\n throw new CLIError(\n `Found ${FRAMEWORK_PACKAGE} in package.json, but it is not installed in the current environment.`,\n \"Run your package manager install command (npm install / pnpm install / yarn install) and retry.\",\n );\n }\n\n if (installSucceeded && !spinner.isSpinning) {\n // Already showed succeed message in fallback 3\n } else {\n spinner.succeed(`Framework v${installedVersion} installed`);\n }\n\n if (syncDeclaredDependencyVersion(FRAMEWORK_PACKAGE, cwd)) {\n ui.ok(`Synced package.json to ${ui.dim(`^${installedVersion}`)}`);\n }\n\n // 4. Remove legacy framework metadata file if present.\n cleanupLegacyFrameworkMeta(cwd);\n\n // 5. Notify backend (non-fatal)\n const synced = await markFrameworkInstalled(opts.token, opts.projectId);\n if (!synced) {\n ui.warn(\"Framework installed locally, but project status could not be synced to the API.\");\n ui.hint(\"Run iui doctor after network recovery to verify project state.\");\n }\n } catch (error) {\n if (error instanceof CLIError) throw error;\n spinner.fail(\"Framework installation failed\");\n throw error;\n }\n}\n\nexport function checkFrameworkInstalled(cwd?: string): boolean {\n return getFrameworkInstallStatus(cwd).installed;\n}\n\n// ── React version pre-check ─────────────────────────────────────────────────\n\n/**\n * Check whether React 19.x is installed in the consumer project.\n * Returns the detection result for callers that only need the status.\n */\nexport function getReactStatus(cwd?: string): ReactCheckResult {\n return detectReactVersion(cwd);\n}\n\n/**\n * Check whether react-dom 19.x is installed in the consumer project.\n */\nexport function getReactDomStatus(cwd?: string): ReactDomCheckResult {\n return detectReactDomVersion(cwd);\n}\n\n// ── Vite version pre-check ──────────────────────────────────────────────────\n\n/**\n * Check whether Vite 6.x or newer is installed in the consumer project.\n * Returns the detection result for callers that only need the status.\n */\nexport function getViteStatus(cwd?: string): ViteCheckResult {\n return detectViteVersion(cwd);\n}\n\n// ── Unified framework dependency pre-check ──────────────────────────────────\n\n/**\n * Detect whether React 19.x or Vite 6+ is present.\n *\n * Logic:\n * - If at least one is present and correct → pass (user's chosen framework).\n * - If one is present but wrong version → prompt to update that one.\n * - If neither is present → ask the user which framework to use, then install it.\n */\nexport async function ensureFrameworkDeps(\n cwd: string = process.cwd(),\n opts: EnsureFrameworkDepsOptions = {},\n): Promise<EnsureFrameworkDepsResult> {\n const pm = detectPackageManager(cwd);\n const autoApprove = opts.autoApprove === true;\n\n const preferred = normalizeFrameworkChoice(opts.preferredFramework);\n if (opts.preferredFramework && !preferred) {\n throw new CLIError('Invalid framework. Use \"react\" or \"vite\".');\n }\n\n let react = detectReactVersion(cwd);\n let reactDom = detectReactDomVersion(cwd);\n let vite = detectViteVersion(cwd);\n\n let framework: FrameworkChoice;\n if (preferred) {\n framework = preferred;\n } else if (opts.alwaysPrompt === true) {\n ui.hint(\"Choose the setup preset for this package (configs and tooling are per-app).\");\n ui.newline();\n framework = await promptFrameworkChoice();\n } else if (hasViteConfig(cwd) || vite.status !== \"not-installed\") {\n framework = \"vite\";\n } else if (react.status !== \"not-installed\" || reactDom.status !== \"not-installed\") {\n framework = \"react\";\n } else {\n ui.warn(\"No supported frontend framework detected in this project.\");\n ui.hint(\"Choose a setup preset to continue with automated configuration.\");\n ui.newline();\n framework = await promptFrameworkChoice();\n }\n\n await ensureReactRuntime(pm, cwd, autoApprove, react, reactDom);\n react = detectReactVersion(cwd);\n reactDom = detectReactDomVersion(cwd);\n\n if (framework === \"vite\") {\n await ensureViteRuntime(pm, cwd, autoApprove, vite);\n vite = detectViteVersion(cwd);\n }\n\n if (react.status !== \"ok\" || reactDom.status !== \"ok\") {\n throw new CLIError(\n `React ${REQUIRED_REACT_MAJOR}.x and react-dom ${REQUIRED_REACT_MAJOR}.x are required.`,\n \"Install compatible React packages and rerun the command.\",\n );\n }\n\n if (framework === \"vite\" && vite.status !== \"ok\") {\n throw new CLIError(\n `Vite ${REQUIRED_VITE_MAJOR}.x or newer is required for the selected framework preset.`,\n \"Install compatible Vite packages and rerun the command.\",\n );\n }\n\n return {\n framework,\n reactVersion: react.version,\n reactDomVersion: reactDom.version,\n viteVersion: vite.status === \"ok\" ? vite.version : null,\n };\n}\n\n// ── Internal helpers ────────────────────────────────────────────────────────\n\ntype PM = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nfunction normalizeInstallSource(source?: \"api\" | \"registry\"): \"api\" | \"registry\" {\n return source === \"registry\" ? \"registry\" : \"api\";\n}\n\nfunction normalizeFrameworkChoice(choice?: string): FrameworkChoice | null {\n if (!choice) return null;\n const c = String(choice).trim().toLowerCase();\n if (c === \"react\" || c === \"vite\") return c;\n return null;\n}\n\nfunction hasViteConfig(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, \"vite.config.ts\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.mts\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.js\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.mjs\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.cjs\"))\n );\n}\n\nasync function ensureReactRuntime(\n pm: PM,\n cwd: string,\n autoApprove: boolean,\n react: ReactCheckResult,\n reactDom: ReactDomCheckResult,\n): Promise<void> {\n if (react.status === \"ok\" && reactDom.status === \"ok\") {\n ui.ok(`React ${react.version} detected`);\n ui.ok(`react-dom ${reactDom.version} detected`);\n return;\n }\n\n const pkgs = `react@${REACT_SAFE_VERSION} react-dom@${REACT_SAFE_VERSION}`;\n const command = installCmd(pm, pkgs);\n const currentVersion =\n react.status !== \"not-installed\"\n ? react.version\n : reactDom.status !== \"not-installed\"\n ? reactDom.version\n : \"not installed\";\n\n ui.warn(`React runtime is incomplete or incompatible (${currentVersion}).`);\n ui.hint(`Inventive UI requires React ${REQUIRED_REACT_MAJOR}.x and react-dom ${REQUIRED_REACT_MAJOR}.x`);\n ui.newline();\n\n const shouldUpdate = autoApprove\n ? true\n : await confirm(\n `Install / update react@${REACT_SAFE_VERSION} and react-dom@${REACT_SAFE_VERSION}?`,\n );\n\n if (!shouldUpdate) {\n throw new CLIError(`React ${REQUIRED_REACT_MAJOR}.x is required.`, command);\n }\n\n const spinner = ora({ text: \"Updating React…\", prefixText: \" \" }).start();\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installPackages(pm, pkgs, cwd);\n spinner.succeed(`React updated to ${REQUIRED_REACT_MAJOR}.x`);\n } catch (err) {\n spinner.fail(\"Failed to update React\");\n throw new CLIError(\n \"Could not update React automatically.\",\n formatExecSyncError(err) ?? command,\n );\n }\n}\n\nasync function ensureViteRuntime(\n pm: PM,\n cwd: string,\n autoApprove: boolean,\n vite: ViteCheckResult,\n): Promise<void> {\n const pluginReactVersion = detectPluginReactVersion(cwd);\n const hasPluginReact = pluginReactVersion !== null;\n const pluginReactMajor =\n pluginReactVersion !== null ? getMajorFromVersion(pluginReactVersion) : null;\n const pluginReactOk =\n pluginReactMajor !== null && pluginReactMajor >= REQUIRED_VITE_PLUGIN_REACT_MAJOR;\n const needsVite = vite.status !== \"ok\";\n const needsPluginReact = !pluginReactOk;\n const needsNodeTypes =\n !isPackageInDeps(\"@types/node\", cwd) && !getInstalledPackageVersion(\"@types/node\", cwd);\n\n if (!needsVite && !needsPluginReact && !needsNodeTypes) {\n ui.ok(`Vite ${vite.version} detected`);\n ui.ok(`@vitejs/plugin-react ${pluginReactVersion} detected`);\n return;\n }\n\n const pkgs = [\n needsVite ? `vite@${VITE_SAFE_VERSION}` : null,\n needsPluginReact ? `@vitejs/plugin-react@${VITE_PLUGIN_REACT_SAFE_VERSION}` : null,\n needsNodeTypes ? `@types/node@${NODE_TYPES_SAFE_VERSION}` : null,\n ]\n .filter(Boolean)\n .join(\" \");\n const command = installDevCmd(pm, pkgs);\n\n if (needsVite) {\n const currentVersion = vite.status === \"not-installed\" ? \"not installed\" : vite.version;\n ui.warn(`Vite is missing or incompatible (${currentVersion}).`);\n ui.hint(`Inventive UI Vite preset requires Vite ${REQUIRED_VITE_MAJOR}.x or newer`);\n }\n if (needsPluginReact) {\n if (!hasPluginReact) {\n ui.warn(\"@vitejs/plugin-react is missing.\");\n } else {\n ui.warn(\n `@vitejs/plugin-react ${pluginReactVersion} is incompatible with Vite ${REQUIRED_VITE_MAJOR}+.`,\n );\n ui.hint(\n `Inventive UI Vite preset requires @vitejs/plugin-react ${REQUIRED_VITE_PLUGIN_REACT_MAJOR}.x or newer`,\n );\n }\n }\n ui.newline();\n\n const shouldUpdate = autoApprove\n ? true\n : await confirm(`Install / update required Vite tooling (${pkgs})?`);\n\n if (!shouldUpdate) {\n throw new CLIError(`Vite ${REQUIRED_VITE_MAJOR}.x setup is required.`, command);\n }\n\n const spinner = ora({ text: \"Installing Vite tooling…\", prefixText: \" \" }).start();\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installDevPackages(pm, pkgs, cwd);\n spinner.succeed(\"Vite tooling is ready\");\n } catch (err) {\n spinner.fail(\"Failed to install Vite tooling\");\n throw new CLIError(\n \"Could not install Vite tooling automatically.\",\n formatExecSyncError(err) ?? command,\n );\n }\n}\n\nfunction detectPluginReactVersion(cwd: string): string | null {\n const installed = getInstalledPackageVersion(\"@vitejs/plugin-react\", cwd);\n if (installed) return installed;\n return isPackageInDeps(\"@vitejs/plugin-react\", cwd) ?? null;\n}\n\nfunction getMajorFromVersion(version: string): number | null {\n const cleaned = version.replace(/^[\\^~>=<\\s]+/, \"\").trim();\n const match = cleaned.match(/^(\\d+)/);\n if (!match) return null;\n const major = parseInt(match[1], 10);\n return Number.isNaN(major) ? null : major;\n}\n","// ─── Download @inventive-ui/* tarballs via API proxy ──────────────────────────\n\nimport { createWriteStream, mkdtempSync, unlinkSync, rmSync } from \"node:fs\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Readable, Transform } from \"node:stream\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { formatPackageDownloadFailure } from \"../constants/registry-api-errors.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, getNodeErrorCode, throwIfRateLimited } from \"../utils/errors.js\";\nimport { sanitizePackageVersionHeader } from \"../utils/security/identifiers.js\";\n\nconst MAX_TARBALL_BYTES = 250 * 1024 * 1024;\n\n/**\n * Download a short package name (e.g. \"framework\", \"components\", \"icons-lucide\")\n * from GET /registry/npm/download.\n */\nexport async function downloadPackageTarball(\n token: string,\n packageShortName: string,\n): Promise<{ path: string; version: string }> {\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(packageShortName)) {\n throw new CLIError(`Invalid package name: ${packageShortName}`);\n }\n\n const url = `${API_BASE_URL}/registry/npm/download?package=${encodeURIComponent(packageShortName)}`;\n let res: Response;\n try {\n res = await fetch(url, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: authHeader(token),\n });\n } catch (err) {\n const code = getNodeErrorCode(err);\n const msg = err instanceof Error ? err.message : String(err);\n throw new CLIError(\n `Failed to download ${packageShortName} (network).`,\n code ? `${code}: ${msg}` : msg,\n );\n }\n\n throwIfRateLimited(res, `downloading ${packageShortName}`);\n\n if (!res.ok || !res.body) {\n const bodyText = await res.text().catch(() => \"\");\n const { message, hint } = formatPackageDownloadFailure(\n res.status,\n bodyText,\n packageShortName,\n );\n throw new CLIError(message, hint);\n }\n\n const version = sanitizePackageVersionHeader(res.headers.get(\"X-Package-Version\"));\n if (!version) {\n throw new CLIError(`Server did not return a version for ${packageShortName}.`);\n }\n\n const contentLength = res.headers.get(\"content-length\");\n if (contentLength) {\n const len = Number(contentLength);\n if (Number.isFinite(len) && len > MAX_TARBALL_BYTES) {\n throw new CLIError(\n `Download of ${packageShortName} exceeds size limit (${MAX_TARBALL_BYTES} bytes).`,\n );\n }\n }\n\n const tmpDir = mkdtempSync(path.join(os.tmpdir(), \"iui-dl-\"));\n const tempPath = path.join(tmpDir, `${packageShortName}.tgz`);\n const fileStream = createWriteStream(tempPath, { flags: \"wx\" });\n let bytesWritten = 0;\n\n const limiter = new Transform({\n transform(chunk, _encoding, callback) {\n bytesWritten += chunk.length;\n if (bytesWritten > MAX_TARBALL_BYTES) {\n callback(\n new CLIError(\n `Download of ${packageShortName} exceeded size limit (${MAX_TARBALL_BYTES} bytes).`,\n ),\n );\n return;\n }\n callback(null, chunk);\n },\n });\n\n try {\n await pipeline(\n Readable.fromWeb(res.body as import(\"node:stream/web\").ReadableStream),\n limiter,\n fileStream,\n );\n } catch (err) {\n cleanupTempFile(tempPath);\n throw err;\n }\n\n return { path: tempPath, version };\n}\n\nexport function cleanupTempFile(filePath: string): void {\n const parent = path.dirname(filePath);\n try {\n unlinkSync(filePath);\n } catch {\n /* ignore */\n }\n if (parent.includes(\"iui-dl-\")) {\n try {\n rmSync(parent, { recursive: true, force: true });\n } catch {\n /* ignore */\n }\n }\n}\n","// ─── Keep package.json declared ranges aligned with installed versions ─────────\n//\n// npm resolves semver ranges into node_modules without rewriting package.json.\n// After install/update/doctor, bump direct @inventive-ui deps to ^<installed>\n// when the installed release is ahead of the declared range floor.\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { NPM_SCOPE } from \"../constants.js\";\nimport { atomicWriteJson } from \"./atomic.js\";\nimport { getInstalledPackageVersion } from \"./filesystem.js\";\nimport { isPackageInDirectDeps } from \"./workspace.js\";\nimport { cleanVersionString, isVersionEqual, isVersionGreater } from \"./version.js\";\n\ntype DepField = \"dependencies\" | \"devDependencies\";\n\n/**\n * True when package.json should be normalized to `^installed`.\n */\nexport function shouldSyncDeclaredDependency(\n declared: string,\n installed: string,\n): boolean {\n const desired = `^${installed}`;\n if (declared === desired) return false;\n if (declared.startsWith(\"file:\")) return true;\n\n const floor = cleanVersionString(declared);\n if (!floor) return false;\n\n if (isVersionGreater(installed, floor)) return true;\n\n // Normalize exact pins and legacy ranges to caret form matching installed.\n return isVersionEqual(installed, floor) && declared !== desired;\n}\n\nfunction readDepField(\n pkg: Record<string, Record<string, string>>,\n packageName: string,\n): { field: DepField; declared: string } | null {\n const declared =\n pkg.dependencies?.[packageName] ?? pkg.devDependencies?.[packageName];\n if (!declared) return null;\n const field: DepField = pkg.dependencies?.[packageName]\n ? \"dependencies\"\n : \"devDependencies\";\n return { field, declared };\n}\n\n/**\n * When `node_modules` resolves ahead of the declared semver floor, write\n * `^<installed>` into this package's package.json.\n */\nexport function syncDeclaredDependencyVersion(\n packageName: string,\n cwd: string = process.cwd(),\n): boolean {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return false;\n\n const installed = getInstalledPackageVersion(packageName, cwd);\n if (!installed) return false;\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const dep = readDepField(pkg, packageName);\n if (!dep) return false;\n\n if (!shouldSyncDeclaredDependency(dep.declared, installed)) return false;\n\n const desired = `^${installed}`;\n pkg[dep.field] ??= {};\n pkg[dep.field]![packageName] = desired;\n atomicWriteJson(pkgPath, pkg);\n return true;\n}\n\n/** Semver floor from this package's own package.json (ignores hoisted node_modules). */\nexport function getDirectDeclaredVersionFloor(\n packageName: string,\n cwd: string = process.cwd(),\n): string | null {\n const declared = isPackageInDirectDeps(packageName, cwd);\n if (!declared) return null;\n const floor = cleanVersionString(declared);\n return floor || null;\n}\n\n/** True when hoisted node_modules is ahead of this app's declared semver range. */\nexport function needsDeclaredDependencySync(\n packageName: string,\n cwd: string = process.cwd(),\n): boolean {\n const declared = isPackageInDirectDeps(packageName, cwd);\n if (!declared) return false;\n const installed = getInstalledPackageVersion(packageName, cwd);\n if (!installed) return false;\n return shouldSyncDeclaredDependency(declared, installed);\n}\n\n/** Sync all direct @inventive-ui/* dependencies declared in this workspace app. */\nexport function syncInventiveUiDeclaredDependencies(\n cwd: string = process.cwd(),\n): string[] {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return [];\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const names = new Set<string>();\n for (const field of [\"dependencies\", \"devDependencies\"] as const) {\n for (const name of Object.keys(pkg[field] ?? {})) {\n if (name.startsWith(`${NPM_SCOPE}/`)) names.add(name);\n }\n }\n\n const synced: string[] = [];\n for (const name of [...names].sort()) {\n if (syncDeclaredDependencyVersion(name, cwd)) synced.push(name);\n }\n return synced;\n}\n","// ─── Unified package install (API tarball ↔ registry) ─────────────────────\n\nimport {\n detectPackageManager,\n fixTarballDep,\n getInstalledPackageVersion,\n isPackageInDeps,\n isPackageInDirectDeps,\n prepareWorkspaceForDependencyInstall,\n runSyncInstall,\n runTarballInstall,\n} from \"../utils/filesystem.js\";\nimport {\n isMonorepoInstallContext,\n shouldUseWorkspaceRegistryInstall,\n} from \"../utils/workspace.js\";\nimport { downloadPackageTarball, cleanupTempFile } from \"./registry-download.js\";\nimport { fetchLatestScopedPackageVersion } from \"./registry.js\";\nimport { installPackages } from \"../utils/security/process.js\";\nimport { CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { syncDeclaredDependencyVersion } from \"../utils/declared-deps.js\";\nimport { isVersionEqual, isVersionGreater } from \"../utils/version.js\";\n\nexport type InstallSource = \"api\" | \"registry\";\n\nexport interface PackageInstallTarget {\n /** API short name, e.g. \"framework\", \"components\", \"icons-lucide\" */\n packageShortName: string;\n /** Full npm name, e.g. \"@inventive-ui/framework\" */\n npmName: string;\n}\n\nexport interface PackageInstallOptions {\n token: string;\n source?: InstallSource;\n cwd?: string;\n /** Skip install when package already present at this version or any version */\n skipIfInstalled?: boolean;\n /**\n * Upgrade to the newest published version. Resolves the version from the\n * authenticated registry API and installs an explicit semver (not `@latest`).\n */\n forceLatest?: boolean;\n /** Install this exact published version (used by `iui update`). */\n targetVersion?: string;\n /** Caller already ran {@link prepareWorkspaceForDependencyInstall}. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport interface PackageInstallResult {\n version: string;\n method: \"api-tarball\" | \"registry\" | \"deps-sync\" | \"already-installed\";\n}\n\nfunction normalizeSource(source?: string): InstallSource {\n const raw = source ?? process.env.IUI_INSTALL_SOURCE ?? \"api\";\n return raw === \"registry\" ? \"registry\" : \"api\";\n}\n\nexport type InstallStepOrderOptions = {\n /** When true, allow authenticated API tarball fallback after registry (monorepos). */\n upgrade?: boolean;\n};\n\n/**\n * Install strategy for monorepos: registry-first with explicit semver, then API\n * tarball when upgrading (private-registry best practice for npm workspaces).\n */\nexport function resolveInstallStepOrder(\n cwd: string,\n source: InstallSource,\n options: InstallStepOrderOptions = {},\n): Array<\"registry\" | \"api\"> {\n if (shouldUseWorkspaceRegistryInstall(cwd)) {\n return options.upgrade ? [\"registry\", \"api\"] : [\"registry\"];\n }\n return source === \"api\" ? [\"api\", \"registry\"] : [\"registry\", \"api\"];\n}\n\nfunction buildRegistryInstallSpec(\n npmName: string,\n targetVersion: string | null,\n _forceLatest: boolean,\n): string {\n if (targetVersion) return `${npmName}@${targetVersion}`;\n // Bare names become \"*\" in workspace manifest writes; always pin a registry tag.\n return `${npmName}@latest`;\n}\n\nasync function resolveUpgradeTargetVersion(\n target: PackageInstallTarget,\n opts: PackageInstallOptions,\n): Promise<string | null> {\n if (opts.targetVersion) return opts.targetVersion;\n if (!opts.forceLatest) return null;\n return await fetchLatestScopedPackageVersion(opts.token, target.packageShortName);\n}\n\nfunction assertUpgradeSucceeded(\n target: PackageInstallTarget,\n existing: string | null,\n resolved: string,\n requestedVersion: string | null,\n): void {\n if (!existing || !requestedVersion) return;\n if (!isVersionEqual(resolved, existing)) return;\n if (!isVersionGreater(requestedVersion, existing)) return;\n\n throw new CLIError(\n `Could not upgrade ${target.npmName} to v${requestedVersion}.`,\n `Still at v${existing}. Check registry auth (iui login) and retry, or install manually with your package manager.`,\n );\n}\n\nexport async function installPackageWithFallback(\n target: PackageInstallTarget,\n opts: PackageInstallOptions,\n): Promise<PackageInstallResult> {\n const cwd = opts.cwd ?? process.cwd();\n const source = normalizeSource(opts.source);\n const pm = detectPackageManager(cwd);\n const forceLatest = opts.forceLatest === true;\n const upgradeRequested = forceLatest || Boolean(opts.targetVersion);\n const requestedVersion = await resolveUpgradeTargetVersion(target, opts);\n\n if (!opts.skipWorkspacePrepare) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n\n const declaredHere = isPackageInDirectDeps(target.npmName, cwd);\n const existing = getInstalledPackageVersion(target.npmName, cwd);\n // In monorepos, siblings may hoist into root node_modules — still add deps to this package.\n if (opts.skipIfInstalled && declaredHere && existing && !upgradeRequested) {\n syncDeclaredDependencyVersion(target.npmName, cwd);\n return { version: existing, method: \"already-installed\" };\n }\n\n if (\n upgradeRequested\n && requestedVersion\n && existing\n && !isVersionGreater(requestedVersion, existing)\n ) {\n syncDeclaredDependencyVersion(target.npmName, cwd);\n return { version: existing, method: \"already-installed\" };\n }\n\n let version = existing ?? \"0.0.0\";\n let installed = false;\n let installedVia: PackageInstallResult[\"method\"] = \"registry\";\n let lastInstallError: unknown = null;\n\n const tryRegistry = (): void => {\n const installSpec = buildRegistryInstallSpec(\n target.npmName,\n requestedVersion,\n forceLatest && !requestedVersion,\n );\n installPackages(pm, installSpec, cwd);\n const after = getInstalledPackageVersion(target.npmName, cwd) ?? version;\n if (upgradeRequested && existing && isVersionEqual(after, existing)) {\n version = after;\n installed = false;\n return;\n }\n version = after;\n installed = Boolean(version && version !== \"0.0.0\");\n if (installed) installedVia = \"registry\";\n };\n\n const tryApi = async (): Promise<void> => {\n const { path: tarball, version: v } = await downloadPackageTarball(\n opts.token,\n target.packageShortName,\n );\n version = v;\n runTarballInstall(pm, tarball, cwd);\n fixTarballDep(target.npmName, v, cwd);\n cleanupTempFile(tarball);\n if (isMonorepoInstallContext(cwd)) {\n runSyncInstall(pm, cwd);\n }\n const after = getInstalledPackageVersion(target.npmName, cwd) ?? v;\n version = after;\n installed = Boolean(version && version !== \"0.0.0\");\n if (installed) installedVia = \"api-tarball\";\n };\n\n const stepOrder = resolveInstallStepOrder(cwd, source, { upgrade: upgradeRequested });\n\n for (const step of stepOrder) {\n if (installed) break;\n try {\n if (step === \"api\") {\n await tryApi();\n } else {\n tryRegistry();\n }\n } catch (err) {\n lastInstallError = err;\n }\n }\n\n if (!installed) {\n // Never mask a failed upgrade with a lockfile-only sync — that leaves stale versions.\n if (!upgradeRequested) {\n const declared =\n isPackageInDirectDeps(target.npmName, cwd) ?? isPackageInDeps(target.npmName, cwd);\n if (declared) {\n try {\n runSyncInstall(pm, cwd);\n const synced = getInstalledPackageVersion(target.npmName, cwd);\n if (synced) {\n return { version: synced, method: \"deps-sync\" };\n }\n } catch (err) {\n lastInstallError = err;\n }\n }\n }\n throw new CLIError(\n upgradeRequested\n ? `Could not upgrade ${target.npmName}${requestedVersion ? ` to v${requestedVersion}` : \"\"}.`\n : `Failed to install ${target.npmName}.`,\n formatExecSyncError(lastInstallError) ??\n \"Ensure you are logged in (iui login) and registry auth is configured.\",\n );\n }\n\n assertUpgradeSucceeded(target, existing, version, requestedVersion);\n\n syncDeclaredDependencyVersion(target.npmName, cwd);\n\n return {\n version,\n method: installedVia,\n };\n}\n","// ─── Behind-latest version notifier ──────────────────────────────────────────\r\n//\r\n// Best-effort, reproducible-friendly update nudges. We never auto-upgrade an\r\n// already-installed package (that would break lockfile reproducibility for\r\n// teams) — instead we surface when a newer version exists and point at\r\n// `iui update`. All checks are network best-effort and silent on failure.\r\n\r\nimport { fetchLatestScopedPackageVersion } from \"./registry.js\";\r\nimport { isVersionGreater } from \"../utils/version.js\";\r\nimport * as ui from \"./../utils/ui.js\";\r\n\r\n/**\r\n * Resolve the latest published version for an @inventive-ui short name.\r\n * Returns null on any failure (offline, auth, rate limit) so callers stay quiet.\r\n */\r\nexport async function getLatestVersionSafe(\r\n token: string | undefined,\r\n shortName: string,\r\n): Promise<string | null> {\r\n if (!token) return null;\r\n try {\r\n return await fetchLatestScopedPackageVersion(token, shortName);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Print a warning + `iui update` hint when `currentVersion` is behind the\r\n * latest published version. Best-effort and silent on any failure.\r\n *\r\n * @returns the latest version when known, otherwise null.\r\n */\r\nexport async function notifyIfUpdateAvailable(\r\n token: string | undefined,\r\n shortName: string,\r\n currentVersion: string | null | undefined,\r\n label: string,\r\n): Promise<string | null> {\r\n if (!currentVersion) return null;\r\n const latest = await getLatestVersionSafe(token, shortName);\r\n if (latest && isVersionGreater(latest, currentVersion)) {\r\n ui.warn(`${label} v${currentVersion} is behind the latest v${latest}.`);\r\n ui.hint(\"Run iui update to move to the latest version.\");\r\n return latest;\r\n }\r\n return latest;\r\n}\r\n","// ─── Component Package Service ───────────────────────────────────────────────\n\nimport ora from \"ora\";\nimport {\n getInstalledPackageVersion,\n isPackageInDirectDeps,\n} from \"../utils/filesystem.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport { COMPONENTS_PACKAGE } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { syncDeclaredDependencyVersion } from \"../utils/declared-deps.js\";\nimport { ensureSlotRegistry } from \"./slot-registry.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\n\nexport interface InstallOptions {\n token: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport async function installComponentsPackage(\n opts: InstallOptions,\n): Promise<{ previousVersion: string | null; version: string }> {\n const cwd = opts.cwd ?? process.cwd();\n const source = opts.source === \"registry\" ? \"registry\" : \"api\";\n const forceLatest = opts.forceLatest === true;\n const spinner = ora({\n text: forceLatest ? \"Updating components package…\" : \"Installing components package…\",\n prefixText: \" \",\n }).start();\n\n const declaredHere = isPackageInDirectDeps(COMPONENTS_PACKAGE, cwd);\n const previousVersion = declaredHere\n ? getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd)\n : null;\n\n let pkgVersion = previousVersion ?? \"0.0.0\";\n\n if (declaredHere && previousVersion && !forceLatest) {\n const synced = syncDeclaredDependencyVersion(COMPONENTS_PACKAGE, cwd);\n spinner.succeed(\n `${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)} already installed`,\n );\n if (synced) {\n ui.ok(`Synced package.json to ${ui.dim(`^${pkgVersion}`)}`);\n }\n await notifyIfUpdateAvailable(opts.token, \"components\", pkgVersion, COMPONENTS_PACKAGE);\n } else {\n try {\n const result = await installPackageWithFallback(\n {\n packageShortName: \"components\",\n npmName: COMPONENTS_PACKAGE,\n },\n {\n token: opts.token,\n source,\n cwd,\n skipIfInstalled: !forceLatest,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n pkgVersion = result.version;\n if (\n forceLatest\n && previousVersion\n && result.method !== \"already-installed\"\n && pkgVersion === previousVersion\n ) {\n spinner.fail(\"Components package was not upgraded\");\n throw new CLIError(\n `Could not upgrade ${COMPONENTS_PACKAGE} beyond v${previousVersion}.`,\n \"Check registry auth (iui login) and retry, or install manually from the workspace root.\",\n );\n }\n spinner.succeed(\n forceLatest\n ? `${COMPONENTS_PACKAGE} ${ui.dim(`${previousVersion ? `v${previousVersion} → ` : \"\"}v${pkgVersion}`)}`\n : `${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)} installed`,\n );\n } catch (err) {\n spinner.fail(forceLatest ? \"Could not update components package\" : \"Could not install components package\");\n throw err;\n }\n }\n\n const result = await ensureSlotRegistry({\n cwd,\n quiet: true,\n repairInstall: true,\n mode: \"repair\",\n });\n if (result.status === \"skipped\") {\n ui.warn(\"Component slot registry was not generated.\");\n ui.hint(\n \"Run iui init in this package (or iui doctor). Hoisted node_modules are supported — a root-level install is not required.\",\n );\n } else {\n ui.ok(\n result.status === \"repaired\"\n ? `Component slots repaired for ${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)}`\n : `Component slots ready for ${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)}`,\n );\n ui.hint('Import components from \"@inventive-ui/components\"; slots are available automatically.');\n }\n return { previousVersion, version: pkgVersion };\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n COMPONENTS_PACKAGE,\n IUI_DIR,\n ASSET_PACKAGES_MAP,\n} from \"../constants.js\";\nimport type {\n ComponentManifest,\n ComponentPackageManifest,\n PackageManifest,\n SlotManifest,\n} from \"../types.js\";\nimport {\n componentManifestPath,\n detectPackageManager,\n getInstalledPackageVersion,\n isInsideProject,\n isPackageInDeps,\n packageManifestPath,\n readComponentPackageManifest,\n runSyncInstall,\n slotManifestPath,\n writeAssetsConfig,\n writeComponentManifest,\n writePackageManifest,\n writeSlotManifest,\n ensureProjectConfig,\n projectHasViteTooling,\n ensureInventiveUiViteConfig,\n} from \"../utils/filesystem.js\";\nimport { atomicWriteJson, cleanupTempFiles, retry, sha256 } from \"../utils/atomic.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { withRegistryLock } from \"./registry-lock.js\";\nimport {\n validateGeneratedSlotImports,\n writeComponentSlotFiles,\n writeSlotHelperFile,\n} from \"./slots.js\";\nimport {\n validateGeneratedAssetBoundImports,\n writeAssetBoundFiles,\n} from \"./asset-bound.js\";\nimport { bootstrapRegisteredPackages } from \"./workspace-bootstrap.js\";\nimport { iuiCacheFile } from \"./iui-paths.js\";\nimport {\n findPackageJsonWithDep,\n resolveIuiProjectRoot,\n} from \"../utils/workspace.js\";\nimport * as ui from \"../utils/ui.js\";\n\nconst STATE_SCHEMA_VERSION = 1;\n\ntype LifecycleStatus = \"idle\" | \"running\" | \"complete\" | \"failed\";\ntype LifecyclePhase =\n | \"started\"\n | \"state-loaded\"\n | \"manifests-written\"\n | \"slot-files-written\"\n | \"integrity-verified\"\n | \"complete\";\n\ninterface RegistrationState {\n schemaVersion: number;\n status: LifecycleStatus;\n phase: LifecyclePhase;\n packageVersion: string | null;\n checksum: string | null;\n startedAt: string;\n updatedAt: string;\n completedAt?: string;\n attempts: number;\n lastError?: string;\n repairedIssues: string[];\n}\n\nexport interface SlotRegistryResult {\n status: \"skipped\" | \"valid\" | \"repaired\";\n packageVersion: string | null;\n repairedIssues: string[];\n}\n\nexport interface SlotRegistryOptions {\n cwd?: string;\n quiet?: boolean;\n repairInstall?: boolean;\n mode?: \"validate\" | \"repair\";\n}\n\nfunction statePath(cwd: string): string {\n return iuiCacheFile(cwd, \"slotState\");\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction checksumFor(components: ComponentManifest, slots: SlotManifest): string {\n return sha256(JSON.stringify({ components, slots }));\n}\n\nfunction backupCorruptFile(filePath: string): void {\n if (!fs.existsSync(filePath)) return;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n try {\n fs.moveSync(filePath, `${filePath}.corrupt-${stamp}`, { overwrite: false });\n } catch {\n /* best effort */\n }\n}\n\nfunction readJsonObject<T extends Record<string, unknown>>(\n filePath: string,\n fallback: T,\n issues: string[],\n label: string,\n): T {\n if (!fs.existsSync(filePath)) return fallback;\n try {\n const value = fs.readJsonSync(filePath) as unknown;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return value as T;\n }\n } catch {\n /* handled below */\n }\n backupCorruptFile(filePath);\n issues.push(`${label} was unreadable and has been rebuilt`);\n return fallback;\n}\n\nfunction readState(cwd: string, issues: string[]): RegistrationState | null {\n const filePath = statePath(cwd);\n if (!fs.existsSync(filePath)) return null;\n try {\n const raw = fs.readJsonSync(filePath) as Partial<RegistrationState>;\n if (raw.schemaVersion !== STATE_SCHEMA_VERSION) {\n issues.push(\"registration state schema was upgraded\");\n return null;\n }\n if (!raw.status || !raw.phase) {\n issues.push(\"registration state was incomplete\");\n return null;\n }\n return raw as RegistrationState;\n } catch {\n backupCorruptFile(filePath);\n issues.push(\"registration state was unreadable and has been rebuilt\");\n return null;\n }\n}\n\nfunction writeState(cwd: string, state: RegistrationState): void {\n atomicWriteJson(statePath(cwd), state);\n}\n\nfunction updateState(\n cwd: string,\n state: RegistrationState,\n phase: LifecyclePhase,\n patch: Partial<RegistrationState> = {},\n): RegistrationState {\n const next: RegistrationState = {\n ...state,\n ...patch,\n phase,\n updatedAt: now(),\n };\n writeState(cwd, next);\n return next;\n}\n\nfunction buildDesiredState(\n registry: ComponentPackageManifest,\n packageVersion: string,\n currentSlots: SlotManifest,\n packages: PackageManifest,\n): { components: ComponentManifest; slots: SlotManifest } {\n const components: ComponentManifest = {};\n const slots: SlotManifest = {};\n const timestamp = now();\n\n for (const item of registry.items) {\n components[item.name] = packageVersion;\n slots[item.name] = {\n component: item.name,\n slotType: \"component\",\n registeredAt: currentSlots[item.name]?.registeredAt ?? timestamp,\n version: packageVersion,\n };\n if (item.slots.length > 0) {\n slots[item.name].supportedSlots = [...item.slots].sort();\n }\n }\n\n for (const [packageId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) continue;\n const key = `asset:${packageId}`;\n slots[key] = {\n component: packageId,\n slotType: def.slotType,\n registeredAt: currentSlots[key]?.registeredAt ?? timestamp,\n version: meta.version,\n };\n }\n\n return { components, slots };\n}\n\nfunction hasManifestDrift(\n currentComponents: ComponentManifest,\n currentSlots: SlotManifest,\n desiredComponents: ComponentManifest,\n desiredSlots: SlotManifest,\n): boolean {\n return (\n JSON.stringify(currentComponents) !== JSON.stringify(desiredComponents) ||\n JSON.stringify(currentSlots) !== JSON.stringify(desiredSlots)\n );\n}\n\nexport function shouldSkipWritesFastPath(params: {\n mode: \"validate\" | \"repair\";\n previousState: RegistrationState | null;\n currentChecksum: string;\n currentPackageVersion: string;\n drift: boolean;\n integrityIssues: string[];\n}): boolean {\n const {\n mode,\n previousState,\n currentChecksum,\n currentPackageVersion,\n drift,\n integrityIssues,\n } = params;\n if (mode !== \"validate\") return false;\n if (!previousState) return false;\n if (previousState.status !== \"complete\") return false;\n if (previousState.checksum !== currentChecksum) return false;\n if (previousState.packageVersion !== currentPackageVersion) return false;\n if (drift) return false;\n if (integrityIssues.length > 0) return false;\n return true;\n}\n\nfunction ensureInstalledManifest(cwd: string, repairInstall: boolean): ComponentPackageManifest | null {\n let registry: ComponentPackageManifest | null = null;\n try {\n registry = readComponentPackageManifest(cwd);\n } catch (error) {\n if (!repairInstall) throw error;\n }\n if (registry) return registry;\n\n if (!repairInstall || !isPackageInDeps(COMPONENTS_PACKAGE, cwd)) {\n return null;\n }\n\n const pm = detectPackageManager(cwd);\n const installDir = findPackageJsonWithDep(COMPONENTS_PACKAGE, cwd)?.dir ?? resolveIuiProjectRoot(cwd);\n runSyncInstall(pm, installDir);\n registry = readComponentPackageManifest(cwd);\n return registry;\n}\n\nexport async function ensureSlotRegistry(\n options: SlotRegistryOptions = {},\n): Promise<SlotRegistryResult> {\n const cwd = options.cwd ?? process.cwd();\n const mode = options.mode ?? \"repair\";\n if (!isInsideProject(cwd)) {\n return { status: \"skipped\", packageVersion: null, repairedIssues: [] };\n }\n\n const iuiRoot = resolveIuiProjectRoot(cwd);\n\n return withRegistryLock(iuiRoot, async () => {\n const iuiPath = path.join(iuiRoot, IUI_DIR);\n const issues: string[] = [];\n cleanupTempFiles(iuiPath);\n\n const registry = ensureInstalledManifest(\n cwd,\n mode === \"repair\" && options.repairInstall === true,\n );\n if (!registry) {\n return { status: \"skipped\", packageVersion: null, repairedIssues: [] };\n }\n\n const packageVersion =\n getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd) ?? registry.version;\n const previousState = readState(iuiRoot, issues);\n let state: RegistrationState | null = null;\n\n try {\n const currentComponents = readJsonObject<ComponentManifest>(\n componentManifestPath(iuiRoot),\n {},\n issues,\n \".iui/components.json\",\n );\n const currentPackages = readJsonObject<PackageManifest>(\n packageManifestPath(iuiRoot),\n {},\n issues,\n \".iui/packages.json\",\n );\n const currentSlots = readJsonObject<SlotManifest>(\n slotManifestPath(iuiRoot),\n {},\n issues,\n \".iui/slots.json\",\n );\n const desired = buildDesiredState(\n registry,\n packageVersion,\n currentSlots,\n currentPackages,\n );\n const checksum = checksumFor(desired.components, desired.slots);\n\n if (previousState?.status === \"running\" || previousState?.status === \"failed\") {\n issues.push(\"interrupted registration was resumed\");\n }\n if (previousState?.checksum && previousState.checksum !== checksum) {\n issues.push(\"slot registry checksum changed\");\n }\n const driftDetected = hasManifestDrift(\n currentComponents,\n currentSlots,\n desired.components,\n desired.slots,\n );\n if (driftDetected) {\n issues.push(\"slot manifests drifted\");\n }\n\n const generationIssues = validateGeneratedSlotImports(iuiRoot);\n const assetBoundIssues = validateGeneratedAssetBoundImports(iuiRoot);\n const integrityIssues = [...generationIssues, ...assetBoundIssues];\n\n if (shouldSkipWritesFastPath({\n mode,\n previousState,\n currentChecksum: checksum,\n currentPackageVersion: packageVersion,\n drift: driftDetected,\n integrityIssues,\n })) {\n return {\n status: \"valid\",\n packageVersion,\n repairedIssues: [],\n };\n }\n\n if (mode === \"validate\") {\n if (integrityIssues.length > 0) {\n throw new CLIError(\n \"Slot registry integrity check failed.\",\n integrityIssues.map((issue) => `- ${issue}`).join(\"\\n\"),\n );\n }\n return {\n status: \"valid\",\n packageVersion,\n repairedIssues: issues,\n };\n }\n\n state = {\n schemaVersion: STATE_SCHEMA_VERSION,\n status: \"running\",\n phase: \"started\",\n packageVersion,\n checksum: previousState?.checksum ?? null,\n startedAt: now(),\n updatedAt: now(),\n attempts: (previousState?.attempts ?? 0) + 1,\n repairedIssues: issues,\n };\n writeState(iuiRoot, state);\n updateState(iuiRoot, state, \"state-loaded\");\n\n await retry(() => {\n writeComponentManifest(desired.components, iuiRoot);\n writePackageManifest(currentPackages, iuiRoot);\n writeSlotManifest(desired.slots, iuiRoot);\n });\n let next = updateState(iuiRoot, state, \"manifests-written\", {\n checksum,\n repairedIssues: issues,\n });\n\n await retry(async () => {\n writeComponentSlotFiles(iuiRoot);\n writeAssetsConfig(iuiRoot);\n ensureProjectConfig(iuiRoot);\n await writeAssetBoundFiles(iuiRoot);\n writeSlotHelperFile(iuiRoot);\n if (projectHasViteTooling(cwd)) {\n ensureInventiveUiViteConfig(cwd);\n }\n });\n bootstrapRegisteredPackages(iuiRoot);\n next = updateState(iuiRoot, next, \"slot-files-written\", { repairedIssues: issues });\n if (integrityIssues.length > 0) {\n throw new CLIError(\n \"Slot registry integrity check failed.\",\n integrityIssues.map((issue) => `- ${issue}`).join(\"\\n\"),\n );\n }\n\n next = updateState(iuiRoot, next, \"integrity-verified\", { repairedIssues: issues });\n updateState(iuiRoot, next, \"complete\", {\n status: \"complete\",\n completedAt: now(),\n lastError: undefined,\n repairedIssues: issues,\n });\n\n if (!options.quiet && issues.length > 0) {\n ui.ok(\"Slot registry repaired\");\n }\n\n return {\n status: issues.length > 0 ? \"repaired\" : \"valid\",\n packageVersion,\n repairedIssues: issues,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Slot registry update failed\";\n if (state) {\n updateState(iuiRoot, state, \"state-loaded\", {\n status: \"failed\",\n lastError: message,\n repairedIssues: issues,\n });\n }\n throw error;\n }\n });\n}\n","import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { iuiCacheFile } from \"./iui-paths.js\";\r\nimport { CLIError } from \"../utils/errors.js\";\r\n\r\nconst LOCK_STALE_MS = 2 * 60 * 1000;\r\nconst LOCK_RETRY_MS = 80;\r\nconst LOCK_TIMEOUT_MS = 10_000;\r\n\r\nexport interface RegistryLock {\r\n path: string;\r\n release: () => void;\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nfunction lockPath(cwd: string): string {\r\n return iuiCacheFile(cwd, \"slotLock\");\r\n}\r\n\r\nfunction readLockAge(filePath: string): number | null {\r\n try {\r\n const stat = fs.statSync(filePath);\r\n return Date.now() - stat.mtimeMs;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction removeStaleLock(filePath: string): void {\r\n const age = readLockAge(filePath);\r\n if (age === null || age < LOCK_STALE_MS) return;\r\n try {\r\n fs.unlinkSync(filePath);\r\n } catch {\r\n /* another process may have removed it */\r\n }\r\n}\r\n\r\nexport async function acquireRegistryLock(cwd: string): Promise<RegistryLock> {\r\n const filePath = lockPath(cwd);\r\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\r\n const started = Date.now();\r\n\r\n while (Date.now() - started < LOCK_TIMEOUT_MS) {\r\n removeStaleLock(filePath);\r\n try {\r\n const fd = fs.openSync(filePath, \"wx\", 0o600);\r\n fs.writeFileSync(\r\n fd,\r\n JSON.stringify({\r\n pid: process.pid,\r\n startedAt: new Date().toISOString(),\r\n cwd,\r\n }, null, 2),\r\n );\r\n fs.closeSync(fd);\r\n\r\n let released = false;\r\n const release = (): void => {\r\n if (released) return;\r\n released = true;\r\n try {\r\n fs.unlinkSync(filePath);\r\n } catch {\r\n /* best effort */\r\n }\r\n };\r\n\r\n return { path: filePath, release };\r\n } catch (error) {\r\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\r\n throw new CLIError(\r\n \"Could not prepare slot registry lock.\",\r\n \"Check permissions for the .iui directory and retry.\",\r\n );\r\n }\r\n await sleep(LOCK_RETRY_MS);\r\n }\r\n }\r\n\r\n throw new CLIError(\r\n \"Slot registry is busy.\",\r\n \"Another process is updating this project. Retry after it completes.\",\r\n );\r\n}\r\n\r\nexport async function withRegistryLock<T>(\r\n cwd: string,\r\n operation: () => Promise<T> | T,\r\n): Promise<T> {\r\n const lock = await acquireRegistryLock(cwd);\r\n const cleanup = (): void => lock.release();\r\n process.once(\"SIGINT\", cleanup);\r\n process.once(\"SIGTERM\", cleanup);\r\n\r\n try {\r\n return await operation();\r\n } finally {\r\n process.off(\"SIGINT\", cleanup);\r\n process.off(\"SIGTERM\", cleanup);\r\n lock.release();\r\n }\r\n}\r\n","// ─── Slot Service ────────────────────────────────────────────────────────────\n//\n// Responsible for:\n// 1. Building the local slot manifest (.iui/slots.json)\n// 2. Rebuilding the slot-registry file from installed package metadata\n// 3. Emitting managed slot internals under .iui/generated and a stable\n// compatibility bridge at src/iui/slot.tsx for app imports.\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n readSlotManifest,\n writeSlotManifest,\n readComponentManifest,\n readPackageManifest,\n readComponentPackageManifest,\n registryItemsMap,\n} from \"../utils/filesystem.js\";\nimport { ASSET_PACKAGES_MAP } from \"../constants.js\";\nimport {\n collectInstalledSlotEmitters,\n type SlotEmitter,\n} from \"../utils/slot-emitters.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport {\n assertComponentSlug,\n assertJsIdentifier,\n assertImportSpecifier,\n escapeTsStringLiteral,\n} from \"../utils/security/identifiers.js\";\nimport { resolveWithinRoot } from \"../utils/security/paths.js\";\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\nimport {\n relativeImportPath,\n} from \"../utils/workspace.js\";\nimport { hasAssetBoundRegistration } from \"./asset-bound.js\";\nimport {\n generatedIuiDir,\n generatedSlotsDir,\n iuiProjectRoot,\n} from \"./generated-paths.js\";\n\nconst SLOT_GROUP_CORE_FILE = \"slot-core.generated.tsx\";\nconst SLOT_GROUP_OPTIONAL_FILE = \"slot-optional.generated.tsx\";\n\nimport {\n contractEntryToBootstrapPolicy,\n loadPublicSlotContract,\n} from \"../utils/public-slot-contract.js\";\n\n// ── Full slot registry regeneration ─────────────────────────────────────────\n//\n// Scans currently installed components + asset packages and produces\n// a complete slots.json manifest so project metadata stays in sync.\n// Component slot types are read from the installed package manifest\n// (node_modules/@inventive-ui/components/iui-manifest.json).\n\nexport function regenerateSlotManifest(cwd?: string): { total: number } {\n const components = readComponentManifest(cwd);\n const packages = readPackageManifest(cwd);\n const manifest = readSlotManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd ?? process.cwd());\n const itemsLookup = registryItemsMap(pkgManifest);\n let added = 0;\n\n // ── Component slots ────────────────────────────────────────────────────\n for (const [slug, version] of Object.entries(components)) {\n const supported = itemsLookup[slug]?.slots ?? [];\n if (!manifest[slug]) {\n manifest[slug] = {\n component: slug,\n slotType: \"component\",\n registeredAt: new Date().toISOString(),\n version,\n };\n if (supported.length > 0) manifest[slug].supportedSlots = supported;\n added++;\n } else {\n manifest[slug].version = version;\n manifest[slug].supportedSlots = supported.length > 0 ? supported : undefined;\n }\n }\n\n // ── Asset package slots ────────────────────────────────────────────────\n for (const [pkgId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n if (!def) continue;\n const key = `asset:${pkgId}`;\n if (!manifest[key]) {\n manifest[key] = {\n component: pkgId,\n slotType: def.slotType,\n registeredAt: new Date().toISOString(),\n version: meta.version,\n };\n added++;\n } else {\n manifest[key].version = meta.version;\n }\n }\n\n // ── Prune slots for uninstalled items ──────────────────────────────────\n for (const key of Object.keys(manifest)) {\n if (key.startsWith(\"asset:\")) {\n const pkgId = key.replace(\"asset:\", \"\");\n if (!packages[pkgId]) { delete manifest[key]; }\n } else {\n if (!components[key]) { delete manifest[key]; }\n }\n }\n\n writeSlotManifest(manifest, cwd);\n return { total: Object.keys(manifest).length };\n}\n\n// ── Component slot files (.iui/generated/slots/*.slot.tsx) ───────────────────\n//\n// Generates slot registration files so components can be used as slots\n// (e.g. prefix={{ type: \"chip\", label: \"Tag\" }} in another component).\n\nfunction bridgeSlotFilePath(cwd: string): string {\n return path.join(cwd, \"src\", \"iui\", \"slot.tsx\");\n}\n\nfunction cleanupLegacySourceSlotFiles(cwd: string): void {\n const legacySlotsDir = path.join(cwd, \"src\", \"iui\", \"slots\");\n if (!fs.existsSync(legacySlotsDir)) return;\n\n try {\n const files = fs.readdirSync(legacySlotsDir);\n for (const file of files) {\n if (file.endsWith(\".slot.tsx\")) {\n fs.removeSync(path.join(legacySlotsDir, file));\n }\n }\n const remaining = fs.readdirSync(legacySlotsDir);\n if (remaining.length === 0) {\n fs.removeSync(legacySlotsDir);\n }\n } catch {\n // Non-fatal cleanup\n }\n}\n\ntype SlotBootstrapPolicy = \"core\" | \"optional\";\n\nfunction loadSlotBootstrapPolicy(cwd: string): Map<string, SlotBootstrapPolicy> {\n const policy = new Map<string, SlotBootstrapPolicy>();\n const contract = loadPublicSlotContract(cwd);\n if (!contract) return policy;\n\n for (const entry of contract.slots ?? []) {\n if (!entry?.type || !entry.public) continue;\n policy.set(entry.type, contractEntryToBootstrapPolicy(entry));\n }\n\n return policy;\n}\n\nexport function validateGeneratedSlotImports(cwd: string = process.cwd()): string[] {\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n if (!pkgManifest) {\n return [\"@inventive-ui/components manifest is missing from node_modules.\"];\n }\n\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.keys(components)\n .map((slug) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n\n const { issues } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n\n return issues.map((issue) => issue);\n}\n\nfunction renderGetComponentExpr(emitter: SlotEmitter): string {\n const access = emitter.lazyAccess.replace(/^\\./, \"\").trim();\n const parts = access.split(\".\").filter(Boolean);\n const compName = emitter.componentName;\n\n if (parts.length === 0) {\n return `resolveComponentExport(mod, ${JSON.stringify(compName)})`;\n }\n\n if (parts.length === 1) {\n const name = parts[0] === \"default\" ? compName : parts[0];\n assertJsIdentifier(name, \"component export\");\n return `resolveComponentExport(mod, ${JSON.stringify(name)})`;\n }\n\n const [root, ...rest] = parts;\n if (root !== \"default\") {\n assertJsIdentifier(root, \"component export\");\n }\n for (const part of rest) {\n assertJsIdentifier(part, \"component export member\");\n }\n const rootExpr =\n root === \"default\"\n ? \"resolveComponentExport(mod, \" + JSON.stringify(compName) + \")\"\n : `resolveComponentExport(mod, ${JSON.stringify(root)})`;\n return `${rootExpr}?.${rest.join(\".\")}`;\n}\n\n/**\n * Component-as-slot file template — matches components-updated\n * `scripts/add-slots/template.js` (createEagerComponent, no React.lazy/Suspense).\n */\nexport function renderSlotFileContent(emitter: SlotEmitter): string {\n const compName = emitter.componentName;\n const propsTypeName = emitter.propsName;\n const needsComponentProps = propsTypeName === \"Props\";\n const slotTypeDef = needsComponentProps\n ? `ComponentProps<typeof ${compName}Type>`\n : propsTypeName;\n const slotPropsType = `Omit<${slotTypeDef}, \"type\">`;\n const slotName = emitter.type;\n const slotNameLit = escapeTsStringLiteral(slotName);\n const importLit = escapeTsStringLiteral(emitter.importSpecifier);\n const lazyImportLit = escapeTsStringLiteral(emitter.lazyImportSpecifier);\n const getComponentExpr = renderGetComponentExpr(emitter);\n\n const typeImport = needsComponentProps\n ? `import type { ComponentProps } from \"react\";\nimport type { ${compName} as ${compName}Type } from ${importLit};`\n : `import type { ${propsTypeName} } from ${importLit};`;\n\n return `// Managed by iui. Do not edit manually.\nimport React from \"react\";\nimport {\n registerSlot,\n createEagerComponent,\n resolveComponentExport,\n} from \"@inventive-ui/framework/slots\";\n${typeImport}\n\n/**\n * Slot type for ${compName}\n */\nexport type ${compName}Slot = {\n type: \"${slotName}\";\n} & Omit<${slotTypeDef}, \"type\">;\n\ndeclare module \"@inventive-ui/framework/slots\" {\n interface SlotMap {\n \"${slotName}\": ${compName}Slot;\n }\n}\n\nconst Comp = createEagerComponent<${slotPropsType}>(\n () => import(${lazyImportLit}),\n (mod) =>\n ${getComponentExpr} as React.ComponentType<${slotPropsType}>,\n);\n\nregisterSlot(${slotNameLit}, (slot) => {\n const { type, ...props } = slot;\n return <Comp {...props} />;\n});\n`;\n}\n\nexport function writeComponentSlotFiles(cwd: string = process.cwd()): void {\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n const slotsDir = generatedSlotsDir(cwd);\n const generationIssues: string[] = [];\n\n cleanupLegacySourceSlotFiles(cwd);\n\n if (Object.keys(components).length === 0) {\n // Only remove stale slot files; don't create dirs when no components\n if (fs.existsSync(slotsDir)) {\n const existingSlots = fs.readdirSync(slotsDir).filter((f) => f.endsWith(\".slot.tsx\"));\n for (const file of existingSlots) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n }\n }\n return;\n }\n\n fs.ensureDirSync(slotsDir);\n\n\n if (!pkgManifest) return;\n\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.entries(components)\n .map(([slug]) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n\n const { emitters, issues: emitterIssues } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n generationIssues.push(...emitterIssues.map((issue) => `- ${issue}`));\n\n const slotPolicy = loadSlotBootstrapPolicy(cwd);\n const coreEmitters: SlotEmitter[] = [];\n const optionalEmitters: SlotEmitter[] = [];\n\n for (const emitter of emitters) {\n assertComponentSlug(emitter.type);\n assertJsIdentifier(emitter.componentName, \"component export\");\n if (emitter.propsName !== \"Props\") assertJsIdentifier(emitter.propsName, \"props type\");\n assertImportSpecifier(emitter.importSpecifier);\n assertImportSpecifier(emitter.lazyImportSpecifier);\n const policy = slotPolicy.get(emitter.type) ?? \"optional\";\n if (policy === \"core\") coreEmitters.push(emitter);\n else optionalEmitters.push(emitter);\n }\n\n const root = iuiProjectRoot(cwd);\n const renderedGroups: Array<{ fileName: string; emitters: SlotEmitter[] }> = [\n { fileName: SLOT_GROUP_CORE_FILE, emitters: coreEmitters },\n { fileName: SLOT_GROUP_OPTIONAL_FILE, emitters: optionalEmitters },\n ];\n for (const group of renderedGroups) {\n const outPath = resolveWithinRoot(root, \".iui\", \"generated\", \"slots\", group.fileName);\n if (group.emitters.length === 0) {\n if (fs.existsSync(outPath)) fs.removeSync(outPath);\n continue;\n }\n safeWriteFile(\n outPath,\n renderGroupedSlotFileContent(group.emitters, {\n prefetch: group.fileName === SLOT_GROUP_CORE_FILE,\n }),\n );\n }\n\n // Remove stale slot files from legacy per-slot generation.\n const existingSlots = fs.existsSync(slotsDir)\n ? fs.readdirSync(slotsDir).filter((f) => f.endsWith(\".slot.tsx\") || f.endsWith(\".generated.tsx\"))\n : [];\n for (const file of existingSlots) {\n if (file === SLOT_GROUP_CORE_FILE || file === SLOT_GROUP_OPTIONAL_FILE) continue;\n if (file.endsWith(\".slot.tsx\")) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n continue;\n }\n if (file.endsWith(\".generated.tsx\")) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n }\n }\n\n if (generationIssues.length > 0) {\n throw new CLIError(\n [\n \"Component public slot contract mismatch while generating slot files:\",\n ...generationIssues,\n ].join(\"\\n\"),\n \"Reinstall @inventive-ui/components and run iui doctor to repair the slot registry.\",\n );\n }\n}\n\nfunction renderGroupedSlotFileContent(\n emitters: SlotEmitter[],\n options: { prefetch?: boolean } = {},\n): string {\n const needsComponentProps = emitters.some((emitter) => emitter.propsName === \"Props\");\n const lines: string[] = [\n \"// Managed by iui. Do not edit manually.\",\n 'import React from \"react\";',\n 'import { registerSlot, createEagerComponent, resolveComponentExport } from \"@inventive-ui/framework/slots\";',\n ];\n if (needsComponentProps) {\n lines.push('import type { ComponentProps } from \"react\";');\n }\n lines.push(\"\");\n\n const imports = new Set<string>();\n\n let idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n if (emitter.propsName === \"Props\") {\n imports.add(\n `import type { ${emitter.componentName} as ${alias}Type } from \"${emitter.importSpecifier}\";`,\n );\n } else {\n imports.add(`import type { ${emitter.propsName} } from \"${emitter.importSpecifier}\";`);\n }\n }\n lines.push(...[...imports].sort(), \"\");\n\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n const slotType = emitter.propsName === \"Props\"\n ? `ComponentProps<typeof ${alias}Type>`\n : emitter.propsName;\n lines.push(`type ${alias}Slot = { type: \"${emitter.type}\" } & Omit<${slotType}, \"type\">;`);\n lines.push(`type ${alias}SlotProps = Omit<${alias}Slot, \"type\">;`);\n }\n\n lines.push(\"\", 'declare module \"@inventive-ui/framework/slots\" {', \" interface SlotMap {\");\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n lines.push(` \"${emitter.type}\": Comp${idx}Slot;`);\n }\n lines.push(\" }\", \"}\", \"\");\n\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n const renderer = `${alias}Renderer`;\n lines.push(`const ${renderer} = createEagerComponent<${alias}SlotProps>(`);\n lines.push(` () => import(${escapeTsStringLiteral(emitter.lazyImportSpecifier)}),`);\n lines.push(` (mod) => ${renderGetComponentExpr(emitter)} as React.ComponentType<${alias}SlotProps>,`);\n if (options.prefetch) {\n lines.push(\" { prefetch: true },\");\n }\n lines.push(\");\", \"\");\n lines.push(`registerSlot(${escapeTsStringLiteral(emitter.type)}, (slot) => {`);\n lines.push(\" const { type, ...props } = slot;\");\n lines.push(` return <${renderer} {...props} />;`);\n lines.push(\"});\", \"\");\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n// ── Slot helper codegen (.iui/generated + src/iui bridge) ───────────────────\n//\n// Generates a small helper file that:\n// - Re-exports SlotRenderer / useSlotRenderer from the framework\n// - Imports component slot files (for registration); asset packages stay lazy\n// - Exposes a typed union of slot types based on .iui/slots.json\n\nexport function writeSlotHelperFile(cwd: string = process.cwd()): void {\n const manifest = readSlotManifest(cwd);\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n const slotTypes = new Set<string>();\n\n for (const record of Object.values(manifest)) {\n if (record.slotType && record.slotType !== \"component\") {\n slotTypes.add(record.slotType);\n }\n if (Array.isArray(record.supportedSlots)) {\n for (const t of record.supportedSlots) slotTypes.add(t);\n }\n }\n\n let emitterSlotTypes: string[] = [];\n if (pkgManifest) {\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.keys(components)\n .map((slug) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n const { emitters } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n emitterSlotTypes = emitters.map((emitter) => emitter.type);\n for (const type of emitterSlotTypes) slotTypes.add(type);\n } else {\n for (const slug of Object.keys(components)) slotTypes.add(slug);\n }\n\n const typesArray = Array.from(slotTypes).sort();\n\n const slotImports: string[] = [];\n const coreSlotsPath = path.join(generatedSlotsDir(cwd), SLOT_GROUP_CORE_FILE);\n const optionalSlotsPath = path.join(generatedSlotsDir(cwd), SLOT_GROUP_OPTIONAL_FILE);\n if (fs.existsSync(coreSlotsPath)) slotImports.push(`import \"./slots/${SLOT_GROUP_CORE_FILE.replace(/\\.tsx$/, \"\")}\";`);\n if (fs.existsSync(optionalSlotsPath)) slotImports.push(`import \"./slots/${SLOT_GROUP_OPTIONAL_FILE.replace(/\\.tsx$/, \"\")}\";`);\n const componentSlotImports = slotImports.join(\"\\n\");\n\n const includeAssetBindings = hasAssetBoundRegistration(cwd);\n\n const outDir = generatedIuiDir(cwd);\n fs.ensureDirSync(outDir);\n const outPath = path.join(outDir, \"slot.generated.tsx\");\n\n const sections: string[] = [\n `// Managed by iui. Do not edit manually.`,\n `// Rebuilt automatically when the CLI validates the project.`,\n ];\n\n // Asset packages stay lazy in Framework unless CLI generated bound static imports.\n if (includeAssetBindings) {\n sections.push(\"\");\n sections.push(\"// Scanned asset bindings (static glyph imports)\");\n sections.push(`import \"./assets/register-bound\";`);\n }\n\n if (componentSlotImports) {\n sections.push(\"\");\n sections.push(\"// Component slot registrations\");\n sections.push(componentSlotImports);\n }\n\n sections.push(\"\");\n sections.push(`// Framework slot system — flag, icon, loader, etc. registrations run as side effects`);\n sections.push(`// when @inventive-ui/framework is first imported. No explicit registration needed here.`);\n sections.push(`import { SlotRenderer, useSlotRenderer } from \"@inventive-ui/framework/slots\";`);\n sections.push(`import slotManifest from \"../slots.json\";`);\n sections.push(\"\");\n sections.push(\n typesArray.length > 0\n ? `export type IUISlotType =\\n${typesArray.map((t) => ` | \"${t}\"`).join(\"\\n\")};`\n : `export type IUISlotType = never;`,\n );\n sections.push(\"\");\n sections.push(`export { SlotRenderer, useSlotRenderer };`);\n sections.push(\"\");\n sections.push(`export const slots = slotManifest;`);\n sections.push(\"\");\n\n const content = sections.join(\"\\n\");\n\n safeWriteFile(outPath, content);\n}\n\n/** Stable app import path that re-exports the generated slot registry at the IUI root. */\nexport function writeSlotBridge(packageDir: string, iuiRoot: string): void {\n const bridgePath = bridgeSlotFilePath(packageDir);\n const generatedFile = path.join(iuiRoot, \".iui\", \"generated\", \"slot.generated.tsx\");\n const importBase = relativeImportPath(path.dirname(bridgePath), generatedFile);\n\n fs.ensureDirSync(path.dirname(bridgePath));\n if (fs.existsSync(bridgePath)) {\n const existing = fs.readFileSync(bridgePath, \"utf-8\");\n if (existing.length > 0 && !/@iui-managed/.test(existing)) {\n return;\n }\n }\n\n const bridgeContent = `// Managed by iui. Do not edit manually.\n// @iui-managed\n// Compatibility bridge: keep project imports stable at src/iui/slot.tsx.\n\nexport { SlotRenderer, useSlotRenderer, slots } from \"${importBase}\";\nexport type { IUISlotType } from \"${importBase}\";\n`;\n safeWriteFile(bridgePath, bridgeContent);\n cleanupLegacySourceSlotFiles(packageDir);\n}\n\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\nexport interface PublicSlotContractEntry {\n type: string;\n parent: string;\n import: string;\n lazyImport?: string;\n props: string;\n lazyAccess: string;\n component?: string;\n bootstrap: \"sync\" | \"lazy\";\n profile: string[];\n public: boolean;\n}\n\nexport interface PublicSlotContract {\n version: string;\n slots: PublicSlotContractEntry[];\n}\n\nconst CONTRACT_FILENAME = \"public-slot-contract.json\";\n\nexport function loadPublicSlotContract(\n cwd: string = process.cwd(),\n): PublicSlotContract | null {\n const pkgRoot = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!pkgRoot) return null;\n\n const contractPath = path.join(pkgRoot, CONTRACT_FILENAME);\n if (!fs.existsSync(contractPath)) return null;\n\n try {\n return fs.readJsonSync(contractPath) as PublicSlotContract;\n } catch {\n return null;\n }\n}\n\nexport function contractEntryToBootstrapPolicy(\n entry: PublicSlotContractEntry,\n): \"core\" | \"optional\" {\n if (\n entry.bootstrap === \"sync\"\n || (Array.isArray(entry.profile) && entry.profile.includes(\"critical\"))\n ) {\n return \"core\";\n }\n return \"optional\";\n}\n","import type { RegistryItem } from \"../types.js\";\nimport type { PublicSlotContractEntry } from \"./public-slot-contract.js\";\nimport { loadPublicSlotContract } from \"./public-slot-contract.js\";\n\n/** Extra slot type strings that share the same renderer as a registry component. */\nexport const SLOT_TYPE_ALIASES: Record<string, string[]> = {\n infotip: [\"info-tip\"],\n};\n\nexport interface SlotEmitter {\n /** Slot discriminator used by SlotRenderer / registerSlot. */\n type: string;\n /** Registry item slug that owns this emitter. */\n parentSlug: string;\n componentName: string;\n propsName: string;\n importSpecifier: string;\n lazyImportSpecifier: string;\n lazyAccess: string;\n}\n\nfunction contractEntryToEmitter(entry: PublicSlotContractEntry): SlotEmitter {\n const lazyAccess = entry.lazyAccess.startsWith(\".\")\n ? entry.lazyAccess\n : `.${entry.lazyAccess}`;\n\n return {\n type: entry.type,\n parentSlug: entry.parent,\n componentName: entry.component ?? entry.type,\n propsName: entry.props,\n importSpecifier: entry.import,\n lazyImportSpecifier: entry.lazyImport ?? entry.import,\n lazyAccess,\n };\n}\n\nfunction isContractEntryInstalled(\n entry: PublicSlotContractEntry,\n installedSlugs: Set<string>,\n): boolean {\n if (!entry.public) return false;\n if (installedSlugs.has(entry.type)) return true;\n if (installedSlugs.has(entry.parent)) return true;\n return false;\n}\n\nexport function collectInstalledSlotEmitters(\n items: RegistryItem[],\n installedSlugs: Set<string>,\n cwd: string = process.cwd(),\n): { emitters: SlotEmitter[]; issues: string[] } {\n const contract = loadPublicSlotContract(cwd);\n if (!contract) {\n return {\n emitters: [],\n issues: [\n \"@inventive-ui/components/public-slot-contract.json is missing from node_modules.\",\n ],\n };\n }\n\n const issues: string[] = [];\n const emitters: SlotEmitter[] = [];\n const registrySlugs = new Set(items.map((item) => item.name));\n\n for (const slug of installedSlugs) {\n if (!registrySlugs.has(slug)) continue;\n const hasPrimary = contract.slots.some(\n (entry) => entry.public && entry.type === slug,\n );\n if (!hasPrimary) {\n issues.push(`${slug}: no public slot contract entry for primary type \"${slug}\"`);\n }\n }\n\n for (const entry of contract.slots) {\n if (!isContractEntryInstalled(entry, installedSlugs)) continue;\n if (!entry.props || !entry.lazyAccess || !entry.import) {\n issues.push(`${entry.type}: incomplete public slot contract entry`);\n continue;\n }\n emitters.push(contractEntryToEmitter(entry));\n }\n\n const deduped = new Map<string, SlotEmitter>();\n for (const emitter of emitters) {\n if (!deduped.has(emitter.type)) {\n deduped.set(emitter.type, emitter);\n }\n }\n\n return {\n emitters: [...deduped.values()].sort((a, b) => a.type.localeCompare(b.type)),\n issues,\n };\n}\n\nexport function collectSlotEmitters(\n item: RegistryItem,\n cwd: string = process.cwd(),\n): { emitters: SlotEmitter[]; issues: string[] } {\n return collectInstalledSlotEmitters([item], new Set([item.name]), cwd);\n}\n","// ─── Safe path writes (reject symlinks on sensitive paths) ─────────────────\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { CLIError } from \"../errors.js\";\r\nimport { atomicWriteFile } from \"../atomic.js\";\r\n\r\nexport function assertNotSymlink(filePath: string, label: string): void {\r\n try {\r\n const stat = fs.lstatSync(filePath);\r\n if (stat.isSymbolicLink()) {\r\n throw new CLIError(`Refusing to use symlinked ${label}: ${filePath}`);\r\n }\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return;\r\n if (err instanceof CLIError) throw err;\r\n throw new CLIError(`Cannot verify ${label} path: ${filePath}`);\r\n }\r\n}\r\n\r\nexport function safeWriteFile(filePath: string, content: string): void {\r\n const dir = path.dirname(filePath);\r\n if (fs.existsSync(dir)) {\r\n assertNotSymlink(dir, \"directory\");\r\n }\r\n const parent = path.dirname(filePath);\r\n fs.mkdirSync(parent, { recursive: true });\r\n if (fs.existsSync(filePath)) {\r\n assertNotSymlink(filePath, \"file\");\r\n }\r\n atomicWriteFile(filePath, content);\r\n}\r\n","// ─── Bound asset slot codegen (.iui/generated/assets/) ───────────────────────\n//\n// Generates static glyph imports for scanned assets so Framework slots render\n// synchronously on first paint when `binding: \"scanned\"`.\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\nimport { resolveWithinRoot } from \"../utils/security/paths.js\";\nimport { generatedAssetsDir, iuiProjectRoot } from \"./generated-paths.js\";\nimport {\n resolveDependencyInstallRoot,\n resolvePackageDir,\n} from \"../utils/workspace.js\";\n\nconst LIBRARY_TO_PKG: Record<string, string> = {\n lucide: \"icons-lucide\",\n phosphor: \"icons-phosphor\",\n material: \"icons-material\",\n \"material-icons\": \"icons-material\",\n materialSymbols: \"material-symbols\",\n \"material-symbols\": \"material-symbols\",\n};\n\nconst PKG_LOOKUP_PREFIX: Record<string, string> = {\n \"icons-lucide\": \"icons/\",\n \"icons-phosphor\": \"icons/\",\n \"icons-material\": \"icons/\",\n \"material-symbols\": \"icons/\",\n logos: \"logos/\",\n \"color-logos\": \"logos/\",\n flags: \"flags/\",\n \"file-types\": \"types/\",\n loaders: \"loaders/\",\n illustrations: \"\",\n};\n\nconst BOUND_SPECS = [\n {\n slotType: \"icon\",\n fileName: \"icons.bound.ts\",\n exportName: \"BOUND_ICONS\",\n packages: new Set([\n \"material-symbols\",\n \"icons-lucide\",\n \"icons-phosphor\",\n \"icons-material\",\n ]),\n filterByDefaultIconLibrary: true,\n },\n {\n slotType: \"logo\",\n fileName: \"logos.bound.ts\",\n exportName: \"BOUND_LOGOS\",\n packages: new Set([\"logos\"]),\n },\n {\n slotType: \"color-logo\",\n fileName: \"color-logos.bound.ts\",\n exportName: \"BOUND_COLOR_LOGOS\",\n packages: new Set([\"color-logos\"]),\n },\n {\n slotType: \"flag\",\n fileName: \"flags.bound.ts\",\n exportName: \"BOUND_FLAGS\",\n packages: new Set([\"flags\"]),\n },\n {\n slotType: \"file-type\",\n fileName: \"file-types.bound.ts\",\n exportName: \"BOUND_FILE_TYPES\",\n packages: new Set([\"file-types\"]),\n },\n {\n slotType: \"loader\",\n fileName: \"loaders.bound.ts\",\n exportName: \"BOUND_LOADERS\",\n packages: new Set([\"loaders\"]),\n },\n {\n slotType: \"illustration\",\n fileName: \"illustrations.bound.ts\",\n exportName: \"BOUND_ILLUSTRATIONS\",\n packages: new Set([\"illustrations\"]),\n },\n] as const;\n\nfunction isAssetPackageInstalled(cwd: string, pkgId: string): boolean {\n return resolvePackageDir(`@inventive-ui/${pkgId}`, cwd) !== null;\n}\n\nconst DEFAULT_SCAN = {\n scanDirs: [\"src\", \".storybook\", \"stories\", \".iui\"],\n include: [\n \"**/*.stories.*\",\n \"**/*.mdx\",\n \"**/src/**/*.tsx\",\n \"**/src/**/*.ts\",\n \"**/src/**/*.jsx\",\n \"**/src/**/*.js\",\n \"**/.storybook/**/*.tsx\",\n \"**/.storybook/**/*.ts\",\n \"**/.storybook/**/*.jsx\",\n \"**/.storybook/**/*.js\",\n ],\n exclude: [\"**/*.test.*\", \"**/*.spec.*\"],\n};\n\ntype ScanUtils = {\n scanUsedSlotAssets: (\n viteRoot: string,\n options?: Record<string, unknown>,\n ) => Map<string, Set<string>>;\n lookupKeyToModuleId: (pkg: string, lookupKey: string) => string;\n readDefaultIconLibraryFromConfig: (viteRoot: string) => string;\n isScannedAssetBindingEnabled: (viteRoot: string, slotType: string) => boolean;\n};\n\nfunction resolveFrameworkModule(cwd: string, relativePath: string): string | null {\n const searchRoots = new Set<string>();\n for (const candidate of [\n resolveDependencyInstallRoot(cwd),\n path.resolve(cwd),\n iuiProjectRoot(cwd),\n ]) {\n searchRoots.add(path.resolve(candidate));\n }\n\n for (const start of searchRoots) {\n const frameworkDir = resolvePackageDir(\"@inventive-ui/framework\", start);\n if (!frameworkDir) continue;\n const installed = path.join(frameworkDir, relativePath);\n if (fs.existsSync(installed)) return installed;\n }\n\n // Local monorepo dev layout (Framework sibling to app packages).\n const root = iuiProjectRoot(cwd);\n for (const candidate of [\n path.join(root, \"..\", \"Framework\", relativePath),\n path.join(root, \"..\", \"..\", \"Framework\", relativePath),\n ]) {\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\nasync function loadScanUtils(cwd: string): Promise<ScanUtils> {\n const scanPath = resolveFrameworkModule(\n cwd,\n \"integrations/vite/scan-used-slot-assets.mjs\",\n );\n const resolvePath = resolveFrameworkModule(\n cwd,\n \"integrations/shared/resolve-scanned-icon-name.mjs\",\n );\n\n if (!scanPath || !resolvePath) {\n const installRoot = resolveDependencyInstallRoot(cwd);\n const frameworkDir = resolvePackageDir(\"@inventive-ui/framework\", installRoot);\n const hint =\n frameworkDir && !scanPath\n ? \"Update @inventive-ui/framework to the latest version (iui update) — scan utilities require a current Framework release.\"\n : \"Install @inventive-ui/framework and run iui doctor again.\";\n throw new CLIError(\"Could not load Framework scan utilities.\", hint);\n }\n\n const scanMod = await import(pathToFileURL(scanPath).href);\n const resolveMod = await import(pathToFileURL(resolvePath).href);\n return { ...scanMod, ...resolveMod } as ScanUtils;\n}\n\nfunction lookupKeyToGlyphKey(pkg: string, lookupKey: string): string {\n let subpath = lookupKey.replace(/^\\.\\//, \"\").replace(/\\.js$/, \"\");\n if (pkg === \"illustrations\") {\n return subpath;\n }\n const prefix = PKG_LOOKUP_PREFIX[pkg];\n if (prefix && subpath.startsWith(prefix)) {\n subpath = subpath.slice(prefix.length);\n }\n return subpath;\n}\n\nfunction glyphToIdentifier(name: string, used: Set<string>): string {\n let base = name\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n\n if (!base || !/^[A-Za-z_$]/.test(base)) {\n base = `Glyph${base}`;\n }\n\n let id = base;\n let suffix = 2;\n while (used.has(id)) {\n id = `${base}${suffix++}`;\n }\n used.add(id);\n return id;\n}\n\nfunction resolveIconPkg(library: string): string | null {\n return LIBRARY_TO_PKG[library] ?? library;\n}\n\nfunction buildBoundFileContent(\n exportName: string,\n entries: Array<{ key: string; moduleId: string; identifier: string }>,\n): string {\n const lines = [\n \"// Managed by iui. Do not edit manually.\",\n \"// Static glyph bindings for scanned assets (`binding: \\\"scanned\\\"`).\",\n \"\",\n 'import type { ComponentType } from \"react\";',\n ];\n\n for (const entry of entries) {\n lines.push(`import ${entry.identifier} from \"${entry.moduleId}\";`);\n }\n\n lines.push(\"\");\n lines.push(\n `export const ${exportName}: Record<string, ComponentType<Record<string, unknown>>> = {`,\n );\n\n for (const entry of entries) {\n lines.push(` ${JSON.stringify(entry.key)}: ${entry.identifier},`);\n }\n\n lines.push(\"};\");\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nfunction cleanupAssetBoundFiles(cwd: string): void {\n const assetsDir = generatedAssetsDir(cwd);\n if (!fs.existsSync(assetsDir)) return;\n\n for (const file of fs.readdirSync(assetsDir)) {\n if (file.endsWith(\".bound.ts\") || file === \"register-bound.ts\") {\n fs.removeSync(path.join(assetsDir, file));\n }\n }\n\n const remaining = fs.readdirSync(assetsDir);\n if (remaining.length === 0) {\n fs.removeSync(assetsDir);\n }\n}\n\nexport function hasAssetBoundRegistration(cwd: string): boolean {\n return fs.existsSync(path.join(generatedAssetsDir(cwd), \"register-bound.ts\"));\n}\n\nexport async function writeAssetBoundFiles(cwd: string = process.cwd()): Promise<void> {\n const root = iuiProjectRoot(cwd);\n const scanUtils = await loadScanUtils(cwd);\n const activeSpecs = BOUND_SPECS.filter((spec) =>\n scanUtils.isScannedAssetBindingEnabled(root, spec.slotType),\n );\n\n if (activeSpecs.length === 0) {\n cleanupAssetBoundFiles(root);\n return;\n }\n\n const registry = scanUtils.scanUsedSlotAssets(root, DEFAULT_SCAN);\n const defaultIconLibrary = scanUtils.readDefaultIconLibraryFromConfig(root);\n const defaultIconPkg = resolveIconPkg(defaultIconLibrary);\n const assetsDir = generatedAssetsDir(root);\n fs.ensureDirSync(assetsDir);\n\n const generatedFiles = new Set<string>();\n const registrationSpecs: Array<{\n slotType: string;\n exportName: string;\n fileName: string;\n }> = [];\n\n for (const spec of activeSpecs) {\n const entries: Array<{ key: string; moduleId: string; identifier: string }> =\n [];\n const usedIdentifiers = new Set<string>();\n\n for (const [pkg, keys] of registry.entries()) {\n if (!spec.packages.has(pkg)) continue;\n if (\n \"filterByDefaultIconLibrary\" in spec &&\n spec.filterByDefaultIconLibrary &&\n pkg !== defaultIconPkg\n ) {\n continue;\n }\n if (!isAssetPackageInstalled(cwd, pkg)) continue;\n\n for (const lookupKey of keys) {\n const key = lookupKeyToGlyphKey(pkg, lookupKey);\n const moduleId = scanUtils.lookupKeyToModuleId(pkg, lookupKey);\n const identifier = glyphToIdentifier(key, usedIdentifiers);\n if (entries.some((entry) => entry.key === key)) continue;\n entries.push({ key, moduleId, identifier });\n }\n }\n\n entries.sort((a, b) => a.key.localeCompare(b.key));\n\n if (entries.length === 0) {\n continue;\n }\n\n const content = buildBoundFileContent(spec.exportName, entries);\n const outPath = resolveWithinRoot(\n root,\n \".iui\",\n \"generated\",\n \"assets\",\n spec.fileName,\n );\n safeWriteFile(outPath, content);\n generatedFiles.add(spec.fileName);\n registrationSpecs.push({\n slotType: spec.slotType,\n exportName: spec.exportName,\n fileName: spec.fileName,\n });\n }\n\n const existing = fs.existsSync(assetsDir)\n ? fs.readdirSync(assetsDir).filter((f) => f.endsWith(\".bound.ts\"))\n : [];\n for (const file of existing) {\n if (!generatedFiles.has(file)) {\n fs.removeSync(path.join(assetsDir, file));\n }\n }\n\n if (registrationSpecs.length === 0) {\n cleanupAssetBoundFiles(root);\n return;\n }\n\n const registerLines = [\n \"// Managed by iui. Do not edit manually.\",\n \"\",\n 'import { registerBoundAssetComponents } from \"@inventive-ui/framework/slots\";',\n ];\n\n for (const spec of registrationSpecs) {\n registerLines.push(\n `import { ${spec.exportName} } from \"./${spec.fileName.replace(/\\.ts$/, \"\")}\";`,\n );\n }\n\n registerLines.push(\"\");\n for (const spec of registrationSpecs) {\n registerLines.push(\n `registerBoundAssetComponents(${JSON.stringify(spec.slotType)}, ${spec.exportName});`,\n );\n }\n registerLines.push(\"\");\n\n safeWriteFile(\n resolveWithinRoot(root, \".iui\", \"generated\", \"assets\", \"register-bound.ts\"),\n registerLines.join(\"\\n\"),\n );\n}\n\nfunction assetModuleCandidates(pkgRoot: string, moduleId: string): string[] {\n const pkgName = moduleId.split(\"/\").slice(0, 2).join(\"/\");\n const subpath = moduleId.slice(pkgName.length + 1);\n const pkgId = pkgName.replace(\"@inventive-ui/\", \"\");\n\n if (!subpath || subpath.includes(\"..\")) return [];\n\n if (pkgId === \"loaders\") {\n return [path.join(pkgRoot, \"dist\", \"loaders\", `${subpath}.js`)];\n }\n\n if (pkgId === \"illustrations\") {\n const [family, scene] = subpath.split(\"/\");\n if (family && scene) {\n return [path.join(pkgRoot, \"dist\", family, `${scene}.js`)];\n }\n return [path.join(pkgRoot, \"dist\", `${subpath}.js`)];\n }\n\n const prefix = PKG_LOOKUP_PREFIX[pkgId];\n if (prefix) {\n const dir = prefix.replace(/\\/$/, \"\");\n return [\n path.join(pkgRoot, \"dist\", dir, `${subpath}.js`),\n path.join(pkgRoot, \"dist\", `${subpath}.js`),\n path.join(pkgRoot, \"dist\", subpath, \"index.js\"),\n ];\n }\n\n return [\n path.join(pkgRoot, \"dist\", `${subpath}.js`),\n path.join(pkgRoot, \"dist\", subpath, \"index.js\"),\n ];\n}\n\nexport function validateGeneratedAssetBoundImports(\n cwd: string = process.cwd(),\n): string[] {\n const assetsDir = generatedAssetsDir(cwd);\n if (!fs.existsSync(assetsDir)) return [];\n\n const issues: string[] = [];\n const boundFiles = fs\n .readdirSync(assetsDir)\n .filter((file) => file.endsWith(\".bound.ts\"));\n\n for (const file of boundFiles) {\n const content = fs.readFileSync(path.join(assetsDir, file), \"utf8\");\n const importRe = /from\\s+[\"'](@inventive-ui\\/[^\"']+)[\"']/g;\n let match: RegExpExecArray | null;\n while ((match = importRe.exec(content)) !== null) {\n const moduleId = match[1];\n const pkgName = moduleId.split(\"/\").slice(0, 2).join(\"/\");\n const pkgRoot = resolvePackageDir(pkgName, cwd);\n if (!pkgRoot) {\n issues.push(`${file}: missing asset package ${pkgName}`);\n continue;\n }\n const candidates = assetModuleCandidates(pkgRoot, moduleId);\n if (!candidates.some((candidate) => fs.existsSync(candidate))) {\n issues.push(`${file}: missing asset module ${moduleId}`);\n }\n }\n }\n\n return issues;\n}\n","// Shared `.iui/generated` layout used by component slots and asset bindings.\n\nimport path from \"node:path\";\nimport { resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\n/** IUI metadata root for the current package (same as component slot codegen). */\nexport function iuiProjectRoot(cwd: string): string {\n return resolveIuiProjectRoot(cwd);\n}\n\nexport function generatedIuiDir(cwd: string): string {\n return path.join(iuiProjectRoot(cwd), \".iui\", \"generated\");\n}\n\nexport function generatedSlotsDir(cwd: string): string {\n return path.join(generatedIuiDir(cwd), \"slots\");\n}\n\nexport function generatedAssetsDir(cwd: string): string {\n return path.join(generatedIuiDir(cwd), \"assets\");\n}\n","// ─── Monorepo workspace bootstrap ────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport {\n findWorkspaceRoot,\n listWorkspacePackageDirs,\n resolveIuiProjectRoot,\n} from \"../utils/workspace.js\";\nimport { ensureProjectNpmrc } from \"../utils/filesystem.js\";\nimport { writeSlotBridge } from \"./slots.js\";\nimport { writeProjectBootstrapArtifacts } from \"./bootstrap.js\";\nimport { atomicWriteJson } from \"../utils/atomic.js\";\nimport { IUI_DIR } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\n\ninterface WorkspaceManifest {\n iuiRoot: string;\n packages: string[];\n updatedAt: string;\n}\n\nfunction workspaceManifestPath(iuiRoot: string): string {\n return path.join(iuiRoot, IUI_DIR, \"workspace.json\");\n}\n\nfunction readWorkspaceManifest(iuiRoot: string): WorkspaceManifest | null {\n const p = workspaceManifestPath(iuiRoot);\n if (!fs.existsSync(p)) return null;\n try {\n const raw = fs.readJsonSync(p) as Partial<WorkspaceManifest>;\n if (!Array.isArray(raw.packages)) return null;\n return {\n iuiRoot: raw.iuiRoot ?? iuiRoot,\n packages: raw.packages.map(String),\n updatedAt: raw.updatedAt ?? \"\",\n };\n } catch {\n return null;\n }\n}\n\nfunction writeWorkspaceManifest(iuiRoot: string, packageDirs: string[]): void {\n const unique = [...new Set(packageDirs.map((dir) => path.resolve(dir)))];\n atomicWriteJson(workspaceManifestPath(iuiRoot), {\n iuiRoot,\n packages: unique.map((dir) => path.relative(iuiRoot, dir) || \".\"),\n updatedAt: new Date().toISOString(),\n });\n}\n\nfunction resolveRegisteredPackageDirs(iuiRoot: string): string[] {\n const resolvedRoot = path.resolve(iuiRoot);\n const manifest = readWorkspaceManifest(resolvedRoot);\n if (!manifest) return [resolvedRoot];\n\n const dirs = manifest.packages.map((rel) =>\n path.resolve(resolvedRoot, rel === \".\" ? \"\" : rel),\n );\n if (!dirs.some((dir) => path.resolve(dir) === resolvedRoot)) {\n dirs.unshift(resolvedRoot);\n }\n return dirs;\n}\n\n/** Track a workspace package that uses this IUI root (does not touch unrelated apps). */\nexport function registerWorkspacePackage(iuiRoot: string, packageDir: string): void {\n const resolvedRoot = path.resolve(iuiRoot);\n const resolvedPackage = path.resolve(packageDir);\n const existing = resolveRegisteredPackageDirs(resolvedRoot);\n if (!existing.some((dir) => path.resolve(dir) === resolvedPackage)) {\n existing.push(resolvedPackage);\n }\n writeWorkspaceManifest(resolvedRoot, existing);\n}\n\n/** Register every workspace package for shared monorepo init (--workspace). */\nexport function registerAllWorkspacePackages(iuiRoot: string): string[] {\n const resolvedRoot = path.resolve(iuiRoot);\n const workspaceRoot = findWorkspaceRoot(resolvedRoot);\n const targets = new Set<string>([resolvedRoot]);\n\n if (workspaceRoot) {\n for (const pkgDir of listWorkspacePackageDirs(workspaceRoot)) {\n targets.add(path.resolve(pkgDir));\n }\n }\n\n const dirs = [...targets];\n writeWorkspaceManifest(resolvedRoot, dirs);\n return dirs;\n}\n\n/** Bootstrap slot bridges only for packages that opted in via init/bootstrap. */\nexport function bootstrapRegisteredPackages(iuiRoot: string): string[] {\n const resolvedRoot = resolveIuiProjectRoot(iuiRoot);\n const bootstrapped: string[] = [];\n\n for (const packageDir of resolveRegisteredPackageDirs(resolvedRoot)) {\n if (!fs.existsSync(path.join(packageDir, \"package.json\"))) continue;\n ensureProjectNpmrc(packageDir);\n writeSlotBridge(packageDir, resolvedRoot);\n writeProjectBootstrapArtifacts(packageDir, resolvedRoot);\n bootstrapped.push(packageDir);\n }\n\n return bootstrapped;\n}\n\n/** Bootstrap a single workspace package that shares an ancestor IUI root. */\nexport async function bootstrapWorkspacePackage(\n packageDir: string,\n iuiRoot: string,\n): Promise<void> {\n const resolvedPackage = path.resolve(packageDir);\n const resolvedIuiRoot = resolveIuiProjectRoot(iuiRoot);\n\n if (!fs.existsSync(path.join(resolvedPackage, \"package.json\"))) {\n throw new CLIError(\n `No package.json found in ${resolvedPackage}.`,\n \"Run iui init from a workspace app directory that contains package.json.\",\n );\n }\n\n ui.heading(\"Bootstrap workspace package\");\n ui.kv(\"IUI root\", resolvedIuiRoot);\n if (resolvedPackage !== resolvedIuiRoot) {\n ui.kv(\"Package\", resolvedPackage);\n }\n\n registerWorkspacePackage(resolvedIuiRoot, resolvedPackage);\n bootstrapRegisteredPackages(resolvedIuiRoot);\n\n ui.ok(\"Slot bridge ready\");\n ui.hint(\n \"This app is linked to an existing IUI setup — packages and configs stay at the IUI root.\",\n );\n ui.nextSteps([\n 'import \"./iui/bootstrap\" in your app entry (or rely on Vite auto-wiring)',\n \"iui doctor — Verify project health\",\n \"iui list — View installed components\",\n ]);\n}\n","// ─── Generated bootstrap integration ────────────────────────────────────────\r\r\n//\r\r\n// Connects the three user configs into a single generated integration module.\r\r\n// Runtime imports the bridge at src/iui/bootstrap.ts (side-effect).\r\r\n\r\r\nimport fs from \"fs-extra\";\r\r\nimport path from \"node:path\";\r\r\nimport {\r\r\n ASSETS_CONFIG_FILE,\r\r\n COMPONENT_CONFIG_FILE,\r\r\n PROJECT_CONFIG_FILE,\r\r\n} from \"../constants.js\";\r\r\nimport { readProjectMeta } from \"../utils/filesystem.js\";\r\r\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\r\r\nimport { relativeImportPath } from \"../utils/workspace.js\";\r\r\nimport type { ProjectConfigPaths } from \"../types.js\";\r\r\nimport { generatedIuiDir } from \"./generated-paths.js\";\r\r\n\r\r\nconst BOOTSTRAP_GENERATED_FILE = \"bootstrap.generated.tsx\";\r\r\n\r\r\nfunction bridgeBootstrapFilePath(cwd: string): string {\r\r\n return path.join(cwd, \"src\", \"iui\", \"bootstrap.ts\");\r\r\n}\r\r\n\r\r\nexport function bootstrapGeneratedPath(cwd: string = process.cwd()): string {\r\r\n return path.join(generatedIuiDir(cwd), BOOTSTRAP_GENERATED_FILE);\r\r\n}\r\r\n\r\r\n/** Resolve config paths from .iui/project.json, falling back to CLI defaults. */\r\r\nexport function resolveProjectConfigPaths(cwd: string): ProjectConfigPaths {\r\r\n const meta = readProjectMeta(cwd);\r\r\n const configs = meta?.configs;\r\r\n if (configs?.theme && configs?.assets && configs?.components) {\r\r\n return configs;\r\r\n }\r\r\n return {\r\r\n theme: PROJECT_CONFIG_FILE,\r\r\n assets: ASSETS_CONFIG_FILE,\r\r\n components: COMPONENT_CONFIG_FILE,\r\r\n };\r\r\n}\r\r\n\r\r\nfunction configImportFromGenerated(cwd: string, configRel: string): string {\r\r\n const generatedDir = path.dirname(bootstrapGeneratedPath(cwd));\r\r\n const abs = path.resolve(cwd, configRel.replace(/^\\.\\//, \"\"));\r\r\n return relativeImportPath(generatedDir, abs);\r\r\n}\r\r\n\r\r\n/** Import paths the generated bootstrap file should reference. */\r\r\nexport function expectedBootstrapImportPaths(cwd: string): ProjectConfigPaths {\r\r\n const configs = resolveProjectConfigPaths(cwd);\r\r\n return {\r\r\n theme: configImportFromGenerated(cwd, configs.theme),\r\r\n assets: configImportFromGenerated(cwd, configs.assets),\r\r\n components: configImportFromGenerated(cwd, configs.components),\r\r\n };\r\r\n}\r\r\n\r\r\n/** Emit `.iui/generated/bootstrap.generated.tsx` wiring theme + assets + components. */\r\r\nexport function writeBootstrapGenerated(cwd: string = process.cwd()): void {\r\r\n const outPath = bootstrapGeneratedPath(cwd);\r\r\n fs.ensureDirSync(path.dirname(outPath));\r\r\n\r\r\n const imports = expectedBootstrapImportPaths(cwd);\r\r\n\r\r\n const content = `// @iui-managed\r\r\n// Generated by iui CLI — do not edit manually.\r\r\n// Connects iui.config.ts + assets.config.json + component.config.ts for standard bootstrap.\r\r\n\r\r\nimport theme from \"${imports.theme}\";\r\r\nimport assets from \"${imports.assets}\";\r\r\nimport { componentConfig as projectComponentConfig } from \"${imports.components}\";\r\r\nimport {\r\r\n mergeProjectConfig,\r\r\n initFramework,\r\r\n registerBootstrapState,\r\r\n} from \"@inventive-ui/framework\";\r\r\nimport { initConfig as initSlotsConfig } from \"@inventive-ui/framework/slots\";\r\r\nimport type { IUIAssetsConfig } from \"@inventive-ui/framework/config\";\r\r\n\r\r\nimport \"./slot.generated\";\r\r\n\r\r\nconst themeConfig = (theme as { default?: typeof theme }).default ?? theme;\r\r\n\r\r\nexport const frameworkConfig = mergeProjectConfig(\r\r\n themeConfig,\r\r\n assets as IUIAssetsConfig,\r\r\n);\r\r\n\r\r\nregisterBootstrapState({\r\r\n frameworkConfig,\r\r\n componentConfig: projectComponentConfig,\r\r\n});\r\r\n\r\r\ninitFramework(frameworkConfig);\r\r\ninitSlotsConfig(frameworkConfig);\r\r\n\r\r\nexport { projectComponentConfig as componentConfig };\r\r\n`;\r\r\n\r\r\n safeWriteFile(outPath, content);\r\r\n}\r\r\n\r\r\n/** Stable app import path that side-effect-imports generated bootstrap. */\r\r\nexport function writeBootstrapBridge(packageDir: string, iuiRoot: string): void {\r\r\n const bridgePath = bridgeBootstrapFilePath(packageDir);\r\r\n const generatedFile = bootstrapGeneratedPath(iuiRoot);\r\r\n const importBase = relativeImportPath(path.dirname(bridgePath), generatedFile);\r\r\n\r\r\n fs.ensureDirSync(path.dirname(bridgePath));\r\r\n if (fs.existsSync(bridgePath)) {\r\r\n const existing = fs.readFileSync(bridgePath, \"utf-8\");\r\r\n if (existing.length > 0 && !/@iui-managed/.test(existing)) {\r\r\n return;\r\r\n }\r\r\n }\r\r\n\r\r\n const bridgeContent = `// Managed by iui. Do not edit manually.\r\r\n// @iui-managed\r\r\n// Standard bootstrap: wires theme + assets + component configs before IUIProvider.\r\r\n\r\r\nimport \"${importBase}\";\r\r\n`;\r\r\n\r\r\n safeWriteFile(bridgePath, bridgeContent);\r\r\n}\r\r\n\r\r\nexport function writeProjectBootstrapArtifacts(\r\r\n packageDir: string,\r\r\n iuiRoot: string,\r\r\n): void {\r\r\n writeBootstrapGenerated(iuiRoot);\r\r\n writeBootstrapBridge(packageDir, iuiRoot);\r\r\n}\r\r\n","// ─── Per-invocation session (auth + optional license cache) ─────────────────\r\n\r\nimport type { GlobalConfig } from \"../types.js\";\r\nimport type { LicenseInfo } from \"../types.js\";\r\nimport { requireValidatedAuthCached } from \"./auth.js\";\r\nimport { validateLicense } from \"./license.js\";\r\n\r\nexport interface InvocationSession {\r\n auth: GlobalConfig;\r\n license?: LicenseInfo;\r\n}\r\n\r\nlet activeSession: InvocationSession | null = null;\r\nlet licenseCache: { token: string; data: LicenseInfo; at: number } | null = null;\r\nconst LICENSE_CACHE_TTL_MS = 60_000;\r\n\r\nexport function getSession(): InvocationSession | null {\r\n return activeSession;\r\n}\r\n\r\nexport function setSession(session: InvocationSession): void {\r\n activeSession = session;\r\n}\r\n\r\nexport function clearSession(): void {\r\n activeSession = null;\r\n licenseCache = null;\r\n}\r\n\r\nexport async function ensureAuthSession(): Promise<GlobalConfig> {\r\n if (activeSession?.auth?.token) {\r\n return activeSession.auth;\r\n }\r\n const auth = await requireValidatedAuthCached();\r\n setSession({ auth });\r\n return auth;\r\n}\r\n\r\nexport async function ensureLicenseSession(force = false): Promise<LicenseInfo> {\r\n const auth = await ensureAuthSession();\r\n const now = Date.now();\r\n if (\r\n !force &&\r\n licenseCache &&\r\n licenseCache.token === auth.token &&\r\n now - licenseCache.at < LICENSE_CACHE_TTL_MS\r\n ) {\r\n if (activeSession) activeSession.license = licenseCache.data;\r\n return licenseCache.data;\r\n }\r\n const license = await validateLicense(auth.token);\r\n licenseCache = { token: auth.token, data: license, at: now };\r\n setSession({ auth, license });\r\n return license;\r\n}\r\n","function getOrdinalSuffix(day: number): string {\n const mod100 = day % 100;\n if (mod100 >= 11 && mod100 <= 13) return \"th\";\n switch (day % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n}\n\nexport function formatNaturalDateTime(value: string): string {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n\n const day = date.getDate();\n const month = date.toLocaleString(\"en-US\", { month: \"long\" });\n const year = date.getFullYear();\n const hour24 = date.getHours();\n const hour12 = hour24 % 12 || 12;\n const minute = String(date.getMinutes()).padStart(2, \"0\");\n const second = String(date.getSeconds()).padStart(2, \"0\");\n const meridiem = hour24 >= 12 ? \"PM\" : \"AM\";\n\n return `${day}${getOrdinalSuffix(day)} ${month} ${year}, ${hour12}.${minute}.${second} ${meridiem}`;\n}","// ─── Shared install preparation (registry auth + workspace sync) ─────────────\n//\n// Standard practice for monorepos (npm/pnpm/yarn): sync the workspace lockfile\n// once per command, then add packages with -w/--filter. Used by init, install,\n// assets, update, and framework flows.\n\nimport {\n ensureProjectNpmrc,\n writeGlobalNpmrcAuth,\n prepareWorkspaceForDependencyInstall,\n isInsideProject,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext, resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\nexport interface InstallContextResult {\n /** Directory that owns .iui/ and package.json for installs. */\n cwd: string;\n /** When true, skip redundant workspace sync inside installPackageWithFallback. */\n skipWorkspacePrepare: boolean;\n}\n\n/**\n * Resolve the package directory for install commands.\n * Inside an initialized project, targets the app that owns `.iui/`.\n */\nexport function resolveInstallTargetCwd(startCwd: string = process.cwd()): string {\n if (isInsideProject(startCwd)) {\n return resolveIuiProjectRoot(startCwd);\n }\n return startCwd;\n}\n\n/**\n * Configure npm registry auth and sync monorepo lockfile before adding deps.\n * Call once at the start of an install command; pass `skipWorkspacePrepare` through.\n */\nexport function prepareInstallContext(\n token: string,\n startCwd?: string,\n): InstallContextResult {\n const cwd = resolveInstallTargetCwd(startCwd ?? process.cwd());\n ensureProjectNpmrc(cwd);\n writeGlobalNpmrcAuth(token);\n\n let skipWorkspacePrepare = false;\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n skipWorkspacePrepare = true;\n }\n\n return { cwd, skipWorkspacePrepare };\n}\n","// ─── Asset Package Service ───────────────────────────────────────────────────\n//\n// Installs / removes first-party asset packages (icons, illustrations, etc.)\n// via npm and registers their slots locally.\n\nimport ora from \"ora\";\nimport {\n readPackageManifest,\n writePackageManifest,\n writeAssetsConfig,\n detectPackageManager,\n collectInstalledIconLibraries,\n persistPreferredIconLibrary,\n persistPreferredIllustrationStyle,\n persistPreferredEmojiFamily,\n readAssetsConfigIconLibrary,\n readAssetsConfigIllustrationStyle,\n readAssetsConfigEmojiFamily,\n prepareWorkspaceForDependencyInstall,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext } from \"../utils/workspace.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport { ensureSlotRegistry } from \"./slot-registry.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\nimport { ASSET_PACKAGES_MAP, ASSET_PACKAGE_TO_SLOT_CONFIG } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { uninstallPackage } from \"../utils/security/process.js\";\nimport {\n promptChooseDefaultIconLibrary,\n promptChooseIllustrationStyle,\n promptChooseEmojiFamily,\n} from \"../utils/prompts.js\";\n\nexport interface AssetInstallOptions {\n token: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\n/**\n * Install a single asset package by its id (e.g. \"icons-lucide\").\n */\nexport async function installAssetPackage(\n packageId: string,\n opts: AssetInstallOptions,\n): Promise<{ previousVersion: string | null; version: string }> {\n const cwd = opts.cwd ?? process.cwd();\n const forceLatest = opts.forceLatest === true;\n const source =\n (opts.source ?? (process.env.IUI_INSTALL_SOURCE as AssetInstallOptions[\"source\"]) ?? \"api\") ===\n \"registry\"\n ? \"registry\"\n : \"api\";\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) throw new CLIError(`Unknown asset package: \"${packageId}\"`);\n\n const spinner = ora({ text: `Installing ${def.displayName}…`, prefixText: \" \" }).start();\n\n try {\n const manifestBefore = readPackageManifest(cwd);\n const previousVersion = manifestBefore[packageId]?.version ?? null;\n const { version: installedVersion, method } = await installPackageWithFallback(\n { packageShortName: packageId, npmName: def.npm },\n {\n token: opts.token,\n source,\n cwd,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipIfInstalled: !forceLatest,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n if (method === \"already-installed\") {\n spinner.stop();\n await notifyIfUpdateAvailable(opts.token, packageId, installedVersion, def.displayName);\n spinner.start();\n }\n\n // 2. Local manifest\n const wasAlreadyInManifest = Boolean(manifestBefore[packageId]);\n const manifest = { ...manifestBefore };\n manifest[packageId] = {\n version: installedVersion,\n installedAt: new Date().toISOString(),\n };\n writePackageManifest(manifest, cwd);\n\n // 2b. Default icon library: after manifest includes the new package, resolve\n // among *all* installed icon sets (prompt if >1 and this id was newly added).\n const installingLibrary = (ASSET_PACKAGE_TO_SLOT_CONFIG[packageId] as { library?: string })\n ?.library;\n if (def.slotType === \"icon\" && installingLibrary) {\n const iconLibs = collectInstalledIconLibraries(cwd);\n if (iconLibs.length === 0) {\n persistPreferredIconLibrary(installingLibrary, cwd);\n } else if (wasAlreadyInManifest) {\n // Reinstall / bump same asset — do not change stored default\n } else if (iconLibs.length === 1) {\n persistPreferredIconLibrary(iconLibs[0], cwd);\n } else {\n spinner.stop();\n try {\n const currentDefault = readAssetsConfigIconLibrary(cwd) ?? null;\n const chosen = await promptChooseDefaultIconLibrary(\n iconLibs,\n currentDefault,\n installingLibrary,\n );\n persistPreferredIconLibrary(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n if (packageId === \"illustrations\" && def.slotType === \"illustration\") {\n if (wasAlreadyInManifest) {\n // Reinstall / bump — keep stored style\n } else {\n spinner.stop();\n try {\n const currentStyle = readAssetsConfigIllustrationStyle(cwd);\n const chosen = await promptChooseIllustrationStyle(currentStyle);\n persistPreferredIllustrationStyle(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n if (packageId === \"emoji\" && def.slotType === \"emoji\") {\n if (wasAlreadyInManifest) {\n // Reinstall / bump — keep stored family and skin tone\n } else {\n spinner.stop();\n try {\n const currentFamily = readAssetsConfigEmojiFamily(cwd);\n const chosen = await promptChooseEmojiFamily(currentFamily);\n persistPreferredEmojiFamily(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n // 3. Reconcile slot manifest, helper, and assets config\n await ensureSlotRegistry({ cwd, quiet: true, mode: \"repair\" });\n writeAssetsConfig(cwd);\n\n const versionMessage =\n forceLatest && previousVersion\n ? `${def.displayName} ${ui.dim(`v${previousVersion} → v${installedVersion}`)}`\n : `${def.displayName} installed`;\n spinner.succeed(versionMessage);\n return { previousVersion, version: installedVersion };\n } catch (error) {\n if (!(error instanceof CLIError)) spinner.fail(`Failed to install ${def.displayName}`);\n throw error;\n }\n}\n\n/**\n * Install multiple asset packages.\n */\nexport async function installAssetPackages(\n ids: string[],\n opts: AssetInstallOptions,\n): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n let skipWorkspacePrepare = opts.skipWorkspacePrepare === true;\n if (!skipWorkspacePrepare && isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n skipWorkspacePrepare = true;\n }\n\n for (const id of ids) {\n await installAssetPackage(id, { ...opts, cwd, skipWorkspacePrepare });\n }\n}\n\n/**\n * Remove an asset package.\n */\nexport async function removeAssetPackage(\n packageId: string,\n opts: AssetInstallOptions,\n): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) throw new CLIError(`Unknown asset package: \"${packageId}\"`);\n\n const manifest = readPackageManifest(cwd);\n if (!manifest[packageId]) throw new CLIError(`${def.displayName} is not installed.`);\n\n // npm uninstall\n const pm = detectPackageManager(cwd);\n try {\n uninstallPackage(pm, def.npm, cwd);\n } catch {\n ui.warn(`npm remove failed for ${def.npm}; removed local manifest entry.`);\n }\n\n delete manifest[packageId];\n writePackageManifest(manifest, cwd);\n await ensureSlotRegistry({ cwd, quiet: true, mode: \"repair\" });\n writeAssetsConfig(cwd);\n\n ui.ok(`${def.displayName} removed`);\n}\n\n","// ─── iui assets ──────────────────────────────────────────────────────────────\n//\n// Subcommands: remove | list (install via `iui install assets`)\n\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n installAssetPackages,\n removeAssetPackage,\n} from \"../services/assets.js\";\nimport {\n readPackageManifest,\n isInsideProject,\n} from \"../utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"../utils/workspace.js\";\nimport { confirm, promptAssetSelection } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport {\n ASSET_PACKAGES,\n ASSET_PACKAGES_MAP,\n ASSET_CATEGORY_LABELS,\n type AssetCategory,\n} from \"../constants.js\";\n\nexport async function assetsAddCommand(\n names: string[],\n opts?: { source?: string },\n): Promise<void> {\n try {\n ui.heading(\"Add Asset Packages\");\n\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n\n const auth = await ensureAuthSession();\n ui.step(\"Validating license…\");\n await ensureLicenseSession();\n ui.ok(\"License valid\");\n\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n const installed = readPackageManifest(installCwd);\n\n let selected: string[];\n\n if (names.length > 0) {\n // Validate provided names\n const invalid = names.filter((n) => !ASSET_PACKAGES_MAP[n]);\n if (invalid.length > 0) {\n throw new CLIError(\n `Unknown asset package(s): ${invalid.join(\", \")}`,\n \"iui assets list\",\n );\n }\n const alreadyInstalled = names.filter((n) => installed[n]);\n if (alreadyInstalled.length > 0) {\n ui.warn(\n `Already installed: ${alreadyInstalled.map((n) => ASSET_PACKAGES_MAP[n]?.displayName ?? n).join(\", \")}`,\n );\n }\n selected = names.filter((n) => !installed[n]);\n } else {\n selected = await promptAssetSelection(Object.keys(installed));\n }\n\n if (selected.length === 0) {\n ui.info(\"No new asset packages to install.\");\n return;\n }\n\n ui.newline();\n ui.subheading(\n `Installing ${selected.length} asset package${selected.length > 1 ? \"s\" : \"\"}…`,\n );\n ui.newline();\n\n const source =\n (opts?.source ?? process.env.IUI_INSTALL_SOURCE ?? \"api\").toLowerCase() ===\n \"registry\"\n ? \"registry\"\n : \"api\";\n\n await installAssetPackages(selected, {\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n\n ui.done(\n `${selected.length} asset package${selected.length > 1 ? \"s\" : \"\"} installed!`,\n );\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui assets remove <package> ─────────────────────────────────────────────\n\nexport async function assetsRemoveCommand(name: string): Promise<void> {\n try {\n ui.heading(\"Remove Asset Package\");\n if (!isInsideProject()) {\n throw new CLIError(\n \"Not an Inventive UI project.\",\n \"iui init\",\n );\n }\n\n const def = ASSET_PACKAGES_MAP[name];\n const displayName = def?.displayName ?? name;\n const shouldRemove = await confirm(\n `Remove ${displayName} from this project?`,\n false,\n );\n if (!shouldRemove) {\n ui.info(\"Cancelled.\");\n return;\n }\n\n const auth = await ensureAuthSession();\n\n await removeAssetPackage(name, {\n token: auth.token,\n });\n\n ui.done(\"Asset package removed.\");\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui assets list ─────────────────────────────────────────────────────────\n\nexport async function assetsListCommand(): Promise<void> {\n try {\n ui.heading(\"Asset Packages\");\n\n const installed = isInsideProject() ? readPackageManifest() : {};\n\n const categories = [\n ...new Set(ASSET_PACKAGES.map((p) => p.category)),\n ] as AssetCategory[];\n\n for (const cat of categories) {\n ui.subheading(ASSET_CATEGORY_LABELS[cat]);\n ui.newline();\n\n const pkgs = ASSET_PACKAGES.filter((p) => p.category === cat);\n for (const pkg of pkgs) {\n const status = installed[pkg.id]\n ? ui.success(\"✔ installed\")\n : ui.dim(\"not installed\");\n ui.bulletItem(`${pkg.displayName.padEnd(24)} ${status} ${ui.dim(`[${pkg.id}] · ${pkg.slotType}`)}`);\n }\n ui.newline();\n }\n\n ui.info(\n `${ASSET_PACKAGES.length} packages available · ${Object.keys(installed).length} installed`,\n );\n ui.hint(\"Run: iui install assets\");\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui logout ──────────────────────────────────────────────────────────────\n\nimport { logout } from \"../services/auth.js\";\nimport { clearSession } from \"../services/session.js\";\nimport * as ui from \"../utils/ui.js\";\n\nexport async function logoutCommand(): Promise<void> {\n ui.heading(\"Logout\");\n logout();\n clearSession();\n ui.ok(\"Credentials removed (including npm registry auth)\");\n ui.newline();\n}\n","// ─── iui whoami ──────────────────────────────────────────────────────────────\n\nimport { ensureAuthSession } from \"../services/session.js\";\nimport {\n validateLicense,\n formatSeatUsage,\n formatPlanLabel,\n} from \"../services/license.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nexport async function whoamiCommand(): Promise<void> {\n try {\n ui.heading(\"Signed In As\");\n\n const auth = await ensureAuthSession();\n\n ui.kv(\"GitHub\", auth.github_id || \"—\");\n ui.kv(\"Email\", auth.email || \"—\");\n ui.kv(\"Role\", (auth.role ?? \"user\").toUpperCase());\n if (auth.plan_type) {\n ui.kv(\"Plan\", auth.plan_type === \"team\" ? \"Team\" : \"Individual\");\n }\n\n try {\n const license = await validateLicense(auth.token);\n\n ui.newline();\n ui.subheading(\"License\");\n ui.kv(\"Plan\", formatPlanLabel(license.plan));\n ui.kv(\"Status\", license.valid ? ui.success(\"Active\") : ui.danger(\"Inactive\"));\n ui.kv(\"Issued\", formatNaturalDateTime(license.issued_at));\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats\", seatUsage);\n }\n\n const expiresDate = new Date(license.updates_expire_at);\n const now = new Date();\n ui.newline();\n\n if (expiresDate > now) {\n const days = Math.ceil(\n (expiresDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24),\n );\n ui.ok(\n `Update window active — ${ui.chalk.white.bold(`${days}`)} day${days !== 1 ? \"s\" : \"\"} remaining`,\n );\n } else {\n ui.warn(\"Update window expired. Installed components still work.\");\n ui.hint(\"Renew at inventiveui.com\");\n }\n } catch {\n ui.newline();\n ui.hint(\"Full license details unavailable right now.\");\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui devices ─────────────────────────────────────────────────────────────\n\nimport inquirer from \"inquirer\";\nimport { requireAuth } from \"../services/auth.js\";\nimport { listDevices, revokeDevice } from \"../services/auth.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport type { DeviceInfo } from \"../types.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\nimport { sanitizeTerminalOutput } from \"../utils/security/terminal.js\";\nimport chalk from \"chalk\";\n\nconst PROMPT_PREFIX = ` ${ui.brand.bold(\"◆\")}`;\n\n// ── iui devices list ──────────────────────────────────────────────────────────\n\nexport async function devicesListCommand(): Promise<void> {\n try {\n ui.heading(\"Authorized Devices\");\n\n const auth = requireAuth();\n\n ui.step(\"Fetching devices…\");\n const devices = await listDevices(auth.token);\n\n if (devices.length === 0) {\n ui.warn(\"No authorized devices found\");\n ui.hint(\"Run iui login to register this device\");\n ui.newline();\n return;\n }\n\n ui.newline();\n\n for (let i = 0; i < devices.length; i++) {\n const device = devices[i];\n const lastUsed = device.lastUsedAt ? formatNaturalDateTime(device.lastUsedAt) : \"never\";\n const registered = formatNaturalDateTime(device.createdAt);\n const isLast = i === devices.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n\n console.log(` ${connector} ${ui.chalk.white.bold(sanitizeTerminalOutput(device.name))}`);\n console.log(` ${pipe} ${ui.dim(\"registered\")} ${registered}`);\n console.log(` ${pipe} ${ui.dim(\"last used \")} ${lastUsed}`);\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n ui.hint(\n `${devices.length} device${devices.length !== 1 ? \"s\" : \"\"} registered — use iui devices revoke to remove one`,\n );\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui devices revoke ────────────────────────────────────────────────────────\n\nexport async function devicesRevokeCommand(deviceId?: string): Promise<void> {\n try {\n ui.heading(\"Revoke Device\");\n\n const auth = requireAuth();\n\n let targetId = deviceId?.trim();\n let targetName = targetId ?? \"\";\n\n if (!targetId) {\n ui.step(\"Fetching devices…\");\n const devices = await listDevices(auth.token);\n\n if (devices.length === 0) {\n ui.warn(\"No devices to revoke\");\n ui.newline();\n return;\n }\n\n console.log();\n console.log(` ${ui.brand.bold(\"◆\")} ${chalk.white.bold(\"Choose a device to revoke\")}`);\n console.log(` ${ui.dim(\"The device will need to run iui login again.\")}`);\n console.log();\n\n const { chosen } = await inquirer.prompt<{ chosen: string }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: chalk.dim(\"Select device\"),\n prefix: PROMPT_PREFIX,\n choices: devices.map((d: DeviceInfo) => ({\n name: `${sanitizeTerminalOutput(d.name).padEnd(28)} ${ui.dim(\"last: \" + (d.lastUsedAt ? formatNaturalDateTime(d.lastUsedAt) : \"never\"))}`,\n value: d.id,\n short: sanitizeTerminalOutput(d.name),\n })),\n },\n ]);\n\n targetId = chosen;\n targetName = devices.find((d) => d.id === chosen)?.name ?? chosen;\n }\n\n if (!targetId) {\n throw new CLIError(\"No device selected.\");\n }\n\n const { confirmed } = await inquirer.prompt<{ confirmed: boolean }>([\n {\n type: \"confirm\",\n name: \"confirmed\",\n message: chalk.white(`Revoke \"${sanitizeTerminalOutput(targetName)}\"?`),\n prefix: PROMPT_PREFIX,\n default: false,\n },\n ]);\n\n if (!confirmed) {\n ui.hint(\"Cancelled.\");\n ui.newline();\n return;\n }\n\n ui.step(\"Revoking device…\");\n await revokeDevice(auth.token, targetId);\n\n ui.ok(`\"${sanitizeTerminalOutput(targetName)}\" has been revoked`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui team ────────────────────────────────────────────────────────────────\n\nimport {\n addLicenseUser,\n listLicenseUsers,\n removeLicenseUser,\n} from \"../services/license.js\";\nimport { ensureAuthSession } from \"../services/session.js\";\nimport { promptText, confirm } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError, handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nfunction assertTeamPlan(planType: string | undefined): void {\n if (planType === \"individual\") {\n throw new CLIError(\"This license is an Individual plan. Team seat management is unavailable.\");\n }\n}\n\nasync function resolveEmailInput(prompt: string, hint: string, provided?: string): Promise<string> {\n const normalized = provided?.trim().toLowerCase();\n if (normalized) return normalized;\n return promptText(prompt, hint, \"user@example.com\", (v) =>\n v.trim().length > 3 && v.includes(\"@\") ? true : \"Please enter a valid email address.\",\n );\n}\n\nexport async function teamListCommand(includeInactive = false): Promise<void> {\n try {\n ui.heading(\"Team Seats\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n const seats = await listLicenseUsers(auth.token, includeInactive);\n\n ui.kv(\"Seats used\", `${seats.active_seats} of ${seats.seat_limit}`);\n ui.kv(\"Your role\", (auth.role ?? \"user\").toUpperCase());\n ui.newline();\n\n if (seats.users.length === 0) {\n ui.warn(\"No seats found.\");\n ui.hint(\"Add a seat with: iui team add <email>\");\n ui.newline();\n return;\n }\n\n for (let i = 0; i < seats.users.length; i++) {\n const seat = seats.users[i];\n const isLast = i === seats.users.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n const status = seat.isActive ? ui.success(\"active\") : ui.danger(\"inactive\");\n const added = formatNaturalDateTime(seat.addedAt);\n\n console.log(` ${connector} ${ui.chalk.white(seat.email)} ${status}`);\n console.log(` ${pipe} ${ui.dim(\"added\")} ${added}`);\n if (seat.removedAt) {\n const removed = formatNaturalDateTime(seat.removedAt);\n console.log(` ${pipe} ${ui.dim(\"removed\")} ${removed}`);\n }\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\nexport async function teamAddCommand(emailArg?: string): Promise<void> {\n try {\n ui.heading(\"Add Team Seat\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n if (auth.role !== \"admin\") {\n throw new CLIError(\"Only the license admin can add seats.\");\n }\n\n const email = await resolveEmailInput(\n \"Add team member\",\n \"Enter the GitHub-linked email of the person you want to grant access.\",\n emailArg,\n );\n\n ui.step(`Adding seat for ${ui.accent(email)}…`);\n const result = await addLicenseUser(auth.token, email);\n\n ui.ok(`Seat granted to ${email}`);\n ui.kv(\"Seats used\", `${result.active_seats} of ${result.seat_limit}`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\nexport async function teamRemoveCommand(emailArg?: string): Promise<void> {\n try {\n ui.heading(\"Remove Team Seat\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n if (auth.role !== \"admin\") {\n throw new CLIError(\"Only the license admin can remove seats.\");\n }\n\n const email = await resolveEmailInput(\n \"Remove team member\",\n \"This will revoke the person's access to Inventive UI packages.\",\n emailArg,\n );\n\n const ok = await confirm(`Remove seat for ${email}?`, false);\n if (!ok) {\n ui.hint(\"Cancelled.\");\n ui.newline();\n return;\n }\n\n ui.step(`Removing seat for ${ui.accent(email)}…`);\n const result = await removeLicenseUser(auth.token, email);\n\n ui.ok(`Seat removed for ${email}`);\n ui.kv(\"Seats used\", `${result.active_seats} of ${result.seat_limit}`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui deploy-token ────────────────────────────────────────────────────────\n\nimport { requireAuth, listDeployTokens, createDeployToken, revokeDeployToken } from \"../services/auth.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError, handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\nimport { sanitizeTerminalOutput, isInteractiveSession } from \"../utils/security/terminal.js\";\n\nfunction normalizePackagesArg(value?: string): string | string[] {\n if (!value || value.trim() === \"\" || value.trim() === \"*\") return \"*\";\n const items = value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (items.length === 0) return \"*\";\n return Array.from(new Set(items));\n}\n\nfunction parseDays(input?: string): number {\n if (!input) return 7;\n const days = Number(input);\n if (!Number.isInteger(days) || days < 1 || days > 30) {\n throw new CLIError(\"--days must be an integer between 1 and 30.\");\n }\n return days;\n}\n\nfunction formatPackages(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(\", \");\n return value;\n}\n\nfunction statusBadge(status: string): string {\n if (status === \"active\") return ui.success(\"active\");\n if (status === \"revoked\") return ui.danger(\"revoked\");\n return ui.warning(status);\n}\n\n// ── iui deploy-token list ─────────────────────────────────────────────────────\n\nexport async function deployTokenListCommand(): Promise<void> {\n try {\n ui.heading(\"Deploy Tokens\");\n\n const auth = requireAuth();\n ui.step(\"Fetching deploy tokens…\");\n\n const tokens = await listDeployTokens(auth.token);\n if (tokens.length === 0) {\n ui.warn(\"No deploy tokens found\");\n ui.hint(\"Create one with: iui deploy-token create\");\n ui.newline();\n return;\n }\n\n ui.newline();\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const isLast = i === tokens.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n\n console.log(\n ` ${connector} ${ui.chalk.white.bold(sanitizeTerminalOutput(token.name))} ${statusBadge(token.status)}`,\n );\n console.log(` ${pipe} ${ui.dim(\"scope \")} ${token.scope}`);\n console.log(` ${pipe} ${ui.dim(\"packages \")} ${formatPackages(token.packages)}`);\n console.log(` ${pipe} ${ui.dim(\"expires \")} ${formatNaturalDateTime(token.expires_at)}`);\n console.log(\n ` ${pipe} ${ui.dim(\"last used \")} ${token.last_used_at ? formatNaturalDateTime(token.last_used_at) : \"never\"}`,\n );\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n ui.hint(`To revoke: iui deploy-token revoke <token-id>`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui deploy-token create ───────────────────────────────────────────────────\n\nexport async function deployTokenCreateCommand(\n name?: string,\n opts?: { days?: string; packages?: string },\n): Promise<void> {\n try {\n ui.heading(\"Create Deploy Token\");\n\n const auth = requireAuth();\n const expiresInDays = parseDays(opts?.days);\n const packages = normalizePackagesArg(opts?.packages);\n\n if (packages === \"*\" && isInteractiveSession() && process.env.IUI_CI !== \"1\") {\n ui.warn(\"Token will allow access to all registry packages (*).\");\n ui.hint(\"Prefer a comma-separated package list for CI when possible.\");\n }\n\n ui.step(`Creating token — expires in ${expiresInDays} day${expiresInDays !== 1 ? \"s\" : \"\"}…`);\n const token = await createDeployToken(auth.token, {\n name: name?.trim() || undefined,\n expiresInDays,\n packages,\n });\n\n ui.ok(\"Deploy token created\");\n ui.kv(\"Name\", token.name);\n ui.kv(\"Scope\", token.scope);\n ui.kv(\"Packages\", formatPackages(token.packages));\n ui.kv(\"Expires\", formatNaturalDateTime(token.expires_at));\n\n ui.newline();\n ui.warn(\"This token is shown once only. Copy it to your secret manager now.\");\n ui.boxMessage(\"IUI_DEPLOY_TOKEN\", [token.token]);\n\n ui.nextSteps([\n \"Set IUI_DEPLOY_TOKEN in your CI environment or deploy platform\",\n \"Ensure project .npmrc has @inventive-ui scope pointing to the API\",\n \"Run iui deploy-token list to audit active tokens\",\n ]);\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui deploy-token revoke ───────────────────────────────────────────────────\n\nexport async function deployTokenRevokeCommand(tokenId?: string): Promise<void> {\n try {\n ui.heading(\"Revoke Deploy Token\");\n\n const auth = requireAuth();\n const id = tokenId?.trim();\n if (!id) {\n throw new CLIError(\"Missing token id.\", \"iui deploy-token revoke <token-id>\");\n }\n\n ui.step(\"Revoking token…\");\n await revokeDeployToken(auth.token, id);\n\n ui.ok(\"Deploy token revoked\");\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui setup ───────────────────────────────────────────────────────────────\n//\n// Clone-to-green for teammates: configure registry, install deps, run doctor.\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport {\n detectPackageManagerWithMeta,\n ensureGitignoreHasNpmrc,\n ensureGitignoreHasIuiBuildCache,\n ensureProjectNpmrc,\n findWorkspaceRoot,\n hasPackageJson,\n isInsideProject,\n listIuiInitializedPackages,\n resolveDependencyInstallRoot,\n resolveSetupDoctorTargets,\n runSyncInstall,\n syncInstallCommand,\n writeGlobalNpmrcAuth,\n} from \"../utils/filesystem.js\";\nimport { ensureAuthSession } from \"../services/session.js\";\nimport { doctorCommand } from \"./doctor.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError, formatExecSyncError } from \"../utils/errors.js\";\n\nexport type SetupOptions = {\n fix?: boolean;\n yes?: boolean;\n};\n\nfunction detectDevScript(cwd: string): string | null {\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkg = fs.readJsonSync(pkgPath) as { scripts?: Record<string, string> };\n if (pkg.scripts?.dev) return \"npm run dev\";\n if (pkg.scripts?.start) return \"npm run start\";\n } catch {\n return null;\n }\n return null;\n}\n\nfunction relativePackageLabel(installRoot: string, packageDir: string): string {\n const rel = path.relative(installRoot, packageDir);\n return rel && rel !== \".\" ? rel : path.basename(packageDir);\n}\n\nexport async function setupCommand(opts?: SetupOptions): Promise<void> {\n try {\n ui.heading(\"Project Setup\");\n\n const cwd = process.cwd();\n const installRoot = resolveDependencyInstallRoot(cwd);\n const workspaceRoot = findWorkspaceRoot(cwd);\n const inMonorepo = workspaceRoot !== null;\n const installFromChild =\n inMonorepo && path.resolve(installRoot) !== path.resolve(cwd);\n\n if (!hasPackageJson(cwd) && !hasPackageJson(installRoot)) {\n throw new CLIError(\n \"No package.json found in the current directory.\",\n \"cd into your project root or use -C <dir>\",\n );\n }\n\n const initialized =\n isInsideProject(cwd) || listIuiInitializedPackages(cwd).length > 0;\n if (!initialized) {\n ui.warn(\"This directory is not initialized with Inventive UI (.iui missing).\");\n ui.hint(\n \"If this is a new project, run iui init. If joining a team repo, ask the admin to commit .iui/ from init.\",\n );\n } else if (inMonorepo && !isInsideProject(cwd)) {\n const apps = listIuiInitializedPackages(cwd).map((dir) =>\n relativePackageLabel(installRoot, dir),\n );\n ui.hint(\n `Monorepo detected — IUI apps: ${apps.join(\", \")}. Dependencies install at the workspace root.`,\n );\n }\n\n ui.step(\"Authenticating…\");\n const auth = await ensureAuthSession();\n writeGlobalNpmrcAuth(auth.token);\n ui.ok(`Signed in as ${ui.accent(auth.github_id ?? \"authenticated user\")}`);\n\n ui.step(\"Configuring npm registry…\");\n ensureProjectNpmrc(installRoot);\n ensureGitignoreHasNpmrc(installRoot);\n ensureGitignoreHasIuiBuildCache(installRoot);\n ui.ok(\"Project .npmrc configured for @inventive-ui (scope only — no secrets in repo)\");\n\n const { pm, warnings, source } = detectPackageManagerWithMeta(cwd);\n for (const w of warnings) ui.warn(w);\n ui.kv(\"Package manager\", `${pm} (${source})`);\n if (installFromChild) {\n const rel = path.relative(cwd, installRoot) || \".\";\n ui.kv(\"Install directory\", rel === \"..\" || rel.includes(\"..\") ? installRoot : rel);\n }\n\n const installCmd = syncInstallCommand(pm);\n const installSpinner = ora({\n text: `Installing dependencies (${installCmd})…`,\n prefixText: \" \",\n }).start();\n\n try {\n runSyncInstall(pm, installRoot);\n installSpinner.succeed(\"Dependencies installed\");\n } catch (err) {\n installSpinner.fail(\"Dependency install failed\");\n const detail = formatExecSyncError(err);\n const manual =\n path.resolve(installRoot) === path.resolve(cwd)\n ? installCmd\n : `cd ${JSON.stringify(installRoot)} && ${installCmd}`;\n throw new CLIError(\n detail\n ? `Could not install project dependencies.\\n${detail}`\n : \"Could not install project dependencies.\",\n `Run manually: ${manual}`,\n );\n }\n\n ui.newline();\n ui.step(\"Running diagnostics…\");\n await doctorCommand({ fix: opts?.fix === true });\n\n const doctorTargets = resolveSetupDoctorTargets(cwd);\n const devCmd = detectDevScript(\n isInsideProject(cwd) ? cwd : (doctorTargets[0] ?? cwd),\n );\n const steps: string[] = [];\n if (!initialized) {\n steps.push(\"iui init — Initialize if this repo is missing .iui/\");\n }\n if (inMonorepo) {\n steps.push(\"cd apps/docs && npm run dev — Docs app\");\n steps.push(\"cd apps/landing && npm run dev — Landing app\");\n } else if (devCmd) {\n steps.push(`${devCmd} — Start the dev server`);\n }\n steps.push(\"iui doctor — Re-check project health\");\n\n ui.nextSteps(steps);\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui doctor ──────────────────────────────────────────────────────────────\n//\n// Multi-point health check for the current project (monorepo-aware).\n\nimport path from \"node:path\";\nimport { getAuthConfig } from \"../services/auth.js\";\nimport { formatSeatUsage, validateLicense, formatPlanLabel } from \"../services/license.js\";\nimport { pingRegistry } from \"../services/registry.js\";\nimport {\n checkFrameworkInstalled,\n getFrameworkInstallStatus,\n getFrameworkUpdateBaselineVersion,\n getReactStatus,\n getReactDomStatus,\n getViteStatus,\n} from \"../services/framework.js\";\nimport {\n checkPackageCompatibility,\n checkGeneratedSlotValidity,\n checkComponentConfigValidity,\n checkCompileFirstReadiness,\n checkAssetBoundBindings,\n checkIuiConfigTierBleed,\n checkAssetsConfigValidity,\n checkComponentConfigTierBleed,\n checkBootstrapSync,\n} from \"../services/health.js\";\nimport {\n isInsideProject,\n hasPackageJson,\n readComponentManifest,\n readPackageManifest,\n readSlotManifest,\n getInstalledPackageVersion,\n resolveDependencyInstallRoot,\n resolveSetupDoctorTargets,\n ensureProjectConfig,\n ensureInventiveUiViteConfig,\n ensureComponentConfig,\n readComponentPackageManifest,\n projectHasViteTooling,\n} from \"../utils/filesystem.js\";\nimport { COMPONENTS_PACKAGE } from \"../constants.js\";\nimport { getLatestVersionSafe } from \"../services/version-check.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\nimport { syncInventiveUiDeclaredDependencies } from \"../utils/declared-deps.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nexport type DoctorOptions = {\n fix?: boolean;\n /** When set, diagnose only this package (used by iui setup). */\n cwd?: string;\n /** Config-tier checks only (no auth/registry) — for CI/pre-commit. */\n configOnly?: boolean;\n};\n\nfunction runConfigTierDiagnostics(\n targetCwd: string,\n opts: DoctorOptions | undefined,\n counters: { passed: number; failed: number },\n options: { includePackageJson?: boolean; includeSlotCheck?: boolean } = {},\n): void {\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n const includePackageJson = options.includePackageJson !== false;\n const includeSlotCheck = options.includeSlotCheck === true;\n\n if (includePackageJson) {\n if (hasPackageJson(targetCwd)) pass(\"package.json found\");\n else fail(\"package.json missing\");\n }\n\n if (opts?.fix === true && includePackageJson) {\n ensureProjectConfig(targetCwd);\n if (projectHasViteTooling(targetCwd)) {\n ensureInventiveUiViteConfig(targetCwd);\n }\n ensureComponentConfig(readComponentPackageManifest(targetCwd), targetCwd);\n }\n\n // Managed-slot import checks need a consumer install of @inventive-ui/components.\n // Skip in component-library / uninitialized packages (pre-commit / CI).\n if (\n includeSlotCheck &&\n isInsideProject(targetCwd) &&\n getInstalledPackageVersion(COMPONENTS_PACKAGE, targetCwd)\n ) {\n const slotValidity = checkGeneratedSlotValidity(targetCwd);\n if (slotValidity.ok) {\n pass(slotValidity.summary);\n } else {\n fail(slotValidity.summary);\n if (slotValidity.details) {\n for (const line of slotValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n ui.hint(\"Fix: reinstall @inventive-ui/components and rerun iui doctor\");\n }\n }\n\n const configValidity = checkComponentConfigValidity(targetCwd, {\n autoFix: opts?.fix === true,\n });\n if (configValidity.ok) {\n pass(configValidity.summary);\n } else {\n fail(configValidity.summary);\n if (configValidity.details) {\n for (const line of configValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const iuiTier = checkIuiConfigTierBleed(targetCwd, { autoFix: opts?.fix === true });\n if (iuiTier.ok) {\n pass(iuiTier.summary);\n } else {\n fail(iuiTier.summary);\n if (iuiTier.details) {\n for (const line of iuiTier.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const assetsValidity = checkAssetsConfigValidity(targetCwd);\n if (assetsValidity.ok) {\n pass(assetsValidity.summary);\n } else {\n fail(assetsValidity.summary);\n if (assetsValidity.details) ui.hint(assetsValidity.details);\n }\n\n const componentTier = checkComponentConfigTierBleed(targetCwd);\n if (componentTier.ok) {\n pass(componentTier.summary);\n } else {\n fail(componentTier.summary);\n if (componentTier.details) {\n for (const line of componentTier.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const compileFirst = checkCompileFirstReadiness(targetCwd, {\n strict: process.env.IUI_DOCTOR_STRICT === \"1\",\n });\n if (compileFirst.warnings.length === 0) {\n pass(\"Compile-first configuration looks ready\");\n } else {\n const strict = process.env.IUI_DOCTOR_STRICT === \"1\";\n for (const warning of compileFirst.warnings) {\n if (strict) fail(warning);\n else ui.warn(warning);\n }\n for (const hint of compileFirst.hints) {\n ui.hint(hint);\n }\n }\n\n const assetBound = checkAssetBoundBindings(targetCwd);\n if (assetBound.ok) {\n pass(assetBound.summary);\n } else {\n ui.warn(assetBound.summary);\n if (assetBound.details) ui.hint(assetBound.details);\n }\n}\n\nasync function runPackageDiagnostics(\n targetCwd: string,\n opts: DoctorOptions | undefined,\n counters: { passed: number; failed: number },\n): Promise<void> {\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n // CI / pre-commit: config tiers + compile-first (+ slots when applicable) only.\n if (opts?.configOnly) {\n runConfigTierDiagnostics(targetCwd, opts, counters, {\n includePackageJson: true,\n includeSlotCheck: true,\n });\n return;\n }\n\n if (hasPackageJson(targetCwd)) pass(\"package.json found\");\n else fail(\"package.json missing\");\n\n if (opts?.fix === true) {\n ensureProjectConfig(targetCwd);\n if (projectHasViteTooling(targetCwd)) {\n ensureInventiveUiViteConfig(targetCwd);\n }\n ensureComponentConfig(readComponentPackageManifest(targetCwd), targetCwd);\n }\n\n if (isInsideProject(targetCwd)) {\n pass(\"Inventive UI project initialized\");\n } else {\n fail(\"Not initialized\");\n }\n\n const framework = getFrameworkInstallStatus(targetCwd);\n if (checkFrameworkInstalled(targetCwd)) {\n pass(`Framework installed ${ui.dim(`v${framework.version ?? \"?\"}`)}`);\n if (framework.source === \"yarn-pnp\") {\n ui.kv(\"Framework resolver\", \"Yarn PnP\");\n }\n } else if (framework.source === \"declared\") {\n fail(\"Framework declared but not installed\");\n } else {\n fail(\"Framework not installed\");\n }\n\n const react = getReactStatus(targetCwd);\n const reactDom = getReactDomStatus(targetCwd);\n const vite = getViteStatus(targetCwd);\n\n if (react.status === \"ok\") {\n pass(`React installed ${ui.dim(`v${react.version}`)}`);\n } else if (react.status === \"wrong-version\") {\n fail(`React ${react.version} found — requires 19.x`);\n }\n\n if (vite.status === \"ok\") {\n pass(`Vite installed ${ui.dim(`v${vite.version}`)}`);\n } else if (vite.status === \"wrong-version\") {\n fail(`Vite ${vite.version} found — requires 6.x or newer`);\n }\n\n if (reactDom.status === \"ok\") {\n pass(`react-dom installed ${ui.dim(`v${reactDom.version}`)}`);\n } else if (reactDom.status === \"wrong-version\") {\n fail(`react-dom ${reactDom.version} found — requires 19.x`);\n }\n\n if (react.status === \"ok\" && reactDom.status === \"not-installed\") {\n fail(\"react-dom missing (required with React 19.x)\");\n }\n\n if (react.status === \"not-installed\" && vite.status === \"not-installed\") {\n fail(\"Neither React nor Vite installed (requires React 19.x or Vite 6.x+)\");\n }\n\n const components = readComponentManifest(targetCwd);\n const compCount = Object.keys(components).length;\n pass(`${compCount} component${compCount !== 1 ? \"s\" : \"\"} installed`);\n\n const packages = readPackageManifest(targetCwd);\n const pkgCount = Object.keys(packages).length;\n pass(`${pkgCount} asset package${pkgCount !== 1 ? \"s\" : \"\"} installed`);\n\n const slots = readSlotManifest(targetCwd);\n const slotCount = Object.keys(slots).length;\n pass(`${slotCount} slot${slotCount !== 1 ? \"s\" : \"\"} registered`);\n\n const compatibility = checkPackageCompatibility(targetCwd);\n if (compatibility.ok) {\n pass(compatibility.summary);\n } else {\n ui.warn(compatibility.summary);\n if (compatibility.details) ui.hint(compatibility.details);\n }\n\n const syncedDeps = syncInventiveUiDeclaredDependencies(targetCwd);\n if (syncedDeps.length > 0) {\n pass(\n `Synced package.json with installed versions (${syncedDeps.length} @inventive-ui package${syncedDeps.length === 1 ? \"\" : \"s\"})`,\n );\n for (const name of syncedDeps) {\n const version = getInstalledPackageVersion(name, targetCwd);\n if (version) ui.kv(name, `^${version}`);\n }\n }\n\n const auth = getAuthConfig();\n if (auth?.token) {\n const fwBaseline = getFrameworkUpdateBaselineVersion(targetCwd);\n const compInstalled = getInstalledPackageVersion(COMPONENTS_PACKAGE, targetCwd);\n const [latestFw, latestComp] = await Promise.all([\n fwBaseline ? getLatestVersionSafe(auth.token, \"framework\") : Promise.resolve(null),\n compInstalled ? getLatestVersionSafe(auth.token, \"components\") : Promise.resolve(null),\n ]);\n\n let behind = false;\n if (fwBaseline && latestFw && isVersionGreater(latestFw, fwBaseline)) {\n behind = true;\n ui.warn(`Framework v${fwBaseline} is behind the latest v${latestFw}`);\n }\n if (compInstalled && latestComp && isVersionGreater(latestComp, compInstalled)) {\n behind = true;\n ui.warn(`Components v${compInstalled} is behind the latest v${latestComp}`);\n }\n if (behind) {\n ui.hint(\"Run iui update to move to the latest versions.\");\n } else if ((fwBaseline && latestFw) || (compInstalled && latestComp)) {\n pass(\"Inventive UI packages are on the latest version\");\n }\n }\n\n const slotValidity = checkGeneratedSlotValidity(targetCwd);\n if (slotValidity.ok) {\n pass(slotValidity.summary);\n } else {\n fail(slotValidity.summary);\n if (slotValidity.details) {\n for (const line of slotValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n ui.hint(\"Fix: reinstall @inventive-ui/components and rerun iui doctor\");\n }\n\n const bootstrapSync = checkBootstrapSync(targetCwd, {\n autoFix: opts?.fix === true,\n });\n if (bootstrapSync.ok) {\n pass(bootstrapSync.summary);\n } else {\n fail(bootstrapSync.summary);\n if (bootstrapSync.details) {\n for (const line of bootstrapSync.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n if (!opts?.fix) {\n ui.hint(\"Fix: run iui doctor --fix to regenerate bootstrap artifacts\");\n }\n }\n\n runConfigTierDiagnostics(targetCwd, opts, counters, {\n includePackageJson: false,\n includeSlotCheck: false,\n });\n}\n\nexport async function doctorCommand(opts?: DoctorOptions): Promise<void> {\n try {\n const invocationCwd = process.cwd();\n const targets = opts?.cwd\n ? [path.resolve(opts.cwd)]\n : resolveSetupDoctorTargets(invocationCwd);\n const installRoot = resolveDependencyInstallRoot(invocationCwd);\n const multiPackage = targets.length > 1;\n\n ui.heading(\"Diagnostics\");\n\n const counters = { passed: 0, failed: 0 };\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n if (!opts?.configOnly) {\n const auth = getAuthConfig();\n if (auth?.token) {\n pass(\"Authenticated\");\n ui.kv(\"GitHub\", auth.github_id || \"—\");\n } else {\n fail(\"Not authenticated\");\n }\n\n if (auth?.token) {\n try {\n const license = await validateLicense(auth.token);\n pass(`License valid — ${formatPlanLabel(license.plan)}`);\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats (users)\", seatUsage);\n }\n } catch {\n fail(\"License validation failed\");\n }\n } else {\n fail(\"License check skipped (not authenticated)\");\n }\n\n const reachable = await pingRegistry();\n if (reachable) pass(\"Registry reachable\");\n else fail(\"Cannot reach the Inventive UI registry\");\n }\n\n for (const targetCwd of targets) {\n if (multiPackage) {\n ui.newline();\n const label = path.relative(installRoot, targetCwd) || path.basename(targetCwd);\n ui.kv(\"Package\", label);\n }\n await runPackageDiagnostics(targetCwd, opts, counters);\n }\n\n ui.newline();\n ui.separator();\n ui.newline();\n\n if (counters.failed === 0) {\n ui.done(`All ${counters.passed} checks passed`);\n } else {\n ui.fail(`${counters.failed} issue${counters.failed > 1 ? \"s\" : \"\"} found`);\n ui.hint(\"Resolve the issues above and re-run iui doctor\");\n ui.hint(\"Checklist: compatibility, managed slots, config validity, required types\");\n if (!opts?.fix) {\n ui.hint(\"Use iui doctor --fix to apply safe automatic repairs\");\n }\n ui.newline();\n process.exitCode = 1;\n }\n } catch (error) {\n handleError(error);\n process.exitCode = 1;\n }\n}\n","import { execFileSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { COMPONENT_CONFIG_FILE, COMPONENTS_PACKAGE, FRAMEWORK_PACKAGE, PROJECT_CONFIG_FILE, ASSETS_CONFIG_FILE, COMPILE_FIRST_MIN_FRAMEWORK_VERSION } from \"../constants.js\";\nimport {\n detectPackageManager,\n getInstalledPackageVersion,\n prepareWorkspaceForDependencyInstall,\n projectHasViteTooling,\n projectHasWebpackTooling,\n projectHasNextTooling,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext, resolvePackageDir, resolveIuiProjectRoot } from \"../utils/workspace.js\";\nimport { validateGeneratedSlotImports } from \"./slots.js\";\nimport {\n bootstrapGeneratedPath,\n expectedBootstrapImportPaths,\n resolveProjectConfigPaths,\n writeProjectBootstrapArtifacts,\n} from \"./bootstrap.js\";\nimport { installDevPackages } from \"../utils/security/process.js\";\nimport { compareVersions } from \"../utils/version.js\";\nimport { generatedAssetsDir } from \"./generated-paths.js\";\n\nexport interface CompatibilityCheckResult {\n ok: boolean;\n summary: string;\n details?: string;\n}\n\nfunction installDevTypeScript(cwd: string): boolean {\n const pm = detectPackageManager(cwd);\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installDevPackages(pm, \"typescript\", cwd);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function checkPackageCompatibility(cwd: string = process.cwd()): CompatibilityCheckResult {\n const frameworkVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n const componentsVersion = getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd);\n\n if (!frameworkVersion || !componentsVersion) {\n return {\n ok: false,\n summary: \"Core packages could not be verified\",\n details: \"Install @inventive-ui/framework and @inventive-ui/components, then re-run health checks.\",\n };\n }\n\n return {\n ok: true,\n summary: `Core packages installed (framework ${frameworkVersion}, components ${componentsVersion})`,\n };\n}\n\nexport function checkGeneratedSlotValidity(cwd: string = process.cwd()): CompatibilityCheckResult {\n const issues = validateGeneratedSlotImports(cwd);\n if (issues.length > 0) {\n return {\n ok: false,\n summary: \"Managed slot imports are invalid\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n }\n\n return {\n ok: true,\n summary: \"Managed slot imports are valid\",\n };\n}\n\nexport function checkComponentConfigValidity(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): CompatibilityCheckResult {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return {\n ok: false,\n summary: \"component.config.ts not found\",\n details: \"Create it with `iui init` or rebuild it from your manifest.\",\n };\n }\n\n const tsPkgDir = resolvePackageDir(\"typescript\", cwd);\n const tscPath = tsPkgDir ? path.join(tsPkgDir, \"bin\", \"tsc\") : path.join(cwd, \"node_modules\", \"typescript\", \"bin\", \"tsc\");\n if (!fs.existsSync(tscPath)) {\n if (!options.autoFix) {\n return {\n ok: false,\n summary: \"TypeScript is not installed in this project\",\n details: \"Run iui doctor --fix to install TypeScript, or install it manually.\",\n };\n }\n const installed = installDevTypeScript(cwd);\n if (!installed) {\n return {\n ok: false,\n summary: \"TypeScript is not installed in this project\",\n details: \"Automatic install failed. Install TypeScript and re-run health checks.\",\n };\n }\n }\n\n const baseArgs = [\n tscPath,\n \"--noEmit\",\n \"--pretty\",\n \"false\",\n \"--skipLibCheck\",\n \"--moduleResolution\",\n \"bundler\",\n \"--module\",\n \"esnext\",\n \"--target\",\n \"es2022\",\n ];\n\n const runTypeCheck = (args: string[]): { ok: true } | { ok: false; output: string } => {\n try {\n execFileSync(\n process.execPath,\n args,\n {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n return { ok: true };\n } catch (err) {\n const e = err as { stdout?: Buffer | string; stderr?: Buffer | string };\n const stdout = typeof e.stdout === \"string\" ? e.stdout : e.stdout?.toString(\"utf-8\") ?? \"\";\n const stderr = typeof e.stderr === \"string\" ? e.stderr : e.stderr?.toString(\"utf-8\") ?? \"\";\n return { ok: false, output: `${stdout}\\n${stderr}`.trim() };\n }\n };\n\n // Prefer --ignoreConfig so TypeScript 5.7+ does not emit TS5112 when a file argument is passed.\n const firstAttempt = runTypeCheck([...baseArgs, \"--ignoreConfig\", COMPONENT_CONFIG_FILE]);\n const result =\n firstAttempt.ok\n ? firstAttempt\n : /unknown compiler option.+--ignoreConfig/i.test(firstAttempt.output)\n ? runTypeCheck([...baseArgs, COMPONENT_CONFIG_FILE])\n : firstAttempt;\n\n if (result.ok) {\n\n return {\n ok: true,\n summary: \"component.config.ts values are type-valid\",\n };\n }\n\n const output = result.output;\n\n const configLines = output\n .split(\"\\n\")\n .filter((line) => line.includes(COMPONENT_CONFIG_FILE))\n .slice(0, 8);\n\n return {\n ok: false,\n summary: \"component.config.ts contains invalid values for installed component types\",\n details:\n configLines.length > 0\n ? configLines.join(\"\\n\")\n : output || \"Type validation failed for component.config.ts.\",\n };\n}\n\nexport interface CompileFirstCheckResult {\n warnings: string[];\n hints: string[];\n}\n\n/**\n * Compile-first readiness warnings (non-fatal). Does not block doctor success.\n */\nexport function checkCompileFirstReadiness(\n cwd: string = process.cwd(),\n _options: { strict?: boolean } = {},\n): CompileFirstCheckResult {\n const warnings: string[] = [];\n const hints: string[] = [];\n\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n if (fs.existsSync(configPath)) {\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n if (!/\\bbuild\\s*:\\s*\\{/.test(configContent)) {\n warnings.push(\"iui.config.ts is missing a compile-first `build` block\");\n hints.push(\n \"Framework applies default scanDirs/scanPackages — merge other build flags from docs/01-compile-first-guide.md or run a fresh iui init\",\n );\n } else {\n if (!/packageSafelist\\s*:\\s*false/.test(configContent)) {\n warnings.push(\"iui.config.ts build.packageSafelist should be false (scan-first)\");\n }\n if (!/includeShadeMatrix\\s*:\\s*false/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeShadeMatrix should be false unless you need the full compose() matrix\");\n }\n if (!/includeThemePresets\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeThemePresets should be true\");\n }\n if (!/resolvePalettePatterns\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.resolvePalettePatterns should be true\");\n }\n if (!/includeArbitraryScan\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeArbitraryScan should be true\");\n }\n if (!/useAst\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.useAst should be true\");\n }\n }\n }\n\n if (projectHasViteTooling(cwd)) {\n const viteCandidates = [\"vite.config.ts\", \"vite.config.mjs\", \"vite.config.js\"];\n const vitePath = viteCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!vitePath) {\n warnings.push(\"Vite tooling detected but no vite.config.* found\");\n } else {\n const viteContent = fs.readFileSync(vitePath, \"utf-8\");\n if (!/inventiveUiVite\\s*\\(/.test(viteContent)) {\n warnings.push(\"vite.config is missing inventiveUiVite() — compile-first CSS will not generate\");\n hints.push(\"Wire plugins: [...inventiveUiVite({ root: import.meta.dirname }), react()]\");\n }\n }\n }\n\n if (projectHasWebpackTooling(cwd) && !projectHasNextTooling(cwd)) {\n const webpackCandidates = [\n \"webpack.config.js\",\n \"webpack.config.cjs\",\n \"webpack.config.mjs\",\n \"webpack.config.ts\",\n ];\n const webpackPath = webpackCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!webpackPath) {\n warnings.push(\"Webpack tooling detected but no webpack.config.* found\");\n } else {\n const webpackContent = fs.readFileSync(webpackPath, \"utf-8\");\n if (!/inventiveUiWebpack\\s*\\(/.test(webpackContent)) {\n warnings.push(\"webpack.config is missing inventiveUiWebpack() — compile-first CSS will not generate\");\n hints.push('Wire plugins: [...inventiveUiWebpack()] from \"@inventive-ui/framework/webpack\"');\n hints.push(\"Ensure html-webpack-plugin is installed in the app (required for head theme/CSS inject)\");\n }\n }\n }\n\n if (projectHasNextTooling(cwd)) {\n const nextCandidates = [\"next.config.ts\", \"next.config.mjs\", \"next.config.js\", \"next.config.cjs\"];\n const nextPath = nextCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!nextPath) {\n warnings.push(\"Next.js detected but no next.config.* found\");\n } else {\n const nextContent = fs.readFileSync(nextPath, \"utf-8\");\n if (!/withIUI\\s*\\(/.test(nextContent)) {\n warnings.push(\"next.config is missing withIUI() — compile-first CSS will not generate\");\n hints.push('Wrap config: export default withIUI({ ... }) from \"@inventive-ui/framework/next\"');\n }\n }\n const layoutCandidates = [\n \"app/layout.tsx\",\n \"app/layout.jsx\",\n \"src/app/layout.tsx\",\n \"src/app/layout.jsx\",\n \"app/providers.tsx\",\n \"src/app/providers.tsx\",\n ].map((rel) => path.join(cwd, rel));\n const readableLayouts = layoutCandidates.filter((file) => fs.existsSync(file));\n const hasRegistry = readableLayouts.some((file) => {\n try {\n return /\\bIUIRegistry\\b/.test(fs.readFileSync(file, \"utf-8\"));\n } catch {\n return false;\n }\n });\n const hasBootstrapImport = readableLayouts.some((file) => {\n try {\n const content = fs.readFileSync(file, \"utf-8\");\n return (\n /next\\/bootstrap/.test(content) ||\n /[\"']iui-bootstrap[\"']/.test(content) ||\n /iui\\/bootstrap/.test(content)\n );\n } catch {\n return false;\n }\n });\n const hasProvider = readableLayouts.some((file) => {\n try {\n return /\\bIUIProvider\\b/.test(fs.readFileSync(file, \"utf-8\"));\n } catch {\n return false;\n }\n });\n if (!hasRegistry) {\n warnings.push(\"Next.js app should wrap the root layout with <IUIRegistry>\");\n hints.push('Import IUIRegistry from \"@inventive-ui/framework/next/registry\" in the root layout');\n }\n if (!hasBootstrapImport) {\n warnings.push(\"Next.js root layout should import bootstrap before render\");\n hints.push(\n 'Add `import \"@inventive-ui/framework/next/bootstrap\"` to the root layout (server) and client providers',\n );\n }\n if (!hasProvider) {\n warnings.push(\"Next.js app should use <IUIProvider> for bootstrap-state runtime\");\n hints.push('Wrap children with <IUIProvider> from \"@inventive-ui/framework\" inside IUIRegistry');\n }\n }\n\n // Flag accidental browser-graph imports of style maps (compile-first anti-pattern).\n const entryCandidates = [\n \"src/main.tsx\",\n \"src/main.jsx\",\n \"src/main.ts\",\n \"src/index.tsx\",\n \"src/index.jsx\",\n \"src/App.tsx\",\n \"app/providers.tsx\",\n \"src/app/providers.tsx\",\n \"app/layout.tsx\",\n \"src/app/layout.tsx\",\n ].map((rel) => path.join(cwd, rel));\n for (const file of entryCandidates) {\n if (!fs.existsSync(file)) continue;\n try {\n const content = fs.readFileSync(file, \"utf-8\");\n if (\n /from\\s+['\"][^'\"]*\\.generated['\"]/.test(content) ||\n /import\\s+['\"][^'\"]*\\.generated['\"]/.test(content)\n ) {\n warnings.push(\n `Do not import .generated style-map files into the browser (${path.relative(cwd, file)})`,\n );\n hints.push(\n \"Keep style maps on the scanner path (default src/.iui, or override build.scanDirs) — see Framework compile-first docs\",\n );\n break;\n }\n } catch {\n /* ignore */\n }\n }\n\n const fwVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n if (fwVersion && compareVersions(fwVersion, COMPILE_FIRST_MIN_FRAMEWORK_VERSION) < 0) {\n warnings.push(\n `Framework v${fwVersion} is below compile-first minimum v${COMPILE_FIRST_MIN_FRAMEWORK_VERSION}`,\n );\n hints.push(\"Run iui update to upgrade @inventive-ui/framework\");\n }\n\n hints.push(\n \"Compile-first: avoid dynamic utility templates like `p-${n}` — use static strings, style maps, or safelist (ESLint: customPlugin/no-dynamic-utility-class)\",\n );\n\n const giPath = path.join(cwd, \".gitignore\");\n if (fs.existsSync(giPath)) {\n const gi = fs.readFileSync(giPath, \"utf-8\");\n if (!gi.includes(\".iui/cache/\")) {\n warnings.push(\".gitignore missing IUI cache directory (.iui/cache/)\");\n hints.push(\"Run iui init or append .iui/cache/ from the IUI docs\");\n }\n }\n\n return { warnings, hints };\n}\n\n/**\n * Warn when assets.config.json requests scanned bindings but bound files are missing.\n */\nexport function checkAssetBoundBindings(cwd: string = process.cwd()): CompatibilityCheckResult {\n const assetsPath = path.join(cwd, ASSETS_CONFIG_FILE);\n if (!fs.existsSync(assetsPath)) {\n return { ok: true, summary: \"Asset binding check skipped (no assets.config.json)\" };\n }\n\n let assets: Record<string, unknown>;\n try {\n assets = fs.readJsonSync(assetsPath) as Record<string, unknown>;\n } catch {\n return { ok: false, summary: \"assets.config.json is not valid JSON\" };\n }\n\n if (assets.binding !== \"scanned\") {\n return { ok: true, summary: \"Asset slots use lazy binding (default)\" };\n }\n\n const registerBound = path.join(generatedAssetsDir(cwd), \"register-bound.ts\");\n if (!fs.existsSync(registerBound)) {\n return {\n ok: false,\n summary: 'binding is \"scanned\" but .iui/generated/assets/register-bound.ts is missing',\n details: \"Run any iui command to refresh the slot registry, or reinstall asset packages.\",\n };\n }\n\n return { ok: true, summary: \"Scanned asset bindings present\" };\n}\n\nexport function checkBootstrapSync(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): CompatibilityCheckResult {\n const iuiRoot = resolveIuiProjectRoot(cwd);\n const generatedPath = bootstrapGeneratedPath(iuiRoot);\n const bridgePath = path.join(cwd, \"src\", \"iui\", \"bootstrap.ts\");\n\n if (!fs.existsSync(generatedPath)) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n if (fs.existsSync(generatedPath)) {\n return { ok: true, summary: \"Generated bootstrap artifacts repaired\" };\n }\n }\n return {\n ok: false,\n summary: \"Generated bootstrap missing\",\n details: \"Expected .iui/generated/bootstrap.generated.tsx — run iui doctor --fix.\",\n };\n }\n\n if (!fs.existsSync(bridgePath)) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n if (fs.existsSync(bridgePath)) {\n return { ok: true, summary: \"Bootstrap bridge repaired\" };\n }\n }\n return {\n ok: false,\n summary: \"Bootstrap bridge missing\",\n details: \"Expected src/iui/bootstrap.ts — run iui doctor --fix.\",\n };\n }\n\n const configs = resolveProjectConfigPaths(iuiRoot);\n const missing: string[] = [];\n for (const [key, rel] of Object.entries(configs)) {\n const abs = path.resolve(iuiRoot, rel.replace(/^\\.\\//, \"\"));\n if (!fs.existsSync(abs)) missing.push(`${key}: ${rel}`);\n }\n if (missing.length > 0) {\n return {\n ok: false,\n summary: \"Bootstrap config paths from project.json are missing\",\n details: missing.map((line) => `- ${line}`).join(\"\\n\"),\n };\n }\n\n const expected = expectedBootstrapImportPaths(iuiRoot);\n const generated = fs.readFileSync(generatedPath, \"utf8\");\n const stale: string[] = [];\n for (const [key, importPath] of Object.entries(expected)) {\n if (!generated.includes(`\"${importPath}\"`)) {\n stale.push(`${key} import should be \"${importPath}\"`);\n }\n }\n\n if (stale.length > 0) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n const refreshed = fs.readFileSync(bootstrapGeneratedPath(iuiRoot), \"utf8\");\n const stillStale = Object.entries(expected).filter(\n ([, importPath]) => !refreshed.includes(`\"${importPath}\"`),\n );\n if (stillStale.length === 0) {\n return { ok: true, summary: \"Generated bootstrap refreshed from project.json\" };\n }\n }\n return {\n ok: false,\n summary: \"Generated bootstrap is stale\",\n details: stale.map((line) => `- ${line}`).join(\"\\n\"),\n };\n }\n\n return { ok: true, summary: \"Generated bootstrap matches project.json config paths\" };\n}\n\nexport {\n checkIuiConfigTierBleed,\n checkAssetsConfigValidity,\n checkComponentConfigTierBleed,\n} from \"../validation/configTierChecks.js\";\n","// ─── iui list ────────────────────────────────────────────────────────────────\n//\n// Display installed components, asset packages, and framework status.\n// With --available, show all components from the remote registry.\n\nimport {\n readComponentManifest,\n readComponentPackageManifest,\n readPackageManifest,\n readSlotManifest,\n isInsideProject,\n registryItemsMap,\n getInstalledPackageVersion,\n} from \"../utils/filesystem.js\";\nimport { fetchComponentRegistry } from \"../services/registry.js\";\nimport { getAuthConfig } from \"../services/auth.js\";\nimport { checkFrameworkInstalled, getFrameworkInstallStatus } from \"../services/framework.js\";\nimport { getLatestVersionSafe } from \"../services/version-check.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport {\n ASSET_PACKAGES_MAP,\n ASSET_CATEGORY_LABELS,\n COMPONENTS_PACKAGE,\n} from \"../constants.js\";\n\nexport async function listCommand(opts: { available?: boolean }): Promise<void> {\n try {\n if (opts.available) {\n ui.heading(\"Available Components\");\n\n const auth = getAuthConfig();\n const fetched = await fetchComponentRegistry(auth?.token);\n const registry = fetched.registry;\n if (!registry || registry.items.length === 0) {\n ui.info(\"Could not fetch component registry.\");\n if (fetched.apiFailure) ui.hint(fetched.apiFailure);\n ui.hint(\"Check your network connection or run: iui doctor\");\n return;\n }\n\n const installed = isInsideProject() ? readComponentManifest() : {};\n const items = registry.items;\n\n let idx = 0;\n for (const item of items) {\n idx++;\n const installedTag = installed[item.name]\n ? ui.success(`\\u2714 v${installed[item.name]}`)\n : \"\";\n const suffix = installedTag ? ` ${installedTag}` : \"\";\n ui.numberedItem(idx, `${item.title}${suffix}`);\n ui.treeLine();\n }\n\n ui.newline();\n ui.info(`${items.length} components available`);\n ui.newline();\n return;\n }\n\n // ── Project required for installed view ──────────────────────────\n if (!isInsideProject()) {\n throw new CLIError(\n \"Not an Inventive UI project.\",\n \"iui init\",\n );\n }\n\n // Resolve display names from local manifest (no API call needed)\n const pkgManifest = readComponentPackageManifest();\n const itemsLookup = registryItemsMap(pkgManifest);\n\n // Best-effort latest-version lookups for drift annotations (auth optional).\n const auth = getAuthConfig();\n const componentsVersion = getInstalledPackageVersion(COMPONENTS_PACKAGE);\n const frameworkStatus = getFrameworkInstallStatus();\n const [latestFramework, latestComponents] = await Promise.all([\n frameworkStatus.version\n ? getLatestVersionSafe(auth?.token, \"framework\")\n : Promise.resolve(null),\n componentsVersion\n ? getLatestVersionSafe(auth?.token, \"components\")\n : Promise.resolve(null),\n ]);\n\n const updateTag = (current: string | null, latest: string | null): string =>\n current && latest && isVersionGreater(latest, current)\n ? ` ${ui.warning(`(update available → v${latest})`)}`\n : \"\";\n\n // ── Framework ────────────────────────────────────────────────────\n ui.heading(\"Framework\");\n if (checkFrameworkInstalled()) {\n const version = frameworkStatus.version ?? \"?\";\n ui.checkPass(\n `Inventive UI Framework ${ui.dim(`v${version}`)}${updateTag(frameworkStatus.version, latestFramework)}`,\n );\n if (frameworkStatus.source === \"yarn-pnp\") {\n ui.kv(\"Resolver\", \"Yarn PnP\");\n }\n } else if (frameworkStatus.source === \"declared\") {\n const declared = frameworkStatus.declaredVersion ?? \"?\";\n ui.checkFail(`Framework declared ${ui.dim(`v${declared}`)} but not installed`);\n ui.hint(\"Run your package manager install command or: iui install framework\");\n } else {\n ui.checkFail(\"Framework not installed\");\n ui.hint(\"Run: iui install framework\");\n }\n\n // ── Components ───────────────────────────────────────────────────\n ui.heading(\"Installed Components\");\n const components = readComponentManifest();\n const componentKeys = Object.keys(components);\n\n if (componentKeys.length === 0) {\n ui.info(\"Component library is not installed yet.\");\n ui.hint(\"Run: iui install components\");\n } else {\n let idx = 0;\n for (const [slug, version] of Object.entries(components)) {\n idx++;\n const name = itemsLookup[slug]?.title ?? slug;\n ui.numberedItem(idx, `${name.padEnd(22)} ${ui.dim(`v${version}`)}`);\n }\n ui.newline();\n ui.info(\n `${componentKeys.length} component${componentKeys.length !== 1 ? \"s\" : \"\"} installed${updateTag(componentsVersion, latestComponents)}`,\n );\n }\n\n // ── Asset Packages ───────────────────────────────────────────────\n ui.heading(\"Asset Packages\");\n const packages = readPackageManifest();\n const pkgKeys = Object.keys(packages);\n\n if (pkgKeys.length === 0) {\n ui.info(\"No asset packages installed.\");\n ui.hint(\"Run: iui install assets\");\n } else {\n for (const [pkgId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const label = def?.displayName ?? pkgId;\n const cat = def ? ui.dim(`[${ASSET_CATEGORY_LABELS[def.category]}]`) : \"\";\n ui.bulletItem(`${label} ${cat}`, meta.installedAt);\n }\n ui.newline();\n ui.info(`${pkgKeys.length} asset package${pkgKeys.length !== 1 ? \"s\" : \"\"} installed`);\n }\n\n // ── Slots ────────────────────────────────────────────────────────\n ui.heading(\"Slot Registry\");\n const slots = readSlotManifest();\n const slotKeys = Object.keys(slots);\n\n if (slotKeys.length === 0) {\n ui.info(\"No component slots available yet.\");\n } else {\n for (const [key, record] of Object.entries(slots)) {\n const displayName = itemsLookup[key]?.title ?? key;\n const slotInfo = record.supportedSlots?.length\n ? `${record.slotType} · slots: ${record.supportedSlots.join(\", \")}`\n : `${record.slotType}`;\n ui.bulletItem(\n displayName.padEnd(26),\n `${slotInfo} · v${record.version}`,\n );\n }\n ui.newline();\n ui.info(`${slotKeys.length} slot${slotKeys.length !== 1 ? \"s\" : \"\"} registered`);\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui update ──────────────────────────────────────────────────────────────\n//\n// Check the registry for component updates and apply eligible ones.\n\nimport ora from \"ora\";\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n fetchComponentUpdates,\n fetchLatestScopedPackageVersion,\n fetchLatestCliVersion,\n} from \"../services/registry.js\";\nimport { installComponentsPackage } from \"../services/installer.js\";\nimport { installAssetPackage } from \"../services/assets.js\";\nimport {\n installFramework,\n getFrameworkInstallStatus,\n getFrameworkUpdateBaselineVersion,\n} from \"../services/framework.js\";\nimport { syncInventiveUiDeclaredDependencies } from \"../utils/declared-deps.js\";\nimport {\n readProjectMeta,\n readComponentManifest,\n readPackageManifest,\n readComponentPackageManifest,\n isInsideProject,\n registryItemsMap,\n} from \"../utils/filesystem.js\";\nimport { promptUpdateSelection, confirm } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport { ASSET_PACKAGES_MAP } from \"../constants.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\n\ndeclare const __CLI_VERSION__: string;\n\ntype UpdateOptions = {\n yes?: boolean;\n check?: boolean;\n source?: string;\n};\n\nexport async function updateCommand(opts: UpdateOptions = {}): Promise<void> {\n try {\n ui.heading(\"Update\");\n\n const auth = await ensureAuthSession();\n await ensureLicenseSession();\n const inProject = isInsideProject();\n\n const currentCliVersion =\n typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"unknown\";\n const latestCliVersion = await fetchLatestCliVersion(auth.token);\n const cliUpdateAvailable =\n latestCliVersion !== null && isVersionGreater(latestCliVersion, currentCliVersion);\n if (latestCliVersion && cliUpdateAvailable) {\n ui.warn(`CLI update available: ${currentCliVersion} ${ui.dim(\"→\")} ${latestCliVersion}`);\n ui.hint(\"Use the latest CLI immediately with: npx inventive-ui@latest\");\n } else if (latestCliVersion) {\n ui.ok(`CLI is up to date ${ui.dim(`v${currentCliVersion}`)}`);\n }\n\n if (!inProject) {\n ui.info(\"Not in an initialized project. Skipping component/asset updates.\");\n ui.hint(\"Run iui init in your project directory to enable full updates.\");\n return;\n }\n\n const project = readProjectMeta();\n if (!project) {\n throw new CLIError(\"Project metadata missing.\", \"Run iui init to repair project setup.\");\n }\n\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n\n const installedComponents = readComponentManifest(installCwd);\n const installedAssets = readPackageManifest(installCwd);\n const pkgManifest = readComponentPackageManifest(installCwd);\n const itemsLookup = registryItemsMap(pkgManifest);\n\n // ── Fetch updates ══════════════════════════════════════════════════\n const spinner = ora({ text: \"Checking registry…\", prefixText: \" \" }).start();\n const updates = await fetchComponentUpdates(auth.token, project.projectId, installedComponents);\n spinner.stop();\n\n const available = updates.filter(\n (u) => isVersionGreater(u.latest_version, u.current_version),\n );\n const eligibleAvailable = available.filter((u) => u.eligible);\n\n if (available.length === 0) {\n ui.info(\"No component updates available.\");\n } else if (eligibleAvailable.length === 0) {\n ui.warn(\"Updates available but your update window has expired.\");\n ui.hint(\"Renew at inventiveui.com to access newer versions.\");\n }\n\n const nonInteractive = opts.check === true || opts.yes === true;\n const shouldAutoApply = opts.yes === true;\n const source = opts.source === \"registry\" ? \"registry\" : \"api\";\n let selectedComponents: string[] = [];\n let selectedAssets: string[] = [];\n\n if (available.length > 0) {\n ui.subheading(\"Component updates\");\n ui.newline();\n for (const u of available) {\n const name = itemsLookup[u.name]?.title ?? u.name;\n ui.updateRow(name, u.current_version, u.latest_version, u.eligible);\n }\n ui.newline();\n\n if (shouldAutoApply) {\n selectedComponents = eligibleAvailable.map((u) => u.name);\n } else if (!nonInteractive) {\n selectedComponents = await promptUpdateSelection(\n available.map((u) => ({\n name: u.name,\n displayName: itemsLookup[u.name]?.title ?? u.name,\n current: u.current_version,\n latest: u.latest_version,\n eligible: u.eligible,\n })),\n \"Select components to update\",\n );\n }\n }\n\n const frameworkStatus = getFrameworkInstallStatus(installCwd);\n const frameworkBaselineVersion = getFrameworkUpdateBaselineVersion(installCwd);\n const latestFrameworkVersion = await fetchLatestScopedPackageVersion(auth.token, \"framework\");\n const frameworkUpdateAvailable =\n frameworkStatus.installed\n && frameworkBaselineVersion\n && latestFrameworkVersion\n && isVersionGreater(latestFrameworkVersion, frameworkBaselineVersion);\n\n let shouldUpdateFramework = false;\n if (frameworkUpdateAvailable) {\n ui.subheading(\"Framework update\");\n ui.newline();\n ui.updateRow(\n \"Inventive UI Framework\",\n frameworkBaselineVersion ?? \"unknown\",\n latestFrameworkVersion ?? \"unknown\",\n true,\n );\n ui.newline();\n if (shouldAutoApply) {\n shouldUpdateFramework = true;\n } else if (!nonInteractive) {\n shouldUpdateFramework = await confirm(\"Update Inventive UI Framework now?\", true);\n }\n }\n\n const assetEntries = Object.entries(installedAssets);\n const assetVersionResults = await Promise.all(\n assetEntries.map(async ([assetId, meta]) => {\n const latest = await fetchLatestScopedPackageVersion(auth.token, assetId);\n return { assetId, meta, latest };\n }),\n );\n const assetUpdates: Array<{ id: string; displayName: string; current: string; latest: string }> =\n [];\n for (const { assetId, meta, latest } of assetVersionResults) {\n if (latest && isVersionGreater(latest, meta.version)) {\n assetUpdates.push({\n id: assetId,\n displayName: ASSET_PACKAGES_MAP[assetId]?.displayName ?? assetId,\n current: meta.version,\n latest,\n });\n }\n }\n\n if (assetUpdates.length > 0) {\n ui.subheading(\"Asset package updates\");\n ui.newline();\n for (const asset of assetUpdates) {\n ui.updateRow(asset.displayName, asset.current, asset.latest, true);\n }\n ui.newline();\n\n if (shouldAutoApply) {\n selectedAssets = assetUpdates.map((asset) => asset.id);\n } else if (!nonInteractive) {\n selectedAssets = await promptUpdateSelection(\n assetUpdates.map((asset) => ({\n name: asset.id,\n displayName: asset.displayName,\n current: asset.current,\n latest: asset.latest,\n eligible: true,\n })),\n \"Select asset packages to update\",\n );\n }\n } else {\n ui.info(\"No asset package updates available.\");\n }\n\n const hasAnyUpdates =\n cliUpdateAvailable\n || available.length > 0\n || assetUpdates.length > 0\n || Boolean(frameworkUpdateAvailable);\n\n const alignDeclaredDependencies = (): string[] =>\n syncInventiveUiDeclaredDependencies(installCwd);\n\n if (opts.check === true) {\n if (hasAnyUpdates) {\n ui.done(\"Updates are available.\");\n process.exitCode = 1;\n } else {\n ui.done(\"Everything is up to date.\");\n }\n return;\n }\n\n if (!hasAnyUpdates) {\n const synced = alignDeclaredDependencies();\n if (synced.length > 0) {\n ui.ok(\n `Aligned package.json with hoisted installs (${synced.length} @inventive-ui package${synced.length === 1 ? \"\" : \"s\"})`,\n );\n ui.done(\"Workspace dependency declarations are now in sync.\");\n return;\n }\n ui.done(\"Everything is up to date.\");\n return;\n }\n\n if (\n selectedComponents.length === 0\n && selectedAssets.length === 0\n && !shouldUpdateFramework\n ) {\n if (available.length > 0 && eligibleAvailable.length === 0 && assetUpdates.length === 0 && !frameworkUpdateAvailable) {\n ui.done(\"No eligible updates available.\");\n } else {\n ui.done(\"No updates selected.\");\n }\n return;\n }\n\n let updatedComponents = 0;\n let updatedAssets = 0;\n let updatedFramework = 0;\n\n if (shouldUpdateFramework) {\n await installFramework({\n token: auth.token,\n projectId: project.projectId,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: latestFrameworkVersion ?? undefined,\n });\n updatedFramework = 1;\n }\n\n if (selectedComponents.length > 0) {\n const componentsTargetVersion =\n (await fetchLatestScopedPackageVersion(auth.token, \"components\"))\n ?? eligibleAvailable[0]?.latest_version\n ?? undefined;\n\n const result = await installComponentsPackage({\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: componentsTargetVersion,\n });\n updatedComponents =\n result.previousVersion && result.previousVersion === result.version\n ? 0\n : selectedComponents.length;\n }\n\n for (const assetId of selectedAssets) {\n const assetTarget = assetUpdates.find((asset) => asset.id === assetId);\n const result = await installAssetPackage(assetId, {\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: assetTarget?.latest,\n });\n if (!result.previousVersion || result.previousVersion !== result.version) {\n updatedAssets += 1;\n }\n }\n\n const synced = alignDeclaredDependencies();\n if (synced.length > 0) {\n ui.ok(\n `Aligned package.json with installed versions (${synced.length} @inventive-ui package${synced.length === 1 ? \"\" : \"s\"})`,\n );\n }\n\n ui.done(\n `Update complete: ${updatedFramework} framework, ${updatedComponents} component${updatedComponents === 1 ? \"\" : \"s\"}, ${updatedAssets} asset package${updatedAssets === 1 ? \"\" : \"s\"}.`,\n );\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── Framework install (via `iui install framework`) ───────────────────────\n\nimport { requireAuth } from \"../services/auth.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n installFramework,\n checkFrameworkInstalled,\n getFrameworkInstallStatus,\n} from \"../services/framework.js\";\nimport {\n isInsideProject,\n readProjectMeta,\n} from \"../utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"../utils/workspace.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\n\nexport async function frameworkInstallCommand(opts?: { source?: string }): Promise<void> {\n try {\n ui.heading(\"Install Framework\");\n\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n\n const auth = requireAuth();\n const project = readProjectMeta()!;\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n\n await installFramework({\n token: auth.token,\n projectId: project.projectId,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n\n if (checkFrameworkInstalled(installCwd)) {\n const status = getFrameworkInstallStatus(installCwd);\n if (status.version) {\n ui.kv(\"Version\", status.version);\n }\n }\n\n ui.done(\"Framework is ready.\");\n ui.nextSteps([\n \"iui install components — Install component library\",\n \"iui install assets — Install asset packages\",\n ]);\n } catch (error) {\n handleError(error);\n }\n}\n","export type SlotRegistryRunMode = \"validate\" | \"repair\";\n\nexport interface SlotRegistryRunPolicy {\n mode: SlotRegistryRunMode;\n repairInstall: boolean;\n}\n\nconst REPAIR_COMMANDS = new Set([\n \"install\",\n \"update\",\n \"assets\",\n]);\n\nexport function resolveSlotRegistryRunPolicy(\n commandName: string,\n options?: { fix?: boolean },\n): SlotRegistryRunPolicy {\n if (commandName === \"doctor\" && options?.fix === true) {\n return { mode: \"repair\", repairInstall: true };\n }\n if (REPAIR_COMMANDS.has(commandName)) {\n return { mode: \"repair\", repairInstall: true };\n }\n return { mode: \"validate\", repairInstall: false };\n}\n\n"],"mappings":"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","names":["path","boxen","hint","boxen","hint","ora","path","path","fileURLToPath","os","fs","fs","path","fs","path","os","now","fs","path","path","path","fs","path","path","fs","fs","path","dir","iuiRoot","at","fs","path","__dirname","newArr","newPluginsProp","newProps","dedupeProp","resolveObj","newResolveProp","newResolveProps","newResolveObj","newConfigProps","excludeProp","optimizeObj","newOptimizeProp","newOptimizeProps","newOptimizeObj","ts","path","fs","path","fs","ts","path","fs","z","path","fs","assets","path","path","path","path","os","fs","fileURLToPath","assets","path","fs","path","fs","runSyncInstall","os","separator","path","devices","chalk","hint","chalk","ok","path","ora","parseApiErrorBody","parseApiErrorBody","hint","hint","path","fs","os","path","hint","path","os","path","fs","path","fs","path","fs","runSyncInstall","step","FRAMEWORK_PACKAGE","fs","path","runSyncInstall","ora","fs","path","fs","path","fs","path","fs","path","path","fs","path","fs","fs","path","fs","path","fs","path","path","iuiProjectRoot","path","path","iuiProjectRoot","fs","hint","path","fs","fs","existingSlots","path","iuiProjectRoot","iuiRoot","path","fs","fs","path","path","fs","iuiRoot","iuiRoot","path","fs","fs","runSyncInstall","iuiRoot","path","ora","result","now","path","ora","ora","ora","ora","now","inquirer","chalk","PROMPT_PREFIX","devices","inquirer","hint","ok","path","fs","ora","path","execFileSync","path","fs","path","fs","execFileSync","assets","iuiRoot","fail","warning","hint","path","path","fs","installCmd","ora","runSyncInstall","auth","ora","ora","synced","path"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/ui.ts","../src/utils/errors.ts","../src/utils/security/terminal.ts","../src/commands/login.ts","../src/services/auth.ts","../src/utils/security/apiOrigin.ts","../src/constants.ts","../src/utils/filesystem.ts","../src/utils/security/fsSecure.ts","../src/utils/atomic.ts","../src/utils/security/paths.ts","../src/utils/security/process.ts","../src/utils/version.ts","../src/utils/workspace.ts","../src/validation/registryManifest.ts","../src/utils/theme-config-scaffold.ts","../src/utils/security/identifiers.ts","../src/utils/config-patch/vite-config.ts","../src/utils/config-patch/iui-config.ts","../src/utils/config-patch/component-config.ts","../src/utils/componentExports.ts","../src/validation/configTierChecks.ts","../src/validation/configSchemas.ts","../src/services/iui-paths.ts","../src/utils/prompts.ts","../src/commands/init.ts","../src/services/license.ts","../src/services/project.ts","../src/constants/registry-api-errors.ts","../src/services/registry.ts","../src/services/framework.ts","../src/services/registry-download.ts","../src/utils/declared-deps.ts","../src/services/package-install.ts","../src/services/version-check.ts","../src/services/installer.ts","../src/services/slot-registry.ts","../src/services/registry-lock.ts","../src/services/slots.ts","../src/utils/public-slot-contract.ts","../src/utils/slot-emitters.ts","../src/utils/security/fsSafe.ts","../src/services/asset-bound.ts","../src/services/generated-paths.ts","../src/services/workspace-bootstrap.ts","../src/services/bootstrap.ts","../src/services/session.ts","../src/utils/datetime.ts","../src/services/install-context.ts","../src/services/assets.ts","../src/commands/assets.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/devices.ts","../src/commands/team.ts","../src/commands/deploy-token.ts","../src/commands/setup.ts","../src/commands/doctor.ts","../src/services/health.ts","../src/commands/list.ts","../src/commands/update.ts","../src/commands/framework.ts","../src/services/slot-registry-policy.ts"],"sourcesContent":["// ─── Inventive UI CLI ────────────────────────────────────────────────────────\n\nprocess.title = \"iui\";\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { printBanner } from \"./utils/ui.js\";\nimport { shouldShowBanner } from \"./utils/security/terminal.js\";\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { devicesListCommand, devicesRevokeCommand } from \"./commands/devices.js\";\nimport {\n teamAddCommand,\n teamListCommand,\n teamRemoveCommand,\n} from \"./commands/team.js\";\nimport {\n deployTokenCreateCommand,\n deployTokenListCommand,\n deployTokenRevokeCommand,\n} from \"./commands/deploy-token.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { frameworkInstallCommand } from \"./commands/framework.js\";\nimport {\n assetsAddCommand,\n assetsRemoveCommand,\n assetsListCommand,\n} from \"./commands/assets.js\";\nimport {\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource,\n} from \"./constants.js\";\nimport { ensureAuthSession } from \"./services/session.js\";\nimport { prepareInstallContext } from \"./services/install-context.js\";\nimport { installComponentsPackage } from \"./services/installer.js\";\nimport { ensureSlotRegistry } from \"./services/slot-registry.js\";\nimport { resolveSlotRegistryRunPolicy } from \"./services/slot-registry-policy.js\";\nimport { handleError, CLIError } from \"./utils/errors.js\";\nimport { isInsideProject } from \"./utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"./utils/workspace.js\";\nimport * as ui from \"./utils/ui.js\";\n\nconst program = new Command();\n\ndeclare const __CLI_VERSION__: string;\n\nconst AUTH_EXEMPT_COMMANDS = new Set([\n \"login\",\n \"logout\",\n \"whoami\",\n \"doctor\",\n \"list\",\n]);\n\nprogram\n .name(\"iui\")\n .description(\"The official CLI for the Inventive UI Design System\")\n .version(typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"1.0.0\")\n .option(\"-C, --cwd <dir>\", \"Run as if started in the given directory\")\n .option(\"-q, --quiet\", \"Minimal output (also respects IUI_QUIET=1)\")\n .option(\"--no-color\", \"Disable ANSI colors\");\n\nprogram\n .command(\"login\")\n .description(\"Authenticate with GitHub and link your license\")\n .option(\"-f, --force\", \"Force re-authentication and register this device\")\n .option(\"--bootstrap\", \"After login, run optional setup prompts\")\n .action((opts: { force?: boolean; bootstrap?: boolean }) => loginCommand(opts));\n\nprogram\n .command(\"logout\")\n .description(\"Remove stored credentials\")\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show authenticated identity and license details\")\n .action(whoamiCommand);\n\nconst team = program\n .command(\"team\")\n .description(\"Manage team seat assignments (admin only)\");\n\nteam\n .command(\"list\", { isDefault: true })\n .description(\"List team seat assignments\")\n .option(\"--all\", \"Include inactive/removed seat records\")\n .action((opts: { all?: boolean }) => teamListCommand(opts.all === true));\n\nteam\n .command(\"add [email]\")\n .description(\"Add a user email to the team seats\")\n .action((email?: string) => teamAddCommand(email));\n\nteam\n .command(\"remove [email]\")\n .description(\"Remove a user email from active team seats\")\n .action((email?: string) => teamRemoveCommand(email));\n\nconst devices = program\n .command(\"devices\")\n .description(\"Manage authorized CLI devices\");\n\ndevices\n .command(\"list\", { isDefault: true })\n .description(\"List all authorized devices\")\n .action(devicesListCommand);\n\ndevices\n .command(\"revoke [device-id]\")\n .description(\"Revoke an authorized device\")\n .action((deviceId?: string) => devicesRevokeCommand(deviceId));\n\nconst deployToken = program\n .command(\"deploy-token\")\n .description(\"Manage scoped deploy tokens for CI and hosting platforms\");\n\ndeployToken\n .command(\"list\", { isDefault: true })\n .description(\"List deploy tokens\")\n .action(deployTokenListCommand);\n\ndeployToken\n .command(\"create [name]\")\n .description(\"Create a new deploy token\")\n .option(\"--days <days>\", \"Token validity in days (1-30)\", \"7\")\n .option(\"--packages <packages>\", \"Comma-separated package ids or '*'\", \"*\")\n .action((name?: string, opts?: { days?: string; packages?: string }) =>\n deployTokenCreateCommand(name, opts),\n );\n\ndeployToken\n .command(\"revoke <token-id>\")\n .description(\"Revoke a deploy token\")\n .action((tokenId: string) => deployTokenRevokeCommand(tokenId));\n\nprogram\n .command(\"init\")\n .description(\"Initialize an Inventive UI project in the current directory\")\n .option(\"-f, --framework <framework>\", 'Framework preset: \"react\" | \"vite\"')\n .option(\"-y, --yes\", \"Run setup non-interactively with default confirmations\")\n .option(\n \"--workspace\",\n \"Monorepo only: initialize once at the workspace root and link all workspace apps\",\n )\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action(\n (opts: {\n source?: string;\n framework?: \"react\" | \"vite\";\n yes?: boolean;\n workspace?: boolean;\n }) => initCommand(opts),\n );\n\nprogram\n .command(\"setup\")\n .description(\"Set up a cloned project: configure registry, install dependencies, run diagnostics\")\n .option(\"--fix\", \"Apply safe automatic fixes during diagnostics\")\n .option(\"-y, --yes\", \"Run non-interactively with default confirmations\")\n .action((opts: { fix?: boolean; yes?: boolean }) => setupCommand(opts));\n\nprogram\n .command(\"list\")\n .description(\"Show installed components, packages, and project status\")\n .option(\"-a, --available\", \"Show all available components\")\n .action((opts: { available?: boolean }) => listCommand(opts));\n\nprogram\n .command(\"install <target> [packages...]\")\n .description(\"Install runtime targets: framework | components | assets [package-ids...]\")\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action(async (target: string, packages: string[], opts: { source?: string }) => {\n try {\n if (target === \"framework\") {\n await frameworkInstallCommand(opts);\n return;\n }\n if (target === \"components\") {\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n const auth = await ensureAuthSession();\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n await installComponentsPackage({\n token: auth.token,\n source: opts.source === \"registry\" ? \"registry\" : \"api\",\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n return;\n }\n if (target === \"assets\") {\n await assetsAddCommand(packages ?? [], opts);\n return;\n }\n throw new CLIError(\n `Unknown install target: ${target}`,\n \"Supported targets: framework, components, assets\",\n );\n } catch (error) {\n handleError(error);\n }\n });\n\nprogram\n .command(\"update\")\n .description(\"Check for and apply framework, component, and asset updates\")\n .option(\"-y, --yes\", \"Apply all eligible updates without prompts\")\n .option(\"--check\", \"Check for updates only (exit code 1 when updates exist)\")\n .option(\n CLI_INSTALL_SOURCE_FLAGS,\n CLI_INSTALL_SOURCE_DESCRIPTION,\n defaultCliInstallSource(),\n )\n .action((opts: { yes?: boolean; check?: boolean; source?: string }) => updateCommand(opts));\n\nconst assets = program\n .command(\"assets\")\n .description(\"Manage asset packages (icons, illustrations, logos, etc.)\");\n\nassets\n .command(\"remove <package>\")\n .description(\"Remove an installed asset package\")\n .action((pkg: string) => assetsRemoveCommand(pkg));\n\nassets\n .command(\"list\")\n .description(\"Show all available and installed asset packages\")\n .action(assetsListCommand);\n\nprogram\n .command(\"doctor\")\n .description(\"Run project health diagnostics (read-only by default)\")\n .option(\"--fix\", \"Apply safe config patches (iui.config, vite.config, component.config)\")\n .option(\"--config-only\", \"Validate project config tiers only (no auth/registry)\")\n .action((opts: { fix?: boolean; configOnly?: boolean }) => doctorCommand(opts));\n\nif (shouldShowBanner()) {\n printBanner();\n}\n\nfunction topLevelCommandName(cmd: Command): string {\n let current = cmd;\n while (current.parent && current.parent.parent) {\n current = current.parent;\n }\n return current.name();\n}\n\nprogram.hook(\"preAction\", async (_thisCommand, actionCommand) => {\n const root = topLevelCommandName(actionCommand);\n const globalOpts = program.opts<{ cwd?: string }>();\n if (globalOpts.cwd) {\n process.chdir(path.resolve(globalOpts.cwd));\n }\n\n if (isInsideProject()) {\n try {\n const actionOpts =\n typeof (actionCommand as { opts?: () => Record<string, unknown> }).opts === \"function\"\n ? (actionCommand as { opts: () => Record<string, unknown> }).opts()\n : {};\n const slotPolicy = resolveSlotRegistryRunPolicy(root, {\n fix: actionOpts.fix === true,\n });\n const result = await ensureSlotRegistry({\n quiet: true,\n repairInstall: slotPolicy.repairInstall,\n mode: slotPolicy.mode,\n });\n if (result.status === \"repaired\") {\n ui.info(\"Slot registry repaired\");\n }\n } catch (error) {\n if (error instanceof CLIError) {\n ui.warn(error.message);\n if (error.hint) ui.hint(error.hint);\n } else {\n ui.warn(\"Slot registry validation failed; run iui doctor for diagnostics.\");\n }\n }\n }\n\n if (AUTH_EXEMPT_COMMANDS.has(root)) return;\n\n try {\n await ensureAuthSession();\n } catch (error) {\n handleError(error);\n }\n});\n\nprogram.parse();\n","// ─── UI Primitives ───────────────────────────────────────────────────────────\n//\n// Enterprise-grade terminal output for the Inventive UI CLI.\n\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport chalk from \"chalk\";\nimport gradient from \"gradient-string\";\nimport boxen from \"boxen\";\nimport { sanitizeTerminalOutput, shouldUseColor } from \"./security/terminal.js\";\n\ndeclare const __CLI_VERSION__: string;\n\nif (!shouldUseColor()) {\n chalk.level = 0;\n}\n\n// ── Brand palette ────────────────────────────────────────────────────────────\nconst BRAND = \"#6C5CE7\";\nconst ACCENT = \"#00CEFF\";\nconst SUCCESS = \"#00D68F\";\nconst WARNING = \"#FFAA00\";\nconst DANGER = \"#FF3D71\";\nconst DIM_FG = \"#6B7280\";\nconst SUBTLE = \"#A0AEC0\";\n\nconst brand = chalk.hex(BRAND);\nconst accent = chalk.hex(ACCENT);\nconst success = chalk.hex(SUCCESS);\nconst warning = chalk.hex(WARNING);\nconst danger = chalk.hex(DANGER);\nconst dim = chalk.hex(DIM_FG);\nconst subtle = chalk.hex(SUBTLE);\n\nconst iuiGradient = gradient([\"#4338CA\", \"#6C5CE7\", \"#8B5CF6\", \"#6366F1\"]);\n\n// ── First-run state ───────────────────────────────────────────────────────────\n\nconst BANNER_SEEN_FILE = path.join(os.homedir(), \".iui\", \".banner-seen\");\n\nfunction hasBannerBeenSeen(): boolean {\n try {\n return fs.existsSync(BANNER_SEEN_FILE);\n } catch {\n return false;\n }\n}\n\nfunction markBannerSeen(): void {\n try {\n fs.ensureDirSync(path.dirname(BANNER_SEEN_FILE));\n fs.writeFileSync(BANNER_SEEN_FILE, new Date().toISOString(), \"utf8\");\n } catch {\n // silently ignore — never let banner state block a command\n }\n}\n\n// ── ASCII Banners ────────────────────────────────────────────────────────────\n\nconst BANNER_FULL = [\n \" █████ █████ ███ █████ ██████████\",\n \"░░███ ░░███ ░░░ ░░███ ░░███░░███\",\n \" ░███ ████████ █████ █████ ██████ ████████ ███████ ████ █████ █████ ██████ ░███ ░███ ░███\",\n \" ░███░░███░░███░░███ ░░███ ███░░███░░███░░███░░░███░ ░░███░░███ ░░███ ███░░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███ ░███░███████ ░███ ░███ ░███ ░███ ░███ ░███░███████ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░░███ ███ ░███░░░ ░███ ░███ ░███ ███░███ ░░███ ███ ░███░░░ ░███ ░███ ░███\",\n \" █████████ █████ ░░█████ ░░██████ ████ █████ ░░█████ █████ ░░█████ ░░██████ ░░████████ █████\",\n \"░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░\",\n];\n\nconst BANNER_COMPACT = [\n \" ██████████ ██████████\",\n \"░░███░░███ ░░███░░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" ░███ ░███ ░███ ░███\",\n \" █████░░████████ █████\",\n \"░░░░░ ░░░░░░░░ ░░░░░\",\n];\n\nconst FULL_BANNER_WIDTH = 101;\n\nfunction resolveCliVersion(): string {\n try {\n return typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"1.0.0\";\n } catch {\n return \"1.0.0\";\n }\n}\n\nexport function printBanner(): void {\n if (hasBannerBeenSeen()) {\n printCompactBanner();\n return;\n }\n\n const cols = process.stdout.columns ?? 80;\n const lines = cols >= FULL_BANNER_WIDTH ? BANNER_FULL : BANNER_COMPACT;\n const version = resolveCliVersion();\n\n console.log();\n console.log(iuiGradient.multiline(lines.join(\"\\n\")));\n console.log();\n console.log(` ${dim(\"Inventive UI Design System\")} ${dim(`v${version}`)}`);\n console.log();\n\n markBannerSeen();\n}\n\nexport function printCompactBanner(): void {\n const version = resolveCliVersion();\n console.log();\n console.log(\n ` ${brand.bold(\"◆\")} ${chalk.white.bold(\"iui\")} ${dim(`v${version}`)}`,\n );\n console.log();\n}\n\n// ── Headers ──────────────────────────────────────────────────────────────────\n\nconst PREFIX = chalk.white.bold(\"iui\");\n\nexport function heading(title: string): void {\n console.log();\n console.log(` ${PREFIX} ${dim(\"·\")} ${chalk.white.bold(title)}`);\n console.log();\n}\n\nexport function subheading(title: string): void {\n console.log();\n console.log(` ${subtle(title)}`);\n console.log();\n}\n\n// ── Tree connectors (explicit tree output only) ───────────────────────────────\n\nexport function treeItem(msg: string, last = false): void {\n const connector = last ? dim(\"└\") : dim(\"├\");\n console.log(` ${connector} ${msg}`);\n}\n\nexport function treeLine(): void {\n console.log(` ${dim(\"│\")}`);\n}\n\n// ── Status lines ─────────────────────────────────────────────────────────────\n\nexport function info(msg: string): void {\n console.log(` ${chalk.blue(\"○\")} ${msg}`);\n}\n\nexport function ok(msg: string): void {\n console.log(` ${success(\"✓\")} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(` ${warning(\"▲\")} ${chalk.yellow(msg)}`);\n}\n\nexport function fail(msg: string): void {\n console.error(` ${danger(\"✗\")} ${chalk.red(msg)}`);\n}\n\nexport function step(msg: string): void {\n console.log(` ${dim(\"·\")} ${msg}`);\n}\n\nexport function done(msg: string): void {\n console.log();\n console.log(` ${success(\"✓\")} ${chalk.white.bold(msg)}`);\n console.log();\n}\n\nexport function newline(): void {\n console.log();\n}\n\n// ── Key-value ────────────────────────────────────────────────────────────────\n\nexport function kv(key: string, value: string): void {\n const paddedKey = dim(`${sanitizeTerminalOutput(key)}:`.padEnd(22));\n console.log(` ${paddedKey}${sanitizeTerminalOutput(value)}`);\n}\n\nexport function kvInline(key: string, value: string): void {\n console.log(` ${dim(key + \":\")} ${value}`);\n}\n\n// ── Lists ────────────────────────────────────────────────────────────────────\n\nexport function bulletItem(label: string, detail?: string): void {\n const d = detail ? ` ${dim(detail)}` : \"\";\n console.log(` ${dim(\"·\")} ${label}${d}`);\n}\n\nexport function numberedItem(n: number, label: string, detail?: string): void {\n const d = detail ? ` ${dim(detail)}` : \"\";\n const num = dim(`${String(n).padStart(2)}.`);\n console.log(` ${num} ${label}${d}`);\n}\n\n// ── Update rows ──────────────────────────────────────────────────────────────\n\nexport function updateRow(\n name: string,\n from: string,\n to: string,\n eligible: boolean,\n): void {\n const arrow = dim(\"→\");\n const status = eligible\n ? success(to)\n : danger(\"locked\") + dim(\" (update window expired)\");\n console.log(\n ` ${chalk.white(name.padEnd(22))} ${dim(from)} ${arrow} ${status}`,\n );\n}\n\n// ── Checks ───────────────────────────────────────────────────────────────────\n\nexport function checkPass(label: string): void {\n console.log(` ${success(\"✓\")} ${label}`);\n}\n\nexport function checkFail(label: string): void {\n console.log(` ${danger(\"✗\")} ${label}`);\n}\n\n// ── Boxes ────────────────────────────────────────────────────────────────────\n\nexport function boxMessage(title: string, lines: string[]): void {\n const content = [chalk.white.bold(title), \"\", ...lines].join(\"\\n\");\n console.log(\n boxen(content, {\n padding: 1,\n margin: { top: 1, bottom: 1, left: 2, right: 0 },\n borderColor: \"#6C5CE7\",\n borderStyle: \"round\",\n }),\n );\n}\n\nexport function inputBox(title: string, hint?: string): void {\n const lines = [chalk.white.bold(title)];\n if (hint) lines.push(subtle(hint));\n console.log(\n boxen(lines.join(\"\\n\"), {\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 0, bottom: 0, left: 2, right: 0 },\n borderColor: \"cyan\",\n borderStyle: \"round\",\n dimBorder: false,\n }),\n );\n}\n\n// ── Hints / next-steps ───────────────────────────────────────────────────────\n\nexport function hint(msg: string): void {\n console.log(` ${dim(sanitizeTerminalOutput(msg))}`);\n}\n\nexport function nextSteps(steps: string[]): void {\n const lines = steps.map((s) => `${accent(\"$\")} ${chalk.white(s)}`);\n console.log(\n boxen(lines.join(\"\\n\"), {\n title: dim(\"Next steps\"),\n titleAlignment: \"left\",\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 1, bottom: 1, left: 2, right: 0 },\n borderColor: \"gray\",\n borderStyle: \"round\",\n dimBorder: true,\n }),\n );\n}\n\n// ── Separator ────────────────────────────────────────────────────────────────\n\nexport function separator(): void {\n console.log(` ${dim(\"─\".repeat(48))}`);\n}\n\n// ── Re-exports ───────────────────────────────────────────────────────────────\n\nexport { brand, accent, success, warning, danger, dim, subtle };\nexport { chalk };\n","// ─── Error helpers ───────────────────────────────────────────────────────────\n\nimport * as ui from \"./ui.js\";\nimport boxen from \"boxen\";\n\n/** stderr/stdout from failed `execSync` / `spawnSync` (Node attaches these on status !== 0). */\nexport function formatExecSyncError(err: unknown): string | null {\n if (err instanceof CLIError) {\n const parts = [err.message, err.hint].filter(\n (part): part is string => typeof part === \"string\" && part.trim().length > 0,\n );\n return parts.length > 0 ? parts.join(\"\\n\") : null;\n }\n\n const e = err as {\n stderr?: unknown;\n stdout?: unknown;\n error?: { message?: string };\n message?: string;\n };\n const spawnErr =\n e?.error && typeof e.error.message === \"string\" ? e.error.message : null;\n const stderr =\n typeof e?.stderr === \"string\"\n ? e.stderr\n : Buffer.isBuffer(e?.stderr)\n ? e.stderr.toString(\"utf8\")\n : null;\n const stdout =\n typeof e?.stdout === \"string\"\n ? e.stdout\n : Buffer.isBuffer(e?.stdout)\n ? e.stdout.toString(\"utf8\")\n : null;\n const msg =\n err instanceof Error\n ? err.message\n : typeof e?.message === \"string\"\n ? e.message\n : spawnErr ?? (typeof err === \"string\" ? err : null);\n const joined = [msg, stderr, stdout].filter(Boolean).join(\"\\n\");\n return joined.trim() ? joined.trim() : null;\n}\n\n/** e.g. `ECONNRESET`, `ENOTFOUND` from `fetch` / Node errors */\nexport function getNodeErrorCode(err: unknown): string | undefined {\n if (err && typeof err === \"object\" && \"code\" in err) {\n const c = (err as { code?: unknown }).code;\n if (typeof c === \"string\") return c;\n if (c != null) return String(c);\n }\n return undefined;\n}\n\nfunction parseRetryAfterSeconds(value: string | null): number | null {\n if (!value) return null;\n\n const asNumber = Number(value);\n if (Number.isFinite(asNumber) && asNumber >= 0) {\n return Math.ceil(asNumber);\n }\n\n const when = Date.parse(value);\n if (Number.isNaN(when)) return null;\n const diffSec = Math.ceil((when - Date.now()) / 1000);\n return diffSec > 0 ? diffSec : 0;\n}\n\nfunction formatRetryAfter(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n if (secs === 0) return `${mins}m`;\n return `${mins}m ${secs}s`;\n}\n\nexport function throwIfRateLimited(response: Response, action: string): void {\n if (response.status !== 429) return;\n\n const retryAfter = parseRetryAfterSeconds(response.headers.get(\"retry-after\"));\n const hint = retryAfter === null\n ? \"Please retry shortly.\"\n : `Retry in ${formatRetryAfter(retryAfter)}.`;\n\n throw new CLIError(`Too many requests while ${action}.`, hint);\n}\n\nexport class CLIError extends Error {\n public readonly hint?: string;\n\n constructor(message: string, hint?: string) {\n super(message);\n this.name = \"CLIError\";\n this.hint = hint;\n Object.setPrototypeOf(this, CLIError.prototype);\n }\n}\n\n/**\n * Handle errors uniformly. Prints a branded, actionable error block and exits.\n */\nexport function handleError(error: unknown, exitCode = 1): never {\n console.log();\n\n if (error instanceof CLIError) {\n const lines = error.message.split(\"\\n\");\n const primary = lines[0];\n const rest = lines.slice(1);\n\n ui.fail(primary);\n\n for (const line of rest) {\n if (line.trim()) ui.hint(line);\n }\n\n if (error.hint) {\n console.log();\n console.log(\n boxen(`${ui.accent(\"$\")} ${ui.chalk.white(error.hint)}`, {\n padding: { top: 0, bottom: 0, left: 1, right: 1 },\n margin: { top: 0, bottom: 0, left: 2, right: 0 },\n borderColor: \"#6C5CE7\",\n borderStyle: \"round\",\n dimBorder: true,\n title: ui.dim(\"fix\"),\n titleAlignment: \"left\",\n }),\n );\n }\n } else if (error instanceof Error) {\n ui.fail(error.message);\n } else {\n ui.fail(String(error));\n }\n\n console.log();\n const code =\n exitCode === 130 || (error instanceof CLIError && /cancelled/i.test(error.message))\n ? 130\n : exitCode;\n process.exit(code);\n}\n","// ─── Terminal output sanitization ──────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nconst CONTROL_CHARS =\r\n /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F\\u009B\\u009C\\u009D\\u009E\\u009F]/g;\r\n\r\n/** Strip control characters and ANSI/OSC sequences from untrusted strings. */\r\nexport function sanitizeTerminalOutput(value: string): string {\r\n return value\r\n .replace(/\\x1B\\][^\\x07]*(\\x07|\\x1B\\\\)/g, \"\")\r\n .replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, \"\")\r\n .replace(CONTROL_CHARS, \"\");\r\n}\r\n\r\nexport function shouldUseColor(): boolean {\r\n if (process.env.NO_COLOR !== undefined) return false;\r\n if (process.env.FORCE_COLOR === \"0\") return false;\r\n return Boolean(process.stdout.isTTY);\r\n}\r\n\r\nexport function shouldShowBanner(argv: string[] = process.argv): boolean {\r\n if (process.env.IUI_NO_BANNER === \"1\") return false;\r\n if (process.env.CI === \"true\" || process.env.CI === \"1\") return false;\r\n if (!process.stdout.isTTY) return false;\r\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) return false;\r\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) return false;\r\n return true;\r\n}\r\n\r\nexport function isInteractiveSession(): boolean {\r\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\r\n}\r\n\r\nexport function assertInteractivePrompt(context: string): void {\r\n if (isInteractiveSession() && process.env.IUI_CI !== \"1\") return;\r\n throw new CLIError(\r\n `Cannot run interactive ${context} in non-interactive mode.`,\r\n \"Pass required arguments, use -y/--yes where supported, or set IUI_CI=1 only in trusted CI with explicit flags.\",\r\n );\r\n}\r\n","// ─── iui login ───────────────────────────────────────────────────────────────\n\nimport ora from \"ora\";\nimport {\n startLogin,\n getAuthConfig,\n validateAuthToken,\n mergeValidatedAuth,\n} from \"../services/auth.js\";\nimport {\n writeGlobalNpmrcAuth,\n writeGlobalConfig,\n hasPackageJson,\n isInsideProject,\n ensureGitignoreHasNpmrc,\n} from \"../utils/filesystem.js\";\nimport { confirm } from \"../utils/prompts.js\";\nimport { initCommand } from \"./init.js\";\nimport { assetsAddCommand } from \"./assets.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { isInteractiveSession } from \"../utils/security/terminal.js\";\n\ntype LoginOptions = {\n force?: boolean;\n bootstrap?: boolean;\n};\n\nasync function runPostLoginBootstrap(): Promise<void> {\n const insideProject = isInsideProject();\n if (!insideProject) {\n if (!hasPackageJson()) {\n ui.hint(\"No package.json in this directory. Skipping initialization flow.\");\n return;\n }\n\n const shouldInit = await confirm(\"Initialize this project now?\", true);\n if (!shouldInit) return;\n await initCommand({ yes: process.env.IUI_YES === \"1\" || process.env.IUI_CI === \"1\" });\n }\n\n const shouldInstallAssets = await confirm(\"Install asset packages now?\", true);\n if (shouldInstallAssets) {\n await assetsAddCommand([]);\n }\n}\n\nexport async function loginCommand(opts?: LoginOptions): Promise<void> {\n try {\n ui.heading(\"Login\");\n const forceLogin = opts?.force === true;\n const runBootstrap = opts?.bootstrap === true;\n\n const existing = getAuthConfig();\n if (existing?.token && !forceLogin) {\n const validation = await validateAuthToken(existing.token).catch(() => null);\n if (validation?.valid) {\n const profile = mergeValidatedAuth(existing, validation);\n writeGlobalConfig(profile);\n\n ui.ok(\"Already signed in\");\n ui.kv(\"GitHub\", profile.github_id ?? \"—\");\n ui.kv(\"Email\", profile.email ?? \"—\");\n ui.kv(\"Role\", (profile.role ?? \"user\").toUpperCase());\n if (profile.plan_type) {\n ui.kv(\"Plan\", profile.plan_type === \"team\" ? \"Team\" : \"Individual\");\n }\n\n writeGlobalNpmrcAuth(profile.token);\n if (runBootstrap && isInteractiveSession()) {\n await runPostLoginBootstrap();\n } else if (runBootstrap) {\n ui.hint(\"Skipping bootstrap in non-interactive mode. Run iui init manually.\");\n }\n return;\n }\n\n ui.warn(\"Stored session is no longer valid. Re-authenticating…\");\n }\n\n if (existing?.token && forceLogin) {\n ui.hint(\"Forcing re-authentication and device registration.\");\n }\n\n ui.step(\"Opening browser for GitHub authentication…\");\n\n const spinner = ora({ text: \"Waiting for GitHub…\", prefixText: \" \" }).start();\n const config = await startLogin();\n spinner.succeed(\"Authenticated\");\n\n writeGlobalNpmrcAuth(config.token);\n ensureGitignoreHasNpmrc();\n\n ui.newline();\n ui.kv(\"GitHub\", config.github_id || \"—\");\n ui.kv(\"Email\", config.email || \"—\");\n ui.kv(\"Role\", (config.role ?? \"user\").toUpperCase());\n\n ui.done(\"You're in. Welcome to Inventive UI.\");\n\n if (runBootstrap && isInteractiveSession()) {\n await runPostLoginBootstrap();\n } else if (!runBootstrap) {\n ui.nextSteps([\"iui init — Set up this project\", \"iui list — View components\"]);\n }\n } catch (error) {\n handleError(error);\n }\n}\n","import open from \"open\";\nimport {\n API_BASE_URL,\n OAUTH_POLL_INTERVAL,\n OAUTH_MAX_ATTEMPTS,\n API_REQUEST_TIMEOUT_MS,\n} from \"../constants.js\";\nimport { assertSafeOAuthUrl } from \"../utils/security/apiOrigin.js\";\nimport type {\n AuthSession,\n AuthPollResult,\n GlobalConfig,\n DeviceInfo,\n DeployTokenInfo,\n DeployTokenCreateResult,\n AuthValidation,\n} from \"../types.js\";\nimport {\n readGlobalConfig,\n writeGlobalConfig,\n removeGlobalConfig,\n removeGlobalNpmrcAuth,\n} from \"../utils/filesystem.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\n\nasync function api<T>(path: string, opts?: RequestInit): Promise<T> {\n const res = await fetch(`${API_BASE_URL}${path}`, {\n ...opts,\n signal: opts?.signal ?? AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...opts?.headers },\n });\n throwIfRateLimited(res, `calling ${path}`);\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(`API error ${res.status}: ${body || res.statusText}`);\n }\n return res.json() as Promise<T>;\n}\n\nfunction parseApiErrorBody(body: string, fallback: string): string {\n const trimmed = body.trim();\n if (!trimmed) return fallback;\n if (!trimmed.startsWith(\"{\")) return `${fallback}: ${trimmed}`;\n try {\n const parsed = JSON.parse(trimmed) as { error?: unknown };\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n return parsed.error;\n }\n } catch {\n // ignore JSON parse errors, keep fallback\n }\n return fallback;\n}\n\nexport function mergeValidatedAuth(config: GlobalConfig, validation: AuthValidation): GlobalConfig {\n const githubLogin = validation.github_login?.trim();\n return {\n ...config,\n email: validation.email ?? config.email,\n github_id: githubLogin || config.github_id,\n role: validation.role ?? config.role,\n plan_type: validation.plan_type ?? config.plan_type,\n license_id: validation.license_id ?? config.license_id,\n expires_at: validation.expires_at ?? config.expires_at,\n };\n}\n\nlet validatedAuthCache: { token: string; config: GlobalConfig; at: number } | null = null;\nconst VALIDATED_AUTH_TTL_MS = 60_000;\n\nexport async function startLogin(): Promise<GlobalConfig> {\n const session = await api<AuthSession>(\"/auth/login\", { method: \"POST\" });\n assertSafeOAuthUrl(session.auth_url);\n\n console.log(`\\n If the browser does not open, visit:\\n ${session.auth_url}\\n`);\n\n try {\n await open(session.auth_url);\n } catch {\n /* headless / SSH — URL printed above */\n }\n\n const abort = new AbortController();\n const onSigint = (): void => {\n abort.abort();\n };\n process.once(\"SIGINT\", onSigint);\n\n let attempts = 0;\n try {\n while (attempts < OAUTH_MAX_ATTEMPTS && !abort.signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, OAUTH_POLL_INTERVAL));\n attempts++;\n\n const result = await api<AuthPollResult>(\n `/auth/cli/poll?poll_token=${encodeURIComponent(session.poll_token)}`,\n );\n\n if (result.status === \"complete\" && result.token) {\n const expiresAt =\n typeof result.token_ttl_seconds === \"number\"\n ? new Date(Date.now() + result.token_ttl_seconds * 1000).toISOString()\n : undefined;\n\n const config: GlobalConfig = {\n token: result.token,\n github_id: result.github_login ?? \"\",\n email: result.email,\n role: result.role,\n license_id: result.license_id,\n expires_at: expiresAt,\n };\n writeGlobalConfig(config);\n return config;\n }\n\n if (result.status === \"expired\") {\n throw new CLIError(\n result.error ?? \"Authentication session expired. Please try again.\",\n );\n }\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n\n if (abort.signal.aborted) {\n throw new CLIError(\"Login cancelled.\");\n }\n\n throw new CLIError(\"Authentication timed out. Please try again.\");\n}\n\nexport async function validateAuthToken(token: string): Promise<AuthValidation> {\n const res = await fetch(`${API_BASE_URL}/auth/validate`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"validating your session\");\n\n if (res.status === 401) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n return { valid: false, error: body.error ?? \"Unauthorized\" };\n }\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Session validation failed (${res.status}).`));\n }\n\n const payload = (await res.json()) as AuthValidation;\n if (!payload.valid) {\n return { valid: false, error: payload.error ?? \"Session is not valid.\" };\n }\n\n return payload;\n}\n\nexport async function requireValidatedAuth(): Promise<GlobalConfig> {\n const config = requireAuth();\n const validation = await validateAuthToken(config.token);\n if (!validation.valid) {\n validatedAuthCache = null;\n throw new CLIError(\n validation.error ?? \"Authentication expired or seat access was removed.\",\n \"iui login\",\n );\n }\n\n const merged = mergeValidatedAuth(config, validation);\n writeGlobalConfig(merged);\n validatedAuthCache = { token: merged.token, config: merged, at: Date.now() };\n return merged;\n}\n\n/** Cached session validation to avoid redundant network calls per CLI invocation. */\nexport async function requireValidatedAuthCached(): Promise<GlobalConfig> {\n const config = requireAuth();\n if (\n validatedAuthCache &&\n validatedAuthCache.token === config.token &&\n Date.now() - validatedAuthCache.at < VALIDATED_AUTH_TTL_MS\n ) {\n return validatedAuthCache.config;\n }\n return requireValidatedAuth();\n}\n\nexport async function listDevices(token: string): Promise<DeviceInfo[]> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/devices`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing devices\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) throw new CLIError(`Failed to list devices (${res.status}).`);\n const { devices } = (await res.json()) as { devices: DeviceInfo[] };\n return devices;\n}\n\nexport async function revokeDevice(token: string, deviceId: string): Promise<void> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/revoke`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ deviceId }),\n });\n throwIfRateLimited(res, \"revoking a device\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) throw new CLIError(`Failed to revoke device (${res.status}).`);\n}\n\nexport async function listDeployTokens(token: string): Promise<DeployTokenInfo[]> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing deploy tokens\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to list deploy tokens (${res.status}).`));\n }\n const data = (await res.json()) as { tokens?: DeployTokenInfo[] };\n return Array.isArray(data.tokens) ? data.tokens : [];\n}\n\nexport async function createDeployToken(\n token: string,\n input: { name?: string; expiresInDays?: number; packages?: string | string[] },\n): Promise<DeployTokenCreateResult> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({\n name: input.name,\n expires_in_days: input.expiresInDays,\n packages: input.packages,\n }),\n });\n throwIfRateLimited(res, \"creating deploy token\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to create deploy token (${res.status}).`));\n }\n return res.json() as Promise<DeployTokenCreateResult>;\n}\n\nexport async function revokeDeployToken(token: string, tokenId: string): Promise<void> {\n const res = await fetch(`${API_BASE_URL}/auth/cli/deploy-tokens/revoke`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ tokenId }),\n });\n throwIfRateLimited(res, \"revoking deploy token\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to revoke deploy token (${res.status}).`));\n }\n}\n\nexport function getAuthConfig(): GlobalConfig | null {\n return readGlobalConfig();\n}\n\nexport function requireAuth(): GlobalConfig {\n const config = readGlobalConfig();\n if (!config?.token) throw new CLIError(\"Not authenticated.\", \"iui login\");\n return config;\n}\n\nexport function logout(): void {\n validatedAuthCache = null;\n removeGlobalConfig();\n removeGlobalNpmrcAuth();\n}\n\nexport function authHeader(token: string): Record<string, string> {\n return { Authorization: `Bearer ${token}` };\n}\n","// ─── API origin validation ───────────────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nexport const DEFAULT_API_BASE_URL = \"https://api.inventiveui.com\";\r\n\r\nconst LOCAL_DEV_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\r\n\r\nfunction normalizeEnvFlag(value: string | undefined): boolean {\r\n if (!value) return false;\r\n const v = value.trim().toLowerCase();\r\n return v === \"1\" || v === \"true\" || v === \"yes\";\r\n}\r\n\r\nfunction isLocalDevUrl(url: URL): boolean {\r\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\r\n return LOCAL_DEV_HOSTS.has(url.hostname);\r\n}\r\n\r\nfunction isAllowedProductionHost(hostname: string): boolean {\r\n const h = hostname.toLowerCase();\r\n return h === \"api.inventiveui.com\" || h.endsWith(\".inventiveui.com\");\r\n}\r\n\r\n/**\r\n * Resolve and validate the Inventive UI API base URL.\r\n * Custom origins require IUI_ALLOW_CUSTOM_API=1 unless they are local dev hosts.\r\n */\r\nexport function resolveApiBaseUrl(): string {\r\n const raw = process.env.IUI_API_URL?.trim();\r\n if (!raw) return DEFAULT_API_BASE_URL;\r\n\r\n let parsed: URL;\r\n try {\r\n parsed = new URL(raw);\r\n } catch {\r\n throw new CLIError(\r\n `Invalid IUI_API_URL: \"${raw}\"`,\r\n \"Use a full URL such as https://api.inventiveui.com\",\r\n );\r\n }\r\n\r\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\r\n throw new CLIError(\r\n `Unsupported IUI_API_URL protocol: ${parsed.protocol}`,\r\n \"Only http: and https: are allowed.\",\r\n );\r\n }\r\n\r\n if (parsed.username || parsed.password) {\r\n throw new CLIError(\r\n \"IUI_API_URL must not include credentials in the URL.\",\r\n \"Set auth via iui login instead.\",\r\n );\r\n }\r\n\r\n if (parsed.pathname && parsed.pathname !== \"/\" && parsed.pathname !== \"\") {\r\n // Allow path prefixes like /v1 if explicitly configured\r\n const path = parsed.pathname.replace(/\\/+$/, \"\");\r\n if (path && !/^\\/[a-zA-Z0-9._/-]+$/.test(path)) {\r\n throw new CLIError(\r\n \"IUI_API_URL path contains invalid characters.\",\r\n \"Use a simple path prefix such as /v1\",\r\n );\r\n }\r\n }\r\n\r\n const allowCustom = normalizeEnvFlag(process.env.IUI_ALLOW_CUSTOM_API);\r\n\r\n if (isAllowedProductionHost(parsed.hostname) || isLocalDevUrl(parsed)) {\r\n return parsed.origin + (parsed.pathname === \"/\" ? \"\" : parsed.pathname.replace(/\\/+$/, \"\"));\r\n }\r\n\r\n if (allowCustom) {\r\n if (parsed.protocol !== \"https:\") {\r\n throw new CLIError(\r\n \"Custom IUI_API_URL must use https:// when not targeting localhost.\",\r\n \"Set IUI_ALLOW_CUSTOM_API=1 only for trusted development endpoints.\",\r\n );\r\n }\r\n return parsed.origin + (parsed.pathname === \"/\" ? \"\" : parsed.pathname.replace(/\\/+$/, \"\"));\r\n }\r\n\r\n throw new CLIError(\r\n `IUI_API_URL host \"${parsed.hostname}\" is not allowed.`,\r\n [\r\n \"Use the default https://api.inventiveui.com,\",\r\n \"a localhost URL for development,\",\r\n \"or set IUI_ALLOW_CUSTOM_API=1 for a trusted custom HTTPS API.\",\r\n ].join(\" \"),\r\n );\r\n}\r\n\r\nexport function assertSafeOAuthUrl(authUrl: string): void {\r\n let parsed: URL;\r\n try {\r\n parsed = new URL(authUrl);\r\n } catch {\r\n throw new CLIError(\"Invalid authentication URL returned by the API.\");\r\n }\r\n\r\n if (parsed.protocol !== \"https:\") {\r\n throw new CLIError(\r\n \"Refusing to open a non-HTTPS authentication URL.\",\r\n authUrl,\r\n );\r\n }\r\n\r\n const host = parsed.hostname.toLowerCase();\r\n const allowed =\r\n host === \"github.com\" ||\r\n host.endsWith(\".github.com\") ||\r\n isAllowedProductionHost(host) ||\r\n isLocalDevUrl(parsed);\r\n\r\n if (!allowed) {\r\n throw new CLIError(\r\n `Refusing to open authentication URL with untrusted host: ${parsed.hostname}`,\r\n \"If this is expected, verify IUI_API_URL and your network.\",\r\n );\r\n }\r\n}\r\n","// ─── IUI CLI Constants ───────────────────────────────────────────────────────\n//\n// Infrastructure constants, asset package catalogue, and config defaults.\n// Component metadata (names, slot types, etc.) is served by the API from the\n// published @inventive-ui/components package — nothing component-specific\n// is hardcoded here.\n\nimport { resolveApiBaseUrl } from \"./utils/security/apiOrigin.js\";\n\n/** Official API base URL for the Inventive UI backend (validated at startup) */\nexport const API_BASE_URL = resolveApiBaseUrl();\n\n/** npm package name for the core Framework engine */\nexport const FRAMEWORK_PACKAGE = \"@inventive-ui/framework\";\n\n/** Minimum framework version with compile-first CSS pipeline support */\nexport const COMPILE_FIRST_MIN_FRAMEWORK_VERSION = \"1.0.50\";\n\n/** npm package name for the component library */\nexport const COMPONENTS_PACKAGE = \"@inventive-ui/components\";\n\n/** npm registry scope */\nexport const NPM_SCOPE = \"@inventive-ui\";\n\n/** Local hidden metadata directory created inside every project */\nexport const IUI_DIR = \".iui\";\n\n/** Global config directory in the user's home folder */\nexport const GLOBAL_CONFIG_DIR = \".iui\";\n\n/** Managed project-level config file */\nexport const PROJECT_CONFIG_FILE = \"iui.config.ts\";\n\n/** Default target directory for installed UI components */\nexport const DEFAULT_COMPONENTS_DIR = \"src/components/ui\";\n\n/** Default target directory for framework source files */\nexport const DEFAULT_FRAMEWORK_DIR = \"src/framework\";\n\n/** Required React major version */\nexport const REQUIRED_REACT_MAJOR = 19;\n\n/** Safe React version to install when missing or outdated */\nexport const REACT_SAFE_VERSION = \"^19.0.0\";\n\n/** Minimum Vite major version supported by Inventive UI (Vite 6+) */\nexport const REQUIRED_VITE_MAJOR = 6;\n\n/** Safe Vite version to install when missing or outdated */\nexport const VITE_SAFE_VERSION = \"^6.0.0\";\n\n/** Minimum @vitejs/plugin-react major (4+ works with Vite 6/7) */\nexport const REQUIRED_VITE_PLUGIN_REACT_MAJOR = 4;\n\n/** Safe @vitejs/plugin-react version to install */\nexport const VITE_PLUGIN_REACT_SAFE_VERSION = \"^4.0.0\";\n\n/** Node types for vite.config.ts (node:fs, node:path, etc.) */\nexport const NODE_TYPES_SAFE_VERSION = \"^22.0.0\";\n\n/** GitHub OAuth callback path */\nexport const OAUTH_CALLBACK_PATH = \"/auth/cli/callback\";\n\n/** Polling interval (ms) while waiting for OAuth */\nexport const OAUTH_POLL_INTERVAL = 2000;\n\n/** Maximum OAuth polling attempts (2s interval; 10 minutes total) */\nexport const OAUTH_MAX_ATTEMPTS = 300;\n\n/** Default request timeout (ms) for API calls — avoid hanging. */\nexport const API_REQUEST_TIMEOUT_MS = 30_000;\n\n/** Managed component configuration file */\nexport const COMPONENT_CONFIG_FILE = \"component.config.ts\";\n\n/** Managed assets config (slot-type → library mapping for SlotRenderer) */\nexport const ASSETS_CONFIG_FILE = \"assets.config.json\";\n\n/** Component slug is a plain string — validated at runtime against the API registry */\nexport type ComponentSlug = string;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ASSET PACKAGES\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface AssetPackageDef {\n id: string;\n npm: string;\n displayName: string;\n slotType: string;\n category: AssetCategory;\n description: string;\n}\n\nexport type AssetCategory =\n | \"icons\"\n | \"illustrations\"\n | \"logos\"\n | \"flags\"\n | \"emoji\"\n | \"loaders\"\n | \"file-types\";\n\nexport const ASSET_PACKAGES: AssetPackageDef[] = [\n // ── Icons ──────────────────────────────────────────────────────────────\n {\n id: \"icons-lucide\",\n npm: \"@inventive-ui/icons-lucide\",\n displayName: \"Lucide Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Beautiful & consistent open-source icons\",\n },\n {\n id: \"icons-material\",\n npm: \"@inventive-ui/icons-material\",\n displayName: \"Material Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Google Material Design icon set\",\n },\n {\n id: \"icons-phosphor\",\n npm: \"@inventive-ui/icons-phosphor\",\n displayName: \"Phosphor Icons\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Flexible icon family by Phosphor\",\n },\n {\n id: \"material-symbols\",\n npm: \"@inventive-ui/material-symbols\",\n displayName: \"Material Symbols\",\n slotType: \"icon\",\n category: \"icons\",\n description: \"Google Material Symbols variable icon set\",\n },\n\n // ── Illustrations ──────────────────────────────────────────────────────\n {\n id: \"illustrations\",\n npm: \"@inventive-ui/illustrations\",\n displayName: \"Storyset Illustrations\",\n slotType: \"illustration\",\n category: \"illustrations\",\n description: \"Customizable illustrations by Storyset (Freepik)\",\n },\n\n // ── Logos ──────────────────────────────────────────────────────────────\n {\n id: \"logos\",\n npm: \"@inventive-ui/logos\",\n displayName: \"Mono Logos\",\n slotType: \"logo\",\n category: \"logos\",\n description: \"Monochrome brand / product logo set\",\n },\n {\n id: \"color-logos\",\n npm: \"@inventive-ui/color-logos\",\n displayName: \"Color Logos\",\n slotType: \"color-logo\",\n category: \"logos\",\n description: \"Full-color brand / product logo set\",\n },\n\n // ── Flags ──────────────────────────────────────────────────────────────\n {\n id: \"flags\",\n npm: \"@inventive-ui/flags\",\n displayName: \"Flagpack\",\n slotType: \"flag\",\n category: \"flags\",\n description: \"Open-source flag icons by Flagpack\",\n },\n\n // ── Emoji ──────────────────────────────────────────────────────────────\n {\n id: \"emoji\",\n npm: \"@inventive-ui/emoji\",\n displayName: \"Emoji\",\n slotType: \"emoji\",\n category: \"emoji\",\n description: \"Cross-platform emoji set with skin-tone support\",\n },\n\n // ── Loaders ────────────────────────────────────────────────────────────\n {\n id: \"loaders\",\n npm: \"@inventive-ui/loaders\",\n displayName: \"LDRS Loaders\",\n slotType: \"loader\",\n category: \"loaders\",\n description: \"Lightweight animated loaders by LDRS\",\n },\n\n // ── File Types ─────────────────────────────────────────────────────────\n {\n id: \"file-types\",\n npm: \"@inventive-ui/file-types\",\n displayName: \"File Type Icons\",\n slotType: \"file-type\",\n category: \"file-types\",\n description: \"File extension and MIME-type icons\",\n },\n];\n\n/** Quick lookup by package id */\nexport const ASSET_PACKAGES_MAP = Object.fromEntries(\n ASSET_PACKAGES.map((pkg) => [pkg.id, pkg]),\n) as Record<string, AssetPackageDef>;\n\n/**\n * Slot type id (CLI catalogue) → `assets.config.json` / {@link IUIAssetsConfig} key.\n * Framework uses camelCase (`colorLogo`, `fileType`); slot types stay kebab-case internally.\n */\nexport const SLOT_TYPE_TO_ASSETS_CONFIG_KEY: Record<string, string> = {\n icon: \"icon\",\n logo: \"logo\",\n \"color-logo\": \"colorLogo\",\n flag: \"flag\",\n \"file-type\": \"fileType\",\n loader: \"loader\",\n illustration: \"illustration\",\n emoji: \"emoji\",\n};\n\n/** Legacy kebab-case keys older CLI versions wrote — removed on the next `writeAssetsConfig`. */\nexport const LEGACY_ASSETS_CONFIG_KEYS: Record<string, string> = {\n \"color-logo\": \"colorLogo\",\n \"file-type\": \"fileType\",\n};\n\n/** `assets.config.json` keys the CLI regenerates from installed asset packages (keeps catalog in sync). */\nexport const MANAGED_ASSET_CONFIG_SLOTS = new Set(\n Object.values(SLOT_TYPE_TO_ASSETS_CONFIG_KEY),\n);\n\n// ── Shared Commander options ─────────────────────────────────────────────────\n\nexport const CLI_INSTALL_SOURCE_FLAGS = \"--source <source>\";\nexport const CLI_INSTALL_SOURCE_DESCRIPTION =\n 'Install source for optional fallbacks: \"api\" | \"registry\"';\n\nexport function defaultCliInstallSource(): string {\n return process.env.IUI_INSTALL_SOURCE ?? \"api\";\n}\n\n/** Display names for `assets.icon.library` (and prompts). */\nexport const ICON_LIBRARY_LABELS: Record<string, string> = {\n \"material-icons\": \"Material Icons\",\n \"material-symbols\": \"Material Symbols\",\n lucide: \"Lucide Icons\",\n phosphor: \"Phosphor Icons\",\n};\n\n/** Storyset illustration styles (`assets.illustration.style`). */\nexport const STORYSET_ILLUSTRATION_STYLES = [\n \"Amico\",\n \"Bro\",\n \"Cuate\",\n \"Pana\",\n \"Rafiki\",\n] as const;\n\nexport type StorysetIllustrationStyle = (typeof STORYSET_ILLUSTRATION_STYLES)[number];\n\n/** Display names for illustration style prompts. */\nexport const ILLUSTRATION_STYLE_LABELS: Record<StorysetIllustrationStyle, string> = {\n Amico: \"Amico\",\n Bro: \"Bro\",\n Cuate: \"Cuate\",\n Pana: \"Pana\",\n Rafiki: \"Rafiki\",\n};\n\n/** Emoji CDN families (`assets.emoji.family`). */\nexport const EMOJI_FAMILIES = [\n \"apple\",\n \"google\",\n \"facebook\",\n \"twitter\",\n \"native\",\n] as const;\n\nexport type EmojiFamily = (typeof EMOJI_FAMILIES)[number];\n\n/** Default emoji skin tone written to `assets.emoji.skinTone` on install. */\nexport const DEFAULT_EMOJI_SKIN_TONE = \"medium-light\";\n\n/** Display names for emoji family prompts. */\nexport const EMOJI_FAMILY_LABELS: Record<EmojiFamily, string> = {\n apple: \"Apple\",\n google: \"Google\",\n facebook: \"Facebook\",\n twitter: \"Twitter\",\n native: \"Native (device detection)\",\n};\n\n/**\n * Maps asset package id → framework slot config for IUIAssetsConfig.\n * Icons: default `library` is **`assets.config.json`** → `icon.library`. Regenerating merges package defaults with user edits.\n */\nexport const ASSET_PACKAGE_TO_SLOT_CONFIG: Record<\n string,\n Record<string, unknown>\n> = {\n \"icons-lucide\": { library: \"lucide\" },\n \"icons-material\": { library: \"material-icons\" },\n \"icons-phosphor\": { library: \"phosphor\" },\n \"material-symbols\": { library: \"material-symbols\" },\n flags: { library: \"flagpack\" },\n logos: { variant: \"mono\" },\n \"color-logos\": { variant: \"color\" },\n loaders: {\n library: \"ldrs\",\n name: \"ring\",\n color: \"currentColor\",\n speed: 1,\n },\n illustrations: { library: \"storyset\", style: \"Amico\" },\n emoji: { family: \"apple\", skinTone: DEFAULT_EMOJI_SKIN_TONE },\n \"file-types\": {},\n};\n\n/** Category display names */\nexport const ASSET_CATEGORY_LABELS: Record<AssetCategory, string> = {\n icons: \"Icons\",\n illustrations: \"Illustrations\",\n logos: \"Logos\",\n flags: \"Flags\",\n emoji: \"Emoji\",\n loaders: \"Loaders\",\n \"file-types\": \"File Types\",\n};\n","// ─── Filesystem Helpers ──────────────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport os from \"node:os\";\nimport fs from \"fs-extra\";\nimport { CLIError } from \"./errors.js\";\nimport { writeJsonRestricted, writeFileRestricted } from \"./security/fsSecure.js\";\nimport { normalizeComponentsDir } from \"./security/paths.js\";\nimport {\n installTarball as installTarballPm,\n runSyncInstall as runSyncInstallPm,\n type PackageManager,\n} from \"./security/process.js\";\nimport { parseAndValidateRegistryManifest } from \"../validation/registryManifest.js\";\nimport { buildProjectConfigSource } from \"./theme-config-scaffold.js\";\nimport { assertJsIdentifier } from \"./security/identifiers.js\";\nimport { atomicWriteFile, atomicWriteJson } from \"./atomic.js\";\nimport {\n isExactMinimalScaffold,\n isIuiManagedViteConfig,\n MINIMAL_VITE_SCAFFOLD,\n patchViteConfigContent,\n type ViteConfigEnsureAction,\n} from \"./config-patch/vite-config.js\";\nimport { patchProjectConfigBuildBlock } from \"./config-patch/iui-config.js\";\nimport { mergeComponentConfigContent } from \"./config-patch/component-config.js\";\nimport { stripAssetsFromIuiConfig } from \"../validation/configTierChecks.js\";\nimport { IUI_CACHE_GITIGNORE_LINES } from \"../services/iui-paths.js\";\nimport {\n IUI_DIR,\n PROJECT_CONFIG_FILE,\n COMPONENT_CONFIG_FILE,\n ASSETS_CONFIG_FILE,\n DEFAULT_COMPONENTS_DIR,\n GLOBAL_CONFIG_DIR,\n API_BASE_URL,\n NPM_SCOPE,\n ASSET_PACKAGES_MAP,\n ASSET_PACKAGE_TO_SLOT_CONFIG,\n LEGACY_ASSETS_CONFIG_KEYS,\n SLOT_TYPE_TO_ASSETS_CONFIG_KEY,\n MANAGED_ASSET_CONFIG_SLOTS,\n DEFAULT_EMOJI_SKIN_TONE,\n REQUIRED_VITE_MAJOR,\n} from \"../constants.js\";\nimport type {\n GlobalConfig,\n ProjectMeta,\n ComponentManifest,\n PackageManifest,\n SlotManifest,\n ComponentPackageManifest,\n RegistryItem,\n IUIConfig,\n} from \"../types.js\";\nimport { resolveComponentExport } from \"./componentExports.js\";\nimport {\n findIuiProjectRoot,\n resolveIuiProjectRoot,\n resolvePackageDir,\n findPackageJsonWithDep,\n findWorkspaceRoot,\n resolveDependencyInstallRoot,\n resolveProjectConfigRoot,\n resolveWorkspaceInstallRouting,\n isMonorepoInstallContext,\n} from \"./workspace.js\";\n\n// ── Global config (~/.iui/config.json) ──────────────────────────────────────\n\nfunction globalConfigPath(): string {\n return path.join(os.homedir(), GLOBAL_CONFIG_DIR, \"config.json\");\n}\n\nfunction globalSecretsPath(): string {\n return path.join(os.homedir(), GLOBAL_CONFIG_DIR, \"secrets.json\");\n}\n\nfunction readSecretsFile(): { token?: string } | null {\n const p = globalSecretsPath();\n if (!fs.existsSync(p)) return null;\n try {\n const data = fs.readJsonSync(p) as { token?: string };\n return data && typeof data.token === \"string\" ? data : null;\n } catch {\n return null;\n }\n}\n\nfunction writeSecretsFile(token: string): void {\n writeJsonRestricted(globalSecretsPath(), { token });\n}\n\nfunction stripProfileFields(config: GlobalConfig): Omit<GlobalConfig, \"token\" | \"license_key\"> {\n const { license_key: _lk, token: _t, ...profile } = config;\n return profile;\n}\n\nexport function readGlobalConfig(): GlobalConfig | null {\n const p = globalConfigPath();\n let profile: Omit<GlobalConfig, \"token\"> & { token?: string } | null = null;\n\n if (fs.existsSync(p)) {\n try {\n const raw = fs.readJsonSync(p) as GlobalConfig;\n profile = stripProfileFields(raw);\n if (raw.token && !readSecretsFile()?.token) {\n writeSecretsFile(raw.token);\n writeJsonRestricted(globalConfigPath(), profile);\n }\n } catch {\n return null;\n }\n }\n\n const secrets = readSecretsFile();\n if (!secrets?.token && !profile) return null;\n\n return {\n ...(profile ?? { github_id: \"\" }),\n token: secrets?.token ?? \"\",\n } as GlobalConfig;\n}\n\nexport function writeGlobalConfig(config: GlobalConfig): void {\n const { token, license_key: _unused, ...profile } = config;\n if (token) {\n writeSecretsFile(token);\n }\n writeJsonRestricted(globalConfigPath(), profile);\n}\n\nexport function removeGlobalConfig(): void {\n const p = globalConfigPath();\n if (fs.existsSync(p)) fs.removeSync(p);\n const s = globalSecretsPath();\n if (fs.existsSync(s)) fs.removeSync(s);\n}\n\n// ── Project metadata (.iui/) ────────────────────────────────────────────────\n\nfunction iuiDir(cwd: string = process.cwd()): string {\n return path.join(resolveIuiProjectRoot(cwd), IUI_DIR);\n}\n\nfunction metaPath(file: string, cwd?: string): string {\n return path.join(iuiDir(cwd ?? process.cwd()), file);\n}\n\nexport function projectMetaPath(cwd?: string) { return metaPath(\"project.json\", cwd); }\nexport function componentManifestPath(cwd?: string) { return metaPath(\"components.json\", cwd); }\nexport function packageManifestPath(cwd?: string) { return metaPath(\"packages.json\", cwd); }\nexport function slotManifestPath(cwd?: string) { return metaPath(\"slots.json\", cwd); }\n\n// ── Generic read / write helpers ────────────────────────────────────────────\n\nfunction readProjectJsonStrict<T>(p: string, label: string): T {\n if (!fs.existsSync(p)) {\n throw new CLIError(`Missing ${label}.`, \"Run iui init to initialize the project.\");\n }\n try {\n const data = fs.readJsonSync(p) as T;\n if (data === null || typeof data !== \"object\" || Array.isArray(data)) {\n throw new CLIError(`Invalid ${label}: expected a JSON object.`);\n }\n return data;\n } catch (err) {\n if (err instanceof CLIError) throw err;\n throw new CLIError(\n `Corrupt or unreadable ${label}.`,\n `Fix or remove ${p} and run iui init or iui doctor again.`,\n );\n }\n}\n\nfunction writeJson(p: string, data: unknown): void {\n atomicWriteJson(p, data);\n}\n\n// ── Project meta ────────────────────────────────────────────────────────────\n\nexport function readProjectMeta(cwd?: string): ProjectMeta | null {\n const p = projectMetaPath(cwd);\n if (!fs.existsSync(p)) return null;\n return readProjectJsonStrict<ProjectMeta>(p, \".iui/project.json\");\n}\n\nexport function writeProjectMeta(meta: ProjectMeta, cwd?: string): void {\n writeJson(projectMetaPath(cwd), meta);\n}\n\n// ── Component manifest ──────────────────────────────────────────────────────\n\nexport function readComponentManifest(cwd?: string): ComponentManifest {\n const p = componentManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<ComponentManifest>(p, \".iui/components.json\");\n}\n\nexport function writeComponentManifest(manifest: ComponentManifest, cwd?: string): void {\n writeJson(componentManifestPath(cwd), manifest);\n}\n\n// ── Package manifest (asset packages) ───────────────────────────────────────\n\nexport function readPackageManifest(cwd?: string): PackageManifest {\n const p = packageManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<PackageManifest>(p, \".iui/packages.json\");\n}\n\nexport function writePackageManifest(manifest: PackageManifest, cwd?: string): void {\n writeJson(packageManifestPath(cwd), manifest);\n}\n\n// ── Assets config (assets.config.json) ───────────────────────────────────────\n\nfunction getCliTemplatesDir(): string {\n return path.join(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"templates\");\n}\n\nfunction loadAssetsConfigTemplate(): Record<string, unknown> {\n const templatePath = path.join(getCliTemplatesDir(), \"assets.config.defaults.json\");\n if (!fs.existsSync(templatePath)) return {};\n try {\n return fs.readJsonSync(templatePath) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nfunction loadComponentConfigPresetsTemplate(): Record<string, Record<string, unknown>> {\n const templatePath = path.join(getCliTemplatesDir(), \"component.config.presets.json\");\n if (!fs.existsSync(templatePath)) return {};\n try {\n return fs.readJsonSync(templatePath) as Record<string, Record<string, unknown>>;\n } catch {\n return {};\n }\n}\n\nfunction mergeAssetSlotWithTemplate(\n slot: Record<string, unknown> | undefined,\n templateSlot: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!templateSlot) return slot ?? {};\n const out: Record<string, unknown> = { ...templateSlot, ...(slot ?? {}) };\n for (const mapKey of [\n \"globalIcons\",\n \"globalEmojis\",\n \"globalLogos\",\n \"globalColorLogos\",\n \"globalLoaders\",\n \"globalIllustrations\",\n \"globalFlags\",\n \"globalFileTypes\",\n ] as const) {\n const tplMap = templateSlot[mapKey];\n const userMap = slot?.[mapKey];\n if (tplMap && typeof tplMap === \"object\") {\n out[mapKey] = {\n ...(tplMap as Record<string, string>),\n ...((userMap as Record<string, string> | undefined) ?? {}),\n };\n }\n }\n return out;\n}\n\nfunction seedAssetsOutputFromTemplate(output: Record<string, unknown>): void {\n const template = loadAssetsConfigTemplate();\n for (const [key, tplVal] of Object.entries(template)) {\n if (key === \"binding\") {\n if (output.binding === undefined && tplVal !== undefined) {\n output.binding = tplVal;\n }\n continue;\n }\n if (typeof tplVal === \"object\" && tplVal !== null && !Array.isArray(tplVal)) {\n output[key] = mergeAssetSlotWithTemplate(\n output[key] as Record<string, unknown> | undefined,\n tplVal as Record<string, unknown>,\n );\n }\n }\n if (output.binding === \"scanned\") {\n output.preload = output.preload ?? \"scanned\";\n const icon = output.icon;\n if (icon && typeof icon === \"object\" && !Array.isArray(icon)) {\n (icon as Record<string, unknown>).preload =\n (icon as Record<string, unknown>).preload ?? \"scanned\";\n }\n }\n}\n\nfunction assetsConfigPath(cwd?: string): string {\n return path.join(resolveIuiProjectRoot(cwd ?? process.cwd()), ASSETS_CONFIG_FILE);\n}\n\nfunction readExistingAssetsConfigRaw(cwd: string): Record<string, unknown> {\n const p = assetsConfigPath(cwd);\n if (!fs.existsSync(p)) return {};\n try {\n const data = fs.readJsonSync(p) as Record<string, unknown>;\n return data && typeof data === \"object\" && !Array.isArray(data) ? data : {};\n } catch {\n return {};\n }\n}\n\nexport function readAssetsConfigIconLibrary(\n cwd: string = process.cwd(),\n): string | null {\n const icon = readExistingAssetsConfigRaw(cwd).icon;\n if (\n icon &&\n typeof icon === \"object\" &&\n !Array.isArray(icon) &&\n typeof (icon as { library?: unknown }).library === \"string\"\n ) {\n return (icon as { library: string }).library;\n }\n return null;\n}\n\nexport function readAssetsConfigIllustrationStyle(\n cwd: string = process.cwd(),\n): string | null {\n const illustration = readExistingAssetsConfigRaw(cwd).illustration;\n if (\n illustration &&\n typeof illustration === \"object\" &&\n !Array.isArray(illustration) &&\n typeof (illustration as { style?: unknown }).style === \"string\"\n ) {\n return (illustration as { style: string }).style;\n }\n return null;\n}\n\nexport function readAssetsConfigEmojiFamily(\n cwd: string = process.cwd(),\n): string | null {\n const emoji = readExistingAssetsConfigRaw(cwd).emoji;\n if (\n emoji &&\n typeof emoji === \"object\" &&\n !Array.isArray(emoji) &&\n typeof (emoji as { family?: unknown }).family === \"string\"\n ) {\n return (emoji as { family: string }).family;\n }\n return null;\n}\n\n/**\n * Set default icon library in **assets.config.json** (merges with existing `icon` fields).\n */\nexport function persistPreferredIconLibrary(\n library: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevIcon =\n existing.icon && typeof existing.icon === \"object\" && !Array.isArray(existing.icon)\n ? { ...(existing.icon as Record<string, unknown>) }\n : {};\n prevIcon.library = library;\n existing.icon = prevIcon;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Set default Storyset illustration style in **assets.config.json** (`illustration.style`).\n */\nexport function persistPreferredIllustrationStyle(\n style: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevIllustration =\n existing.illustration &&\n typeof existing.illustration === \"object\" &&\n !Array.isArray(existing.illustration)\n ? { ...(existing.illustration as Record<string, unknown>) }\n : {};\n const base =\n (ASSET_PACKAGE_TO_SLOT_CONFIG.illustrations as Record<string, unknown> | undefined) ?? {};\n Object.assign(prevIllustration, base);\n prevIllustration.style = style;\n existing.illustration = prevIllustration;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Set default emoji family in **assets.config.json** (`emoji.family`).\n * Skin tone defaults to {@link DEFAULT_EMOJI_SKIN_TONE} (`medium-light`).\n */\nexport function persistPreferredEmojiFamily(\n family: string,\n cwd: string = process.cwd(),\n): void {\n const existing = readExistingAssetsConfigRaw(cwd);\n const prevEmoji =\n existing.emoji && typeof existing.emoji === \"object\" && !Array.isArray(existing.emoji)\n ? { ...(existing.emoji as Record<string, unknown>) }\n : {};\n const base =\n (ASSET_PACKAGE_TO_SLOT_CONFIG.emoji as Record<string, unknown> | undefined) ?? {};\n Object.assign(prevEmoji, base);\n prevEmoji.family = family;\n prevEmoji.skinTone = DEFAULT_EMOJI_SKIN_TONE;\n existing.emoji = prevEmoji;\n writeJson(assetsConfigPath(cwd), existing);\n}\n\n/**\n * Icon `library` keys (e.g. lucide, material-symbols) for all icon asset\n * packages listed in `.iui/packages.json`, in stable manifest key order.\n */\nexport function collectInstalledIconLibraries(\n cwd: string = process.cwd(),\n): string[] {\n const manifest = readPackageManifest(cwd);\n const libs: string[] = [];\n for (const pkgId of Object.keys(manifest)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const slotConfig = ASSET_PACKAGE_TO_SLOT_CONFIG[pkgId];\n if (def?.slotType !== \"icon\" || !slotConfig) continue;\n const lib = (slotConfig as { library?: string }).library;\n if (typeof lib === \"string\" && lib.length > 0 && !libs.includes(lib)) {\n libs.push(lib);\n }\n }\n return libs;\n}\n\n/**\n * Apply package defaults as base; user-edited fields from `existingSlot` win.\n * Keeps manual tweaks to loader, illustration style, emoji, icon options, etc.\n * when `writeAssetsConfig` runs after install or startup repair.\n */\nfunction readExistingAssetSlot(\n existing: Record<string, unknown>,\n configKey: string,\n slotType: string,\n): unknown {\n if (existing[configKey] !== undefined) return existing[configKey];\n return existing[slotType];\n}\n\nfunction mergeAssetsSlotWithUserEdits(\n fromPackage: Record<string, unknown>,\n existingSlot: unknown,\n): Record<string, unknown> {\n const base = { ...fromPackage };\n if (\n existingSlot === null ||\n existingSlot === undefined ||\n typeof existingSlot !== \"object\" ||\n Array.isArray(existingSlot)\n ) {\n return base;\n }\n const user = existingSlot as Record<string, unknown>;\n const out: Record<string, unknown> = { ...base };\n for (const [k, userVal] of Object.entries(user)) {\n if (\n userVal !== null &&\n typeof userVal === \"object\" &&\n !Array.isArray(userVal) &&\n typeof out[k] === \"object\" &&\n out[k] !== null &&\n !Array.isArray(out[k])\n ) {\n out[k] = mergeAssetsSlotWithUserEdits(\n out[k] as Record<string, unknown>,\n userVal,\n );\n } else {\n out[k] = userVal;\n }\n }\n return out;\n}\n\n/**\n * Write assets.config.json from installed asset packages.\n * Maps each installed package to its slot-type config (icon, flag, etc.).\n * For icons, preferred `library` from `assets.config.json` wins when multiple sets are installed.\n * Existing `assets.config.json` values are merged so user edits are preserved.\n */\nexport function writeAssetsConfig(cwd: string = process.cwd()): void {\n const packages = readPackageManifest(cwd);\n const existing = readExistingAssetsConfigRaw(cwd);\n\n const assets: Record<string, Record<string, unknown>> = {};\n\n // Default icon library: `assets.config.json` → `icon.library` (same object the framework loads).\n const preferredIconLibrary = readAssetsConfigIconLibrary(cwd);\n const preferredIllustrationStyle = readAssetsConfigIllustrationStyle(cwd);\n const preferredEmojiFamily = readAssetsConfigEmojiFamily(cwd);\n\n let latestIconSlotConfig: Record<string, unknown> | null = null;\n let latestIconLibrary: string | null = null;\n const iconByLibrary: Record<string, Record<string, unknown>> = {};\n\n for (const [pkgId] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const slotConfig = ASSET_PACKAGE_TO_SLOT_CONFIG[pkgId];\n if (!def || !slotConfig) continue;\n\n if (def.slotType === \"icon\") {\n // Track latest as fallback; we may overwrite with preferred library below.\n latestIconSlotConfig = slotConfig;\n latestIconLibrary = (slotConfig as { library?: string })?.library ?? null;\n if (latestIconLibrary) {\n iconByLibrary[latestIconLibrary] = slotConfig;\n }\n\n // Do not set assets.icon yet, because we may preserve the preferred default.\n continue;\n }\n\n const configKey =\n SLOT_TYPE_TO_ASSETS_CONFIG_KEY[def.slotType] ?? def.slotType;\n const mergedSlot = mergeAssetsSlotWithUserEdits(\n slotConfig,\n readExistingAssetSlot(existing, configKey, def.slotType),\n );\n if (def.slotType === \"illustration\" && preferredIllustrationStyle) {\n mergedSlot.style = preferredIllustrationStyle;\n }\n if (def.slotType === \"emoji\" && preferredEmojiFamily) {\n mergedSlot.family = preferredEmojiFamily;\n }\n assets[configKey] = mergedSlot;\n }\n\n if (latestIconSlotConfig) {\n let base: Record<string, unknown>;\n // If the preferred icon library is installed, keep it; otherwise fall back to latest installed.\n if (preferredIconLibrary && iconByLibrary[preferredIconLibrary]) {\n base = iconByLibrary[preferredIconLibrary];\n } else {\n base = latestIconSlotConfig;\n }\n // Never let a stale merged `library` override the resolved default; merge keeps\n // user `style` / `filled` / etc. `library` always matches preferred + installed sets.\n const mergedIcon = mergeAssetsSlotWithUserEdits(base, existing.icon);\n const baseLib = (base as { library?: string }).library;\n if (typeof baseLib === \"string\" && baseLib.length > 0) {\n mergedIcon.library = baseLib;\n }\n assets.icon = mergedIcon;\n }\n\n const output: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(existing)) {\n if (!MANAGED_ASSET_CONFIG_SLOTS.has(k)) {\n output[k] = v;\n }\n }\n Object.assign(output, assets);\n\n for (const [legacyKey, canonicalKey] of Object.entries(LEGACY_ASSETS_CONFIG_KEYS)) {\n if (output[canonicalKey] !== undefined) {\n delete output[legacyKey];\n }\n }\n\n if (\n output.binding === undefined &&\n Object.keys(assets).length > 0 &&\n projectHasViteTooling(cwd)\n ) {\n output.binding = \"scanned\";\n }\n\n seedAssetsOutputFromTemplate(output);\n\n writeJson(assetsConfigPath(cwd), output);\n\n // Older CLI versions used `.iui/icon-defaults.json`; remove it so only assets.config.json applies.\n try {\n const legacyIconDefaults = path.join(cwd ?? process.cwd(), IUI_DIR, \"icon-defaults.json\");\n if (fs.existsSync(legacyIconDefaults)) fs.removeSync(legacyIconDefaults);\n } catch {\n /* non-fatal */\n }\n}\n\n// ── Slot manifest ───────────────────────────────────────────────────────────\n\nexport function readSlotManifest(cwd?: string): SlotManifest {\n const p = slotManifestPath(cwd);\n if (!fs.existsSync(p)) return {};\n return readProjectJsonStrict<SlotManifest>(p, \".iui/slots.json\");\n}\n\nexport function writeSlotManifest(manifest: SlotManifest, cwd?: string): void {\n writeJson(slotManifestPath(cwd), manifest);\n}\n\n// ── Component package manifest (node_modules/@inventive-ui/components) ──────\n\n/**\n * Read iui-manifest.json from the installed @inventive-ui/components package.\n * Returns null when the package isn't installed yet.\n */\nexport function readComponentPackageManifest(\n cwd: string = process.cwd(),\n): ComponentPackageManifest | null {\n const pkgDir = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!pkgDir) return null;\n const p = path.join(pkgDir, \"iui-manifest.json\");\n if (!fs.existsSync(p)) return null;\n try {\n const raw = fs.readJsonSync(p) as unknown;\n return parseAndValidateRegistryManifest(raw, p);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n throw new CLIError(\n \"Invalid component registry in node_modules.\",\n \"Reinstall @inventive-ui/components and rerun iui doctor.\",\n );\n }\n}\n\n/**\n * Read the installed version of a package from node_modules (e.g. @inventive-ui/components).\n */\nexport function getInstalledPackageVersion(\n packageName: string,\n cwd: string = process.cwd(),\n): string | null {\n const pkgDir = resolvePackageDir(packageName, cwd);\n if (!pkgDir) return null;\n const pkgPath = path.join(pkgDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n try {\n const pkg = fs.readJsonSync(pkgPath) as { version?: string };\n return pkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Convert the registry items array to a name-keyed map for O(1) lookups.\n */\nexport function registryItemsMap(\n manifest: ComponentPackageManifest | null,\n): Record<string, RegistryItem> {\n if (!manifest) return {};\n const map: Record<string, RegistryItem> = {};\n for (const item of manifest.items) {\n map[item.name] = item;\n }\n return map;\n}\n\n// ── Project config (iui.config.ts) ──────────────────────────────────────────\n\nexport function writeProjectConfig(cwd: string = process.cwd()): void {\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n atomicWriteFile(configPath, buildProjectConfigSource(cwd));\n}\n\nexport type ProjectConfigEnsureAction = \"scaffolded\" | \"merged\" | \"noop\";\n\n/** Ensure compile-first build defaults without replacing user theme/config. */\nexport function ensureProjectConfigBuildBlock(cwd: string = process.cwd()): boolean {\n const configPath = path.join(resolveIuiProjectRoot(cwd), PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) return false;\n const before = fs.readFileSync(configPath, \"utf-8\");\n const result = patchProjectConfigBuildBlock(before);\n if (!result.changed) return false;\n atomicWriteFile(configPath, result.content);\n return true;\n}\n\n/**\n * Scaffold iui.config.ts when missing; otherwise strip assets tier bleed + merge build defaults.\n */\nexport function ensureProjectConfig(cwd: string = process.cwd()): ProjectConfigEnsureAction {\n const root = resolveIuiProjectRoot(cwd);\n const configPath = path.join(root, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n writeProjectConfig(root);\n return \"scaffolded\";\n }\n\n const before = fs.readFileSync(configPath, \"utf-8\");\n const stripped = stripAssetsFromIuiConfig(before);\n if (stripped !== before) {\n atomicWriteFile(configPath, stripped);\n }\n ensureProjectConfigBuildBlock(root);\n const after = fs.readFileSync(configPath, \"utf-8\");\n return before === after ? \"noop\" : \"merged\";\n}\n\n/**\n * True when this project intentionally uses Vite (direct package.json deps only).\n * Ignores transitive vite from @inventive-ui/framework — that must not create vite.config.ts.\n */\nexport function projectHasViteTooling(cwd: string = process.cwd()): boolean {\n return Boolean(\n isPackageInDeps(\"vite\", cwd) || isPackageInDeps(\"@vitejs/plugin-react\", cwd),\n );\n}\n\nfunction isIuiManagedOrMinimalScaffold(content: string): boolean {\n if (\n /^\\s*function\\s+iuiOptionalDeps\\s*\\(/m.test(content) &&\n /^\\s*name:\\s*[\"']iui-optional-deps[\"']/m.test(content)\n ) {\n return true;\n }\n return isIuiManagedViteConfig(content) || isExactMinimalScaffold(content);\n}\n\n/**\n * Remove CLI-generated vite.config.ts / tsconfig.node.json when the project uses React-only.\n */\nexport function removeStaleIuiViteConfig(cwd: string = process.cwd()): boolean {\n if (projectHasViteTooling(cwd)) return false;\n\n let removed = false;\n const configPath = path.join(cwd, \"vite.config.ts\");\n if (fs.existsSync(configPath)) {\n const existing = fs.readFileSync(configPath, \"utf-8\");\n if (isIuiManagedOrMinimalScaffold(existing)) {\n fs.removeSync(configPath);\n removed = true;\n }\n }\n\n const nodeTsPath = path.join(cwd, \"tsconfig.node.json\");\n if (fs.existsSync(nodeTsPath)) {\n try {\n const nodeTs = fs.readJsonSync(nodeTsPath) as { include?: unknown };\n const inc = nodeTs.include;\n if (Array.isArray(inc) && inc.length === 1 && inc[0] === \"vite.config.ts\") {\n fs.removeSync(nodeTsPath);\n removed = true;\n }\n } catch {\n /* keep user-managed tsconfig.node.json */\n }\n }\n\n return removed;\n}\n\n/** Typecheck vite.config.ts separately (Vite convention). */\nexport function writeTsConfigNode(cwd: string = process.cwd()): void {\n const nodeTsPath = path.join(cwd, \"tsconfig.node.json\");\n const content: Record<string, unknown> = {\n compilerOptions: {\n target: \"ES2022\",\n lib: [\"ES2023\"],\n module: \"ESNext\",\n skipLibCheck: true,\n moduleResolution: \"bundler\",\n noEmit: true,\n strict: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n isolatedModules: true,\n types: [\"node\"],\n },\n include: [\"vite.config.ts\"],\n };\n atomicWriteJson(nodeTsPath, content);\n}\n\nexport function writeTsConfig(\n framework: \"react\" | \"vite\",\n cwd: string = process.cwd(),\n): void {\n const tsconfigPath = path.join(cwd, \"tsconfig.json\");\n let existing: Record<string, unknown> = {};\n\n if (fs.existsSync(tsconfigPath)) {\n try {\n const parsed = fs.readJsonSync(tsconfigPath) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n existing = parsed as Record<string, unknown>;\n }\n } catch {\n existing = {};\n }\n }\n\n const compilerOptionsRaw = existing.compilerOptions;\n const compilerOptions =\n compilerOptionsRaw && typeof compilerOptionsRaw === \"object\" && !Array.isArray(compilerOptionsRaw)\n ? { ...(compilerOptionsRaw as Record<string, unknown>) }\n : {};\n\n if (!compilerOptions.target) compilerOptions.target = \"ES2022\";\n if (!compilerOptions.module) compilerOptions.module = \"ESNext\";\n if (!compilerOptions.moduleResolution) compilerOptions.moduleResolution = \"bundler\";\n if (!compilerOptions.jsx) compilerOptions.jsx = \"react-jsx\";\n if (compilerOptions.strict === undefined) compilerOptions.strict = true;\n if (compilerOptions.noEmit === undefined) compilerOptions.noEmit = true;\n if (compilerOptions.resolveJsonModule === undefined) compilerOptions.resolveJsonModule = true;\n if (compilerOptions.isolatedModules === undefined) compilerOptions.isolatedModules = true;\n if (compilerOptions.esModuleInterop === undefined) compilerOptions.esModuleInterop = true;\n if (compilerOptions.skipLibCheck === undefined) compilerOptions.skipLibCheck = true;\n\n const libs = Array.isArray(compilerOptions.lib)\n ? [...compilerOptions.lib.map(String)]\n : [];\n for (const lib of [\"ES2022\", \"DOM\", \"DOM.Iterable\"]) {\n if (!libs.includes(lib)) libs.push(lib);\n }\n compilerOptions.lib = libs;\n\n if (framework === \"vite\") {\n const types = Array.isArray(compilerOptions.types)\n ? [...compilerOptions.types.map(String)]\n : [];\n if (!types.includes(\"vite/client\")) {\n types.push(\"vite/client\");\n }\n compilerOptions.types = types;\n } else if (Array.isArray(compilerOptions.types)) {\n const types = compilerOptions.types.map(String).filter((t) => t !== \"vite/client\");\n if (types.length > 0) compilerOptions.types = types;\n else delete compilerOptions.types;\n }\n\n const include = Array.isArray(existing.include)\n ? [...existing.include.map(String)]\n : [];\n if (!include.includes(\"src\")) include.push(\"src\");\n\n const rootConfigFiles = [\"iui.config.ts\", \"component.config.ts\"];\n for (const rootFile of rootConfigFiles) {\n if (!include.includes(rootFile)) include.push(rootFile);\n }\n\n const viteConfigIdx = include.indexOf(\"vite.config.ts\");\n if (framework === \"vite\") {\n if (viteConfigIdx >= 0) include.splice(viteConfigIdx, 1);\n writeTsConfigNode(cwd);\n } else if (viteConfigIdx >= 0) {\n include.splice(viteConfigIdx, 1);\n }\n\n const exclude = Array.isArray(existing.exclude)\n ? [...existing.exclude.map(String)]\n : [\"node_modules\", \"dist\"];\n\n if (framework === \"react\") {\n for (const orphan of [\"vite.config.ts\", \"tsconfig.node.json\"]) {\n if (!exclude.includes(orphan)) exclude.push(orphan);\n }\n }\n\n const output: Record<string, unknown> = {\n ...existing,\n compilerOptions,\n include,\n exclude,\n };\n\n atomicWriteJson(tsconfigPath, output);\n}\n\n// ── Component config (component.config.ts) ──────────────────────────────────\n\n/**\n * Generate component.config.ts from the component package manifest.\n * Each component entry includes its defaultConfig from the published manifest,\n * so this file stays in sync with the registry without hardcoding anything.\n */\nexport function writeComponentConfig(\n manifest: import(\"../types.js\").ComponentPackageManifest | null,\n cwd: string = process.cwd(),\n): void {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n\n let entries = \"\";\n const typedEntries: string[] = [];\n const typeImports: string[] = [];\n const presetsTemplate = loadComponentConfigPresetsTemplate();\n if (manifest) {\n for (const item of manifest.items) {\n assertJsIdentifier(item.dirName, \"component dirName\");\n const cfg = (item.meta?.defaultConfig as Record<string, unknown>) ?? {};\n const presetBlock = presetsTemplate[item.dirName];\n const cfgStr = JSON.stringify(cfg, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n\n let extraBlocks = \"\";\n if (presetBlock?.presets) {\n const presetsStr = JSON.stringify(presetBlock.presets, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n extraBlocks += `\\n presets: ${presetsStr},`;\n }\n\n entries += ` ${item.dirName}: {\\n default: ${cfgStr},${extraBlocks}\\n },\\n\\n`;\n\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName && resolved.importSpecifier) {\n typeImports.push(`import type { ${resolved.propsName} } from \"${resolved.importSpecifier}\";`);\n typedEntries.push(` ${item.dirName}: { default: Partial<${resolved.propsName}> };`);\n } else {\n typedEntries.push(` ${item.dirName}: { default: Record<string, unknown> };`);\n }\n }\n }\n\n const imports = [...new Set(typeImports)].join(\"\\n\");\n const componentConfigType = typedEntries.length > 0\n ? `type ComponentConfigMap = {\\n${typedEntries.join(\"\\n\")}\\n};`\n : `type ComponentConfigMap = Record<string, { default: Record<string, unknown> }>;`;\n\n const content = `// ─── Component Configuration ─────────────────────────────────────────────────\n//\n// Default component presets for your Inventive UI project.\n// Customize variants, appearances, and slot assignments below.\n// Entries are rebuilt from the published component registry.\n//\n// Docs: https://inventiveui.com/docs/configuration\n\n${imports}\n\n${componentConfigType}\n\nexport const componentConfig: ComponentConfigMap = {\n${entries}};\n`;\n atomicWriteFile(configPath, content);\n}\n\nexport type ComponentConfigEnsureAction = \"scaffolded\" | \"merged\" | \"noop\" | \"replaced\";\n\n/**\n * Scaffold component.config.ts when missing; otherwise merge new registry entries only.\n */\nexport function ensureComponentConfig(\n manifest: import(\"../types.js\").ComponentPackageManifest | null,\n cwd: string = process.cwd(),\n options: { force?: boolean } = {},\n): ComponentConfigEnsureAction {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n\n if (options.force || !fs.existsSync(configPath)) {\n const existed = fs.existsSync(configPath);\n writeComponentConfig(manifest, cwd);\n return existed && options.force ? \"replaced\" : \"scaffolded\";\n }\n\n const before = fs.readFileSync(configPath, \"utf-8\");\n const result = mergeComponentConfigContent(before, manifest, cwd);\n if (!result.changed) return \"noop\";\n atomicWriteFile(configPath, result.content);\n return \"merged\";\n}\n\nexport function readProjectConfig(cwd: string = process.cwd()): IUIConfig | null {\n const iuiRoot = resolveIuiProjectRoot(cwd);\n const configPath = path.join(iuiRoot, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) return null;\n try {\n const raw = fs.readFileSync(configPath, \"utf-8\");\n const match = raw.match(/componentsDir:\\s*\"([^\"]+)\"/);\n const componentsDir = normalizeComponentsDir(\n match?.[1] ?? DEFAULT_COMPONENTS_DIR,\n iuiRoot,\n );\n return {\n componentsDir,\n framework: true,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * List component directory names present on disk (e.g. [\"Button\", \"Chip\"]).\n * Used by diagnostics to inspect component directories on disk.\n */\nexport function listComponentDirNames(cwd: string = process.cwd()): string[] {\n const config = readProjectConfig(cwd);\n const componentsDir = config?.componentsDir ?? DEFAULT_COMPONENTS_DIR;\n const fullPath = normalizeComponentsDir(componentsDir, cwd);\n if (!fs.existsSync(fullPath)) return [];\n try {\n return fs\n .readdirSync(fullPath, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n } catch {\n return [];\n }\n}\n\n// ── Detection helpers ───────────────────────────────────────────────────────\n\nexport function isInsideProject(cwd: string = process.cwd()): boolean {\n return findIuiProjectRoot(cwd) !== null;\n}\n\nexport {\n resolveIuiProjectRoot,\n findIuiProjectRoot,\n findWorkspaceRoot,\n isPackageInDirectDeps,\n resolveDependencyInstallRoot,\n resolveProjectConfigRoot,\n isWorkspaceChildPackage,\n listIuiInitializedPackages,\n resolveSetupDoctorTargets,\n listWorkspacePackageDirs,\n} from \"./workspace.js\";\n\nexport function detectRepoUrl(cwd: string = process.cwd()): string {\n try {\n const gitConfigPath = path.join(cwd, \".git\", \"config\");\n if (!fs.existsSync(gitConfigPath)) return cwd;\n const gitConfig = fs.readFileSync(gitConfigPath, \"utf-8\");\n const match = gitConfig.match(/url\\s*=\\s*(.+)/);\n return match?.[1]?.trim() ?? cwd;\n } catch {\n return cwd;\n }\n}\n\nexport function hasPackageJson(cwd: string = process.cwd()): boolean {\n return fs.existsSync(path.join(cwd, \"package.json\"));\n}\n\nexport function cleanupLegacyFrameworkMeta(cwd: string = process.cwd()): void {\n try {\n const legacyPath = path.join(cwd, IUI_DIR, \"framework.json\");\n if (fs.existsSync(legacyPath)) fs.removeSync(legacyPath);\n } catch {\n // Non-fatal cleanup\n }\n}\n\n/**\n * Returns the version string if `packageName` is in dependencies or\n * devDependencies of the project's package.json, otherwise null.\n */\nexport function isPackageInDeps(packageName: string, cwd: string = process.cwd()): string | null {\n return findPackageJsonWithDep(packageName, cwd)?.version ?? null;\n}\n\n/** How a package manager was chosen, for diagnostics/onboarding output. */\nexport type PackageManagerSource =\n | \"packageManager-field\"\n | \"lockfile\"\n | \"multiple-lockfiles\"\n | \"default\";\n\nexport interface PackageManagerDetection {\n pm: PackageManager;\n source: PackageManagerSource;\n warnings: string[];\n}\n\nconst LOCKFILES: ReadonlyArray<{ file: string; pm: PackageManager }> = [\n { file: \"bun.lockb\", pm: \"bun\" },\n { file: \"bun.lock\", pm: \"bun\" },\n { file: \"pnpm-lock.yaml\", pm: \"pnpm\" },\n { file: \"yarn.lock\", pm: \"yarn\" },\n { file: \"package-lock.json\", pm: \"npm\" },\n];\n\n/** Deterministic priority when multiple lockfiles coexist (project drift). */\nconst PM_PRIORITY: ReadonlyArray<PackageManager> = [\"bun\", \"pnpm\", \"yarn\", \"npm\"];\n\nfunction readPackageManagerField(cwd: string): PackageManager | null {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n try {\n const pkg = fs.readJsonSync(pkgPath) as { packageManager?: unknown };\n if (typeof pkg.packageManager !== \"string\") return null;\n // Format is \"<pm>@<version>\" (Corepack); strip the version.\n const name = pkg.packageManager.split(\"@\")[0]?.trim().toLowerCase();\n if (name === \"npm\" || name === \"yarn\" || name === \"pnpm\" || name === \"bun\") {\n return name;\n }\n } catch {\n return null;\n }\n return null;\n}\n\n/**\n * Detect the package manager with full provenance.\n *\n * Resolution is workspace-aware: in a monorepo the lockfile and\n * \"packageManager\" field live at the workspace root, so we resolve that\n * first and fall back to the current directory for standalone projects.\n *\n * Resolution order:\n * 1. package.json \"packageManager\" field (Corepack) — authoritative for teams.\n * 2. A single lockfile present in the project.\n * 3. Multiple lockfiles → warn and pick deterministically by priority.\n * 4. Default to npm.\n */\nexport function detectPackageManagerWithMeta(\n cwd: string = process.cwd(),\n): PackageManagerDetection {\n const warnings: string[] = [];\n const root = findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n\n const declared = readPackageManagerField(root);\n const presentLockPms = [\n ...new Set(\n LOCKFILES.filter(({ file }) => fs.existsSync(path.join(root, file))).map(\n ({ pm }) => pm,\n ),\n ),\n ];\n\n if (declared) {\n if (presentLockPms.length > 0 && !presentLockPms.includes(declared)) {\n warnings.push(\n `package.json \"packageManager\" is ${declared}, but the lockfile suggests ${presentLockPms.join(\", \")}. Using ${declared}.`,\n );\n }\n return { pm: declared, source: \"packageManager-field\", warnings };\n }\n\n if (presentLockPms.length === 1) {\n return { pm: presentLockPms[0]!, source: \"lockfile\", warnings };\n }\n\n if (presentLockPms.length > 1) {\n const chosen =\n PM_PRIORITY.find((pm) => presentLockPms.includes(pm)) ?? \"npm\";\n warnings.push(\n `Multiple lockfiles found (${presentLockPms.join(\", \")}). Using ${chosen}. Keep one package manager per project and set \"packageManager\" in package.json.`,\n );\n return { pm: chosen, source: \"multiple-lockfiles\", warnings };\n }\n\n return { pm: \"npm\", source: \"default\", warnings };\n}\n\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n return detectPackageManagerWithMeta(cwd).pm;\n}\n\n/** Human-readable full-install command for the given package manager. */\nexport function syncInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case \"yarn\": return \"yarn install\";\n case \"pnpm\": return \"pnpm install\";\n case \"bun\": return \"bun install\";\n default: return \"npm install\";\n }\n}\n\nexport function installCmd(\n pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\",\n pkg: string,\n cwd?: string,\n): string {\n if (cwd) {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n if (workspaceName) {\n const fromRoot =\n path.resolve(commandCwd) !== path.resolve(cwd)\n ? ` (run from ${commandCwd})`\n : \"\";\n switch (pm) {\n case \"yarn\":\n return `yarn workspace ${workspaceName} add ${pkg}${fromRoot}`;\n case \"pnpm\":\n return `pnpm add ${pkg} --filter ${workspaceName}${fromRoot}`;\n case \"bun\":\n return `bun add ${pkg}`;\n default:\n return `npm install ${pkg} -w ${workspaceName}${fromRoot}`;\n }\n }\n }\n switch (pm) {\n case \"yarn\": return `yarn add ${pkg}`;\n case \"pnpm\": return `pnpm add ${pkg}`;\n case \"bun\": return `bun add ${pkg}`;\n default: return `npm install ${pkg}`;\n }\n}\n\nexport function installDevCmd(pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\", pkg: string): string {\n switch (pm) {\n case \"yarn\": return `yarn add -D ${pkg}`;\n case \"pnpm\": return `pnpm add -D ${pkg}`;\n case \"bun\": return `bun add -d ${pkg}`;\n default: return `npm install --save-dev ${pkg}`;\n }\n}\n\n/**\n * Install a package from a local tarball without polluting package.json\n * with a `file:` path, then write the proper registry version entry.\n */\nexport function installTarballCmd(\n pm: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\",\n tarballPath: string,\n): string {\n const q = quotePathForShell(tarballPath);\n switch (pm) {\n case \"yarn\": return `yarn add ${q}`;\n case \"pnpm\": return `pnpm add ${q}`;\n case \"bun\": return `bun add ${q}`;\n default: return `npm install --no-save ${q}`;\n }\n}\n\n/**\n * Quote a path for safe use in a shell command (handles spaces and special chars on Windows/Unix).\n */\nfunction quotePathForShell(p: string): string {\n if (process.platform === \"win32\") {\n return `\"${p.replace(/\"/g, '\"\"')}\"`;\n }\n return `'${p.replace(/'/g, \"'\\\\''\")}'`;\n}\n\n/**\n * Run package manager install for a local tarball.\n * Uses quoted path so Windows paths with spaces work; avoids shell mangling.\n */\nexport function runTarballInstall(\n pm: PackageManager,\n tarballPath: string,\n cwd: string,\n): void {\n const resolvedTarball = path.resolve(tarballPath);\n if (!fs.existsSync(resolvedTarball)) {\n throw new CLIError(`Tarball not found: ${resolvedTarball}`);\n }\n installTarballPm(pm, resolvedTarball, cwd);\n}\n\n/**\n * Run a full install (e.g. npm install) to sync lockfile and node_modules\n * after package.json was updated. Standard practice after modifying dependencies.\n *\n * In npm/pnpm/yarn workspaces, installs always run at the workspace root.\n */\n/**\n * Standard workspace pre-install: sync lockfile at the monorepo root before adding\n * packages to a child app. Matches npm/pnpm/yarn docs and other CLI scaffolders.\n */\nexport function prepareWorkspaceForDependencyInstall(cwd: string = process.cwd()): void {\n if (!isMonorepoInstallContext(cwd)) return;\n const pm = detectPackageManager(cwd);\n runSyncInstallPm(pm, resolveDependencyInstallRoot(cwd));\n}\n\nexport function runSyncInstall(pm: PackageManager, cwd: string): void {\n runSyncInstallPm(pm, resolveDependencyInstallRoot(cwd));\n}\n\n/**\n * After tarball install, ensure package.json records the proper semver\n * version — replacing any `file:` temp path, adding the entry if missing,\n * or updating it when the installed version is newer.\n */\nexport function fixTarballDep(\n packageName: string,\n version: string,\n cwd: string = process.cwd(),\n): void {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const deps = pkg.dependencies ?? {};\n const current = deps[packageName];\n // Write a caret range (standard npm hygiene) rather than an exact pin, so\n // `npm install` / `npm update` can pick up compatible newer releases while\n // the lockfile still keeps installs reproducible for teammates.\n const desired = `^${version}`;\n if (!current || current.startsWith(\"file:\") || current !== desired) {\n deps[packageName] = desired;\n pkg.dependencies = deps;\n atomicWriteJson(pkgPath, pkg);\n }\n } catch {}\n}\n\n// ── .npmrc management ───────────────────────────────────────────────────────\n//\n// Auto-configures npm to resolve @inventive-ui packages through the API\n// registry proxy, eliminating the need for manual .npmrc setup or GitHub PATs.\n//\n// Project .npmrc: @inventive-ui:registry=<API>/registry/npm (safe to commit)\n// User ~/.npmrc: //<host>/registry/npm/:_authToken=<token> (never committed)\n\nconst NPMRC_SCOPE_LINE = `${NPM_SCOPE}:registry=${API_BASE_URL}/registry/npm`;\n\nfunction npmrcAuthLine(token: string): string {\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n return `//${url.host}${url.pathname}/:_authToken=${token}`;\n}\n\n/**\n * Ensure the project's .npmrc has the @inventive-ui scope pointing to the API.\n * Creates the file if missing; appends the line if not already present.\n */\nexport function ensureProjectNpmrc(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const npmrcPath = path.join(configRoot, \".npmrc\");\n let content = \"\";\n if (fs.existsSync(npmrcPath)) {\n content = fs.readFileSync(npmrcPath, \"utf-8\");\n }\n\n const lines = content.split(\"\\n\").filter((line) => {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith(\"#\")) return false;\n // Auth tokens belong in ~/.npmrc (iui login), never in the committed project file.\n if (trimmed.includes(\":_authToken=\")) return false;\n // Bare words like \"test\" break npm: Unknown project config \"test\"\n if (!trimmed.includes(\"=\")) return false;\n if (trimmed.startsWith(`${NPM_SCOPE}:registry=`)) return false;\n return true;\n });\n\n lines.push(NPMRC_SCOPE_LINE);\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim() + \"\\n\";\n atomicWriteFile(npmrcPath, result);\n}\n\n/**\n * Write the auth token to the user's global ~/.npmrc for the API registry.\n * This lets standard `npm install` authenticate without project-level secrets.\n */\nexport function writeGlobalNpmrcAuth(token: string): void {\n const globalNpmrc = path.join(os.homedir(), \".npmrc\");\n let content = \"\";\n if (fs.existsSync(globalNpmrc)) {\n content = fs.readFileSync(globalNpmrc, \"utf-8\");\n }\n\n const authLine = npmrcAuthLine(token);\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n const authPrefix = `//${url.host}${url.pathname}/:_authToken=`;\n\n // Replace existing auth line for this registry, or append\n const lines = content.split(\"\\n\").filter(\n (line) => !line.trim().startsWith(authPrefix),\n );\n lines.push(authLine);\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim() + \"\\n\";\n writeFileRestricted(globalNpmrc, result);\n}\n\n/**\n * Remove the auth token for the API registry from the user's global ~/.npmrc.\n */\nexport function removeGlobalNpmrcAuth(): void {\n const globalNpmrc = path.join(os.homedir(), \".npmrc\");\n if (!fs.existsSync(globalNpmrc)) return;\n\n const content = fs.readFileSync(globalNpmrc, \"utf-8\");\n const url = new URL(`${API_BASE_URL}/registry/npm`);\n const authPrefix = `//${url.host}${url.pathname}/:_authToken=`;\n\n const lines = content.split(\"\\n\").filter(\n (line) => !line.trim().startsWith(authPrefix),\n );\n\n const result = lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n if (!result) {\n fs.removeSync(globalNpmrc);\n return;\n }\n\n writeFileRestricted(globalNpmrc, `${result}\\n`);\n}\n\n/**\n * Ensure .gitignore contains .npmrc (in case the user writes tokens to it).\n * Only adds the entry if .gitignore exists and doesn't already list .npmrc.\n */\nexport function ensureGitignoreHasNpmrc(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const giPath = path.join(configRoot, \".gitignore\");\n if (!fs.existsSync(giPath)) return;\n const content = fs.readFileSync(giPath, \"utf-8\");\n if (content.split(\"\\n\").some((l) => l.trim() === \".npmrc\")) return;\n atomicWriteFile(giPath, `${content}\\n# npm registry auth (managed by iui)\\n.npmrc\\n`);\n}\n\nconst IUI_BUILD_CACHE_GITIGNORE_LINES = IUI_CACHE_GITIGNORE_LINES;\n\n/**\n * Append compile-first cache artifacts to .gitignore when missing.\n * Does not ignore .iui/generated/ — teams commit slot codegen.\n */\nexport function ensureGitignoreHasIuiBuildCache(cwd: string = process.cwd()): void {\n const configRoot = resolveProjectConfigRoot(cwd);\n const giPath = path.join(configRoot, \".gitignore\");\n if (!fs.existsSync(giPath)) return;\n\n const content = fs.readFileSync(giPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n const missing = IUI_BUILD_CACHE_GITIGNORE_LINES.filter(\n (entry) => entry !== \"\" && !lines.some((l) => l.trim() === entry.trim()),\n );\n if (missing.length === 0) return;\n\n const suffix = missing.join(\"\\n\");\n const separator = content.endsWith(\"\\n\") || content.length === 0 ? \"\" : \"\\n\";\n atomicWriteFile(giPath, `${content}${separator}${suffix}\\n`);\n}\n\n// ── React detection ─────────────────────────────────────────────────────────\n\nexport type ReactCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\nexport type ReactDomCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\n/**\n * Inspect the consumer project's package.json to determine React status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectReactVersion(cwd: string = process.cwd()): ReactCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.dependencies?.react ??\n pkg.devDependencies?.react ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n // Attempt to read the *installed* version from node_modules\n const installedVersion = getInstalledReactVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isReact19(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\n/**\n * Read the actually-installed React version from node_modules/react/package.json.\n */\nfunction getInstalledReactVersion(cwd: string): string | null {\n try {\n const reactPkgPath = path.join(cwd, \"node_modules\", \"react\", \"package.json\");\n if (!fs.existsSync(reactPkgPath)) return null;\n const reactPkg = fs.readJsonSync(reactPkgPath) as Record<string, any>;\n return reactPkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check whether a version string represents React 19.x.\n * Handles exact versions (19.0.0), ranges (^19.0.0, ~19.1.0), and tagged versions.\n */\nfunction isReact19(version: string): boolean {\n // Strip leading semver range chars: ^, ~, >=, <=, >, <, =\n const cleaned = version.replace(/^[\\^~>=<]+/, \"\").trim();\n const major = parseInt(cleaned.split(\".\")[0], 10);\n return major === 19;\n}\n\n/**\n * Inspect the consumer project's package.json to determine react-dom status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectReactDomVersion(cwd: string = process.cwd()): ReactDomCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.dependencies?.[\"react-dom\"] ??\n pkg.devDependencies?.[\"react-dom\"] ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n const installedVersion = getInstalledReactDomVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isReact19(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\nfunction getInstalledReactDomVersion(cwd: string): string | null {\n try {\n const reactDomPkgPath = path.join(cwd, \"node_modules\", \"react-dom\", \"package.json\");\n if (!fs.existsSync(reactDomPkgPath)) return null;\n const reactDomPkg = fs.readJsonSync(reactDomPkgPath) as Record<string, any>;\n return reactDomPkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n// ── Vite detection ──────────────────────────────────────────────────────────\n\nexport type ViteCheckResult =\n | { status: \"ok\"; version: string }\n | { status: \"wrong-version\"; version: string }\n | { status: \"not-installed\" };\n\n/**\n * Inspect the consumer project's package.json to determine Vite status.\n * Checks both `dependencies` and `devDependencies`.\n */\nexport function detectViteVersion(cwd: string = process.cwd()): ViteCheckResult {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return { status: \"not-installed\" };\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, any>;\n const version =\n pkg.devDependencies?.vite ??\n pkg.dependencies?.vite ??\n null;\n\n if (!version) return { status: \"not-installed\" };\n\n // Attempt to read the *installed* version from node_modules\n const installedVersion = getInstalledViteVersion(cwd);\n const versionToCheck = installedVersion ?? version;\n\n if (isViteSupported(versionToCheck)) {\n return { status: \"ok\", version: versionToCheck };\n }\n\n return { status: \"wrong-version\", version: versionToCheck };\n } catch {\n return { status: \"not-installed\" };\n }\n}\n\n/**\n * Read the actually-installed Vite version from node_modules/vite/package.json.\n */\nfunction getInstalledViteVersion(cwd: string): string | null {\n try {\n const vitePkgPath = path.join(cwd, \"node_modules\", \"vite\", \"package.json\");\n if (!fs.existsSync(vitePkgPath)) return null;\n const vitePkg = fs.readJsonSync(vitePkgPath) as Record<string, any>;\n return vitePkg.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * True when this project intentionally uses Webpack (direct package.json deps only).\n */\nexport function projectHasWebpackTooling(cwd: string = process.cwd()): boolean {\n return Boolean(\n isPackageInDeps(\"webpack\", cwd) ||\n isPackageInDeps(\"webpack-cli\", cwd) ||\n isPackageInDeps(\"webpack-dev-server\", cwd),\n );\n}\n\n/**\n * True when this project intentionally uses Next.js (direct package.json deps only).\n */\nexport function projectHasNextTooling(cwd: string = process.cwd()): boolean {\n return Boolean(isPackageInDeps(\"next\", cwd));\n}\n\n/**\n * Check whether a version string represents Vite 6.x or newer.\n */\nfunction isViteSupported(version: string): boolean {\n const cleaned = version.replace(/^[\\^~>=<]+/, \"\").trim();\n const major = parseInt(cleaned.split(\".\")[0], 10);\n return Number.isFinite(major) && major >= REQUIRED_VITE_MAJOR;\n}\n\n/**\n * Ensure vite.config.ts uses the framework Vite integration.\n *\n * Scaffold once when missing; patch existing configs (never full-replace user files).\n */\nexport function ensureInventiveUiViteConfig(\n cwd: string = process.cwd(),\n): ViteConfigEnsureAction {\n if (!projectHasViteTooling(cwd)) return \"skipped\";\n\n const configPath = path.join(cwd, \"vite.config.ts\");\n\n if (!fs.existsSync(configPath)) {\n atomicWriteFile(configPath, MINIMAL_VITE_SCAFFOLD);\n return \"scaffolded\";\n }\n\n const existing = fs.readFileSync(configPath, \"utf-8\");\n const result = patchViteConfigContent(existing);\n if (\"failed\" in result) return \"failed\";\n if (!result.changed) return \"noop\";\n\n atomicWriteFile(configPath, result.content);\n return /inventiveUiVite\\s*\\(/.test(existing) ? \"merged\" : \"patched\";\n}\n\n/** @deprecated Use ensureInventiveUiViteConfig — kept for existing call sites. */\nexport function writeViteConfig(cwd: string = process.cwd()): void {\n ensureInventiveUiViteConfig(cwd);\n}\n","// ─── Secure filesystem helpers ─────────────────────────────────────────────\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { atomicWriteFile } from \"../atomic.js\";\r\n\r\nconst SECRET_FILE_MODE = 0o600;\r\nconst CONFIG_DIR_MODE = 0o700;\r\n\r\nexport function ensureSecretDir(dirPath: string): void {\r\n fs.mkdirSync(dirPath, { recursive: true, mode: CONFIG_DIR_MODE });\r\n try {\r\n fs.chmodSync(dirPath, CONFIG_DIR_MODE);\r\n } catch {\r\n /* best effort on platforms that restrict chmod */\r\n }\r\n}\r\n\r\nexport function writeFileRestricted(filePath: string, content: string): void {\r\n const dir = path.dirname(filePath);\r\n ensureSecretDir(dir);\r\n atomicWriteFile(filePath, content, { mode: SECRET_FILE_MODE });\r\n try {\r\n fs.chmodSync(filePath, SECRET_FILE_MODE);\r\n } catch {\r\n /* best effort */\r\n }\r\n}\r\n\r\nexport function writeJsonRestricted(filePath: string, data: unknown): void {\r\n writeFileRestricted(filePath, `${JSON.stringify(data, null, 2)}\\n`);\r\n}\r\n","import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport os from \"node:os\";\r\nimport crypto from \"node:crypto\";\r\n\r\nexport interface AtomicWriteOptions {\r\n mode?: number;\r\n backup?: boolean;\r\n}\r\n\r\nexport function sha256(value: string): string {\r\n return crypto.createHash(\"sha256\").update(value).digest(\"hex\");\r\n}\r\n\r\nfunction fsyncDirectory(dir: string): void {\r\n if (process.platform === \"win32\") return;\r\n let fd: number | null = null;\r\n try {\r\n fd = fs.openSync(dir, \"r\");\r\n fs.fsyncSync(fd);\r\n } catch {\r\n /* best effort */\r\n } finally {\r\n if (fd !== null) {\r\n try {\r\n fs.closeSync(fd);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction tempPathFor(filePath: string): string {\r\n const dir = path.dirname(filePath);\r\n const base = path.basename(filePath);\r\n const nonce = `${process.pid}.${Date.now()}.${crypto.randomBytes(6).toString(\"hex\")}`;\r\n return path.join(dir, `.${base}.${nonce}.tmp`);\r\n}\r\n\r\nfunction backupPathFor(filePath: string): string {\r\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\r\n return `${filePath}.${stamp}.bak`;\r\n}\r\n\r\nexport function atomicWriteFile(\r\n filePath: string,\r\n content: string,\r\n options: AtomicWriteOptions = {},\r\n): void {\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n\r\n const tmp = tempPathFor(filePath);\r\n let fd: number | null = null;\r\n\r\n try {\r\n fd = fs.openSync(tmp, \"wx\", options.mode ?? 0o666);\r\n fs.writeFileSync(fd, content, { encoding: \"utf-8\" });\r\n fs.fsyncSync(fd);\r\n fs.closeSync(fd);\r\n fd = null;\r\n\r\n if (options.backup && fs.existsSync(filePath)) {\r\n fs.copyFileSync(filePath, backupPathFor(filePath));\r\n }\r\n\r\n fs.renameSync(tmp, filePath);\r\n fsyncDirectory(dir);\r\n } catch (error) {\r\n if (fd !== null) {\r\n try {\r\n fs.closeSync(fd);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n try {\r\n if (fs.existsSync(tmp)) fs.unlinkSync(tmp);\r\n } catch {\r\n /* best effort */\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport function atomicWriteJson(\r\n filePath: string,\r\n data: unknown,\r\n options: AtomicWriteOptions = {},\r\n): void {\r\n atomicWriteFile(filePath, `${JSON.stringify(data, null, 2)}\\n`, options);\r\n}\r\n\r\nexport function cleanupTempFiles(dir: string, maxAgeMs = 24 * 60 * 60 * 1000): void {\r\n if (!fs.existsSync(dir)) return;\r\n const now = Date.now();\r\n for (const name of fs.readdirSync(dir)) {\r\n if (!name.endsWith(\".tmp\")) continue;\r\n const fullPath = path.join(dir, name);\r\n try {\r\n const stat = fs.statSync(fullPath);\r\n if (now - stat.mtimeMs >= maxAgeMs) fs.unlinkSync(fullPath);\r\n } catch {\r\n /* best effort */\r\n }\r\n }\r\n}\r\n\r\nexport async function retry<T>(\r\n operation: () => T | Promise<T>,\r\n attempts = 3,\r\n delayMs = 75,\r\n): Promise<T> {\r\n let lastError: unknown;\r\n for (let attempt = 1; attempt <= attempts; attempt++) {\r\n try {\r\n return await operation();\r\n } catch (error) {\r\n lastError = error;\r\n if (attempt === attempts) break;\r\n await new Promise((resolve) => setTimeout(resolve, delayMs * attempt));\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\nexport function isWritableDirectory(dir: string): boolean {\r\n try {\r\n fs.mkdirSync(dir, { recursive: true });\r\n const probe = path.join(dir, `.write-test-${process.pid}-${Date.now()}`);\r\n fs.writeFileSync(probe, \"ok\");\r\n fs.unlinkSync(probe);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function systemTempDir(): string {\r\n return os.tmpdir();\r\n}\r\n","// ─── Path containment helpers ────────────────────────────────────────────────\r\n\r\nimport path from \"node:path\";\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nexport function assertWithinRoot(rootDir: string, targetPath: string, label: string): void {\r\n const root = path.resolve(rootDir);\r\n const target = path.resolve(targetPath);\r\n const rel = path.relative(root, target);\r\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\r\n throw new CLIError(\r\n `Unsafe ${label} path: ${targetPath}`,\r\n `Path must stay within ${rootDir}`,\r\n );\r\n }\r\n}\r\n\r\nexport function resolveWithinRoot(rootDir: string, ...segments: string[]): string {\r\n const joined = path.join(rootDir, ...segments);\r\n assertWithinRoot(rootDir, joined, \"file\");\r\n return joined;\r\n}\r\n\r\nexport function normalizeComponentsDir(componentsDir: string, projectRoot: string): string {\r\n const trimmed = componentsDir.trim();\r\n if (!trimmed) {\r\n throw new CLIError(\"componentsDir cannot be empty.\");\r\n }\r\n if (path.isAbsolute(trimmed)) {\r\n assertWithinRoot(projectRoot, trimmed, \"componentsDir\");\r\n return trimmed;\r\n }\r\n const resolved = path.resolve(projectRoot, trimmed);\r\n assertWithinRoot(projectRoot, resolved, \"componentsDir\");\r\n return resolved;\r\n}\r\n","// ─── Safe subprocess execution ─────────────────────────────────────────────\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { execFileSync, spawnSync } from \"node:child_process\";\nimport { atomicWriteJson } from \"../atomic.js\";\nimport { CLIError, formatExecSyncError } from \"../errors.js\";\nimport { isVersionEqual } from \"../version.js\";\nimport { resolveWorkspaceInstallRouting, resolvePackageDir } from \"../workspace.js\";\n\nexport type PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nconst WINDOWS_SHELL_COMMANDS = new Set([\"npm\", \"npx\", \"yarn\", \"pnpm\", \"bun\"]);\n\n/** npm/yarn/pnpm are .cmd shims on Windows; spawnSync needs shell or ENOENT. */\nexport function shouldUseShellForSpawn(file: string): boolean {\n if (process.platform !== \"win32\") return false;\n const base = file.replace(/\\.(cmd|exe|bat)$/i, \"\");\n return WINDOWS_SHELL_COMMANDS.has(base);\n}\n\nexport function execFileCommand(\n file: string,\n args: string[],\n cwd: string,\n inheritStdio = false,\n): void {\n const result = spawnSync(file, args, {\n cwd,\n stdio: inheritStdio ? \"inherit\" : \"pipe\",\n encoding: \"utf-8\",\n shell: shouldUseShellForSpawn(file),\n });\n\n if (result.status === 0) return;\n\n const err = new Error(\n formatExecSyncError(result) ?? `Command failed: ${file} ${args.join(\" \")}`,\n ) as Error & { stderr?: string; stdout?: string };\n if (typeof result.stderr === \"string\") err.stderr = result.stderr;\n if (typeof result.stdout === \"string\") err.stdout = result.stdout;\n throw err;\n}\n\n/**\n * npm 11 workspace installs crash with \"Cannot read properties of null (reading 'location')\"\n * when the root shrinkwrap is stale for the target workspace. Sync immediately before add.\n */\nfunction syncWorkspaceLockfileBeforeAdd(\n pm: PackageManager,\n commandCwd: string,\n workspaceName: string | null,\n): void {\n if (!workspaceName) return;\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"install\"], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"install\"], commandCwd);\n return;\n case \"bun\":\n return;\n default:\n execFileCommand(\"npm\", [\"install\"], commandCwd);\n }\n}\n\n/** Parse `pkg`, `pkg@latest`, or `@scope/pkg@^1.0.0`. */\nexport function parsePackageInstallSpec(spec: string): { name: string; range: string } {\n const trimmed = spec.trim();\n if (!trimmed) {\n throw new CLIError(\"Invalid package spec.\", \"Expected a non-empty package name.\");\n }\n\n if (trimmed.startsWith(\"@\")) {\n const slash = trimmed.indexOf(\"/\");\n if (slash === -1) {\n throw new CLIError(`Invalid scoped package spec: ${spec}`);\n }\n const at = trimmed.indexOf(\"@\", slash + 1);\n if (at === -1) return { name: trimmed, range: \"latest\" };\n return { name: trimmed.slice(0, at), range: trimmed.slice(at + 1) || \"latest\" };\n }\n\n const at = trimmed.indexOf(\"@\");\n if (at === -1) return { name: trimmed, range: \"latest\" };\n return { name: trimmed.slice(0, at), range: trimmed.slice(at + 1) || \"latest\" };\n}\n\n/** Range written to package.json before npm resolves and pins a semver. */\nexport function manifestDependencyRange(range: string): string {\n return range === \"*\" ? \"latest\" : range;\n}\n\nfunction readInstalledPackageVersion(packageName: string, startCwd: string): string | null {\n const pkgDir = resolvePackageDir(packageName, startCwd);\n if (!pkgDir) return null;\n try {\n const pkg = fs.readJsonSync(path.join(pkgDir, \"package.json\")) as { version?: string };\n return typeof pkg.version === \"string\" && pkg.version.length > 0 ? pkg.version : null;\n } catch {\n return null;\n }\n}\n\n/**\n * npm 11 crashes on `npm install <pkg> -w <name>` when the workspace root has\n * `file:` dependencies (e.g. a linked local CLI). Write deps to the child\n * package.json, then sync with `npm install` at the workspace root.\n */\nfunction npmInstallWorkspacePackagesViaManifest(\n packageDir: string,\n commandCwd: string,\n pkgList: string[],\n dev: boolean,\n): void {\n const pkgPath = path.join(packageDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) {\n throw new CLIError(\n `No package.json found in ${packageDir}.`,\n \"Run iui init from a directory that contains package.json.\",\n );\n }\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const field = dev ? \"devDependencies\" : \"dependencies\";\n const previousField = { ...(pkg[field] ?? {}) };\n const deps = { ...previousField };\n\n for (const spec of pkgList) {\n const { name, range } = parsePackageInstallSpec(spec);\n deps[name] = manifestDependencyRange(range);\n }\n\n pkg[field] = deps;\n atomicWriteJson(pkgPath, pkg);\n\n try {\n execFileCommand(\"npm\", [\"install\", \"--legacy-peer-deps\"], commandCwd);\n } catch (err) {\n pkg[field] = previousField;\n atomicWriteJson(pkgPath, pkg);\n throw err;\n }\n\n // Normalize to caret ranges and verify explicit semver installs resolved correctly.\n for (const spec of pkgList) {\n const { name, range } = parsePackageInstallSpec(spec);\n const installed = readInstalledPackageVersion(name, packageDir);\n const expectedExact = /^\\d+\\.\\d+\\.\\d+/.test(range)\n ? range.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] ?? null\n : null;\n\n if (expectedExact && installed && !isVersionEqual(installed, expectedExact)) {\n throw new CLIError(\n `Expected ${name}@${expectedExact} after install, but found v${installed}.`,\n \"Check registry auth (iui login) and retry the install from the workspace root.\",\n );\n }\n\n if (installed) {\n deps[name] = `^${installed}`;\n }\n }\n\n pkg[field] = deps;\n atomicWriteJson(pkgPath, pkg);\n}\n\nfunction npmInstallWorkspacePackages(\n pm: PackageManager,\n cwd: string,\n commandCwd: string,\n workspaceName: string,\n pkgList: string[],\n dev: boolean,\n): void {\n if (pm === \"npm\") {\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n npmInstallWorkspacePackagesViaManifest(cwd, commandCwd, pkgList, dev);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\n \"yarn\",\n [\"workspace\", workspaceName, \"add\", ...(dev ? [\"-D\"] : []), ...pkgList],\n commandCwd,\n );\n return;\n case \"pnpm\":\n execFileCommand(\n \"pnpm\",\n [\"add\", ...(dev ? [\"-D\"] : []), ...pkgList, \"--filter\", workspaceName],\n commandCwd,\n );\n return;\n default:\n execFileCommand(\"npm\", [\"install\", ...pkgList, \"-w\", workspaceName], commandCwd);\n }\n}\n\nexport function installPackages(pm: PackageManager, packages: string, cwd: string): void {\n const pkgList = packages.split(/\\s+/).filter(Boolean);\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n if (workspaceName) {\n npmInstallWorkspacePackages(pm, cwd, commandCwd, workspaceName, pkgList, false);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"add\", ...pkgList], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"add\", ...pkgList], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", ...pkgList], cwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\", ...pkgList], commandCwd);\n }\n}\n\nexport function installDevPackages(pm: PackageManager, packages: string, cwd: string): void {\n const pkgList = packages.split(/\\s+/).filter(Boolean);\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n if (workspaceName) {\n npmInstallWorkspacePackages(pm, cwd, commandCwd, workspaceName, pkgList, true);\n return;\n }\n\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"add\", \"-D\", ...pkgList], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"add\", \"-D\", ...pkgList], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", \"-d\", ...pkgList], cwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\", \"--save-dev\", ...pkgList], commandCwd);\n }\n}\n\nexport function installTarball(pm: PackageManager, tarballPath: string, cwd: string): void {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n syncWorkspaceLockfileBeforeAdd(pm, commandCwd, workspaceName);\n\n switch (pm) {\n case \"yarn\":\n if (workspaceName) {\n execFileCommand(\"yarn\", [\"workspace\", workspaceName, \"add\", tarballPath], commandCwd);\n return;\n }\n execFileCommand(\"yarn\", [\"add\", tarballPath], commandCwd);\n return;\n case \"pnpm\":\n if (workspaceName) {\n execFileCommand(\"pnpm\", [\"add\", tarballPath, \"--filter\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"pnpm\", [\"add\", tarballPath], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"add\", tarballPath], cwd);\n return;\n default:\n if (workspaceName) {\n execFileCommand(\n \"npm\",\n [\"install\", \"--no-save\", tarballPath, \"-w\", workspaceName],\n commandCwd,\n );\n return;\n }\n execFileCommand(\"npm\", [\"install\", \"--no-save\", tarballPath], commandCwd);\n }\n}\n\nexport function runSyncInstall(pm: PackageManager, cwd: string): void {\n const { commandCwd } = resolveWorkspaceInstallRouting(cwd);\n switch (pm) {\n case \"yarn\":\n execFileCommand(\"yarn\", [\"install\"], commandCwd);\n return;\n case \"pnpm\":\n execFileCommand(\"pnpm\", [\"install\"], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"install\"], commandCwd);\n return;\n default:\n execFileCommand(\"npm\", [\"install\"], commandCwd);\n }\n}\n\nexport function uninstallPackage(pm: PackageManager, packageName: string, cwd: string): void {\n const { commandCwd, workspaceName } = resolveWorkspaceInstallRouting(cwd);\n\n switch (pm) {\n case \"yarn\":\n if (workspaceName) {\n execFileCommand(\"yarn\", [\"workspace\", workspaceName, \"remove\", packageName], commandCwd);\n return;\n }\n execFileCommand(\"yarn\", [\"remove\", packageName], commandCwd);\n return;\n case \"pnpm\":\n if (workspaceName) {\n execFileCommand(\"pnpm\", [\"remove\", packageName, \"--filter\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"pnpm\", [\"remove\", packageName], commandCwd);\n return;\n case \"bun\":\n execFileCommand(\"bun\", [\"remove\", packageName], cwd);\n return;\n default:\n if (workspaceName) {\n execFileCommand(\"npm\", [\"uninstall\", packageName, \"-w\", workspaceName], commandCwd);\n return;\n }\n execFileCommand(\"npm\", [\"uninstall\", packageName], commandCwd);\n }\n}\n\nexport function runTscNoEmit(tscPath: string, args: string[], cwd: string): void {\n try {\n execFileSync(process.execPath, [tscPath, ...args], {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n encoding: \"utf-8\",\n });\n } catch (err) {\n throw err;\n }\n}\n\nexport function failInstall(err: unknown, context: string): never {\n throw new CLIError(\n `Failed during ${context}.`,\n formatExecSyncError(err) ?? \"Unknown install error\",\n );\n}\n","// ─── Semver helpers ─────────────────────────────────────────────────────────\r\n//\r\n// Lightweight, dependency-free semver utilities used for update planning and\r\n// version drift detection. Implements the comparison rules from semver 2.0.0\r\n// for major.minor.patch and the standard prerelease ordering (numeric vs\r\n// alphanumeric identifiers).\r\n\r\nexport interface SemVer {\r\n major: number;\r\n minor: number;\r\n patch: number;\r\n prerelease: ReadonlyArray<string | number>;\r\n build: ReadonlyArray<string>;\r\n}\r\n\r\nconst SEMVER_PATTERN =\r\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/;\r\n\r\n/**\r\n * Strip leading semver range characters (^, ~, >=, etc.) and surrounding\r\n * whitespace. Returns the bare candidate version string.\r\n */\r\nexport function cleanVersionString(version: string | null | undefined): string {\r\n if (!version) return \"\";\r\n return version.replace(/^[\\s\\^~>=<v]+/i, \"\").trim();\r\n}\r\n\r\n/**\r\n * Parse a strict semver string. Returns null when the input is not a valid\r\n * semver (range strings like `^1.2.3` must be cleaned first).\r\n */\r\nexport function parseVersion(input: string | null | undefined): SemVer | null {\r\n if (!input) return null;\r\n const cleaned = cleanVersionString(input);\r\n if (!cleaned) return null;\r\n\r\n const match = SEMVER_PATTERN.exec(cleaned);\r\n if (!match) return null;\r\n\r\n const [, major, minor, patch, prerelease, build] = match;\r\n const prereleaseIdentifiers = prerelease\r\n ? prerelease.split(\".\").map((part) => (/^\\d+$/.test(part) ? Number(part) : part))\r\n : [];\r\n\r\n return {\r\n major: Number(major),\r\n minor: Number(minor),\r\n patch: Number(patch),\r\n prerelease: prereleaseIdentifiers,\r\n build: build ? build.split(\".\") : [],\r\n };\r\n}\r\n\r\nfunction comparePrerelease(\r\n a: ReadonlyArray<string | number>,\r\n b: ReadonlyArray<string | number>,\r\n): number {\r\n // A version without prerelease has higher precedence than one with.\r\n if (a.length === 0 && b.length === 0) return 0;\r\n if (a.length === 0) return 1;\r\n if (b.length === 0) return -1;\r\n\r\n const len = Math.max(a.length, b.length);\r\n for (let i = 0; i < len; i++) {\r\n if (i >= a.length) return -1;\r\n if (i >= b.length) return 1;\r\n const left = a[i];\r\n const right = b[i];\r\n const leftIsNumber = typeof left === \"number\";\r\n const rightIsNumber = typeof right === \"number\";\r\n if (leftIsNumber && rightIsNumber) {\r\n if (left !== right) return (left as number) - (right as number) > 0 ? 1 : -1;\r\n continue;\r\n }\r\n if (leftIsNumber !== rightIsNumber) return leftIsNumber ? -1 : 1;\r\n const ls = String(left);\r\n const rs = String(right);\r\n if (ls === rs) continue;\r\n return ls < rs ? -1 : 1;\r\n }\r\n return 0;\r\n}\r\n\r\n/**\r\n * Strict semver comparison. Returns -1 if a<b, 1 if a>b, 0 if equal.\r\n * Unparseable inputs fall back to case-insensitive string comparison so the\r\n * caller can still order them deterministically.\r\n */\r\nexport function compareVersions(a: string, b: string): number {\r\n const av = parseVersion(a);\r\n const bv = parseVersion(b);\r\n if (!av || !bv) {\r\n const as = cleanVersionString(a).toLowerCase();\r\n const bs = cleanVersionString(b).toLowerCase();\r\n if (as === bs) return 0;\r\n return as < bs ? -1 : 1;\r\n }\r\n if (av.major !== bv.major) return av.major > bv.major ? 1 : -1;\r\n if (av.minor !== bv.minor) return av.minor > bv.minor ? 1 : -1;\r\n if (av.patch !== bv.patch) return av.patch > bv.patch ? 1 : -1;\r\n return comparePrerelease(av.prerelease, bv.prerelease);\r\n}\r\n\r\n/**\r\n * Returns true when `candidate` represents a strictly newer release than\r\n * `current`. Both arguments are tolerated as range strings.\r\n */\r\nexport function isVersionGreater(candidate: string, current: string): boolean {\r\n return compareVersions(candidate, current) > 0;\r\n}\r\n\r\n/**\r\n * Returns true when `candidate` represents the same release as `current`.\r\n */\r\nexport function isVersionEqual(candidate: string, current: string): boolean {\r\n return compareVersions(candidate, current) === 0;\r\n}\r\n","// ─── Monorepo / workspace helpers ────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { IUI_DIR } from \"../constants.js\";\n\nfunction isDirectory(p: string): boolean {\n try {\n return fs.statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction readPackageJson(dir: string): Record<string, unknown> | null {\n const p = path.join(dir, \"package.json\");\n if (!fs.existsSync(p)) return null;\n try {\n const data = fs.readJsonSync(p) as unknown;\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n return data as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n return null;\n}\n\n/** npm / yarn / bun workspaces from package.json */\nfunction workspacePatternsFromPackageJson(dir: string): string[] {\n const pkg = readPackageJson(dir);\n if (!pkg) return [];\n const workspaces = pkg.workspaces;\n if (Array.isArray(workspaces)) {\n return workspaces.map(String);\n }\n if (workspaces && typeof workspaces === \"object\" && !Array.isArray(workspaces)) {\n const w = workspaces as { packages?: unknown };\n if (Array.isArray(w.packages)) return w.packages.map(String);\n }\n return [];\n}\n\n/** pnpm-workspace.yaml `packages:` entries */\nfunction workspacePatternsFromPnpm(dir: string): string[] {\n const p = path.join(dir, \"pnpm-workspace.yaml\");\n if (!fs.existsSync(p)) return [];\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n const patterns: string[] = [];\n let inPackages = false;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n if (trimmed === \"packages:\") {\n inPackages = true;\n continue;\n }\n if (inPackages) {\n if (!trimmed.startsWith(\"-\")) {\n if (!line.startsWith(\" \") && !line.startsWith(\"\\t\")) inPackages = false;\n if (!inPackages) continue;\n }\n if (!trimmed.startsWith(\"-\")) continue;\n const value = trimmed.replace(/^-\\s*/, \"\").replace(/^['\"]|['\"]$/g, \"\");\n if (value) patterns.push(value);\n }\n }\n return patterns;\n } catch {\n return [];\n }\n}\n\nfunction expandWorkspacePattern(workspaceRoot: string, pattern: string): string[] {\n const normalized = pattern.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\");\n\n if (normalized.includes(\"**\")) {\n const prefix = normalized.split(\"**\")[0]!.replace(/\\/$/, \"\");\n const searchRoot = prefix ? path.join(workspaceRoot, prefix) : workspaceRoot;\n return findNestedPackageDirs(searchRoot);\n }\n\n if (normalized.includes(\"*\")) {\n const idx = normalized.indexOf(\"*\");\n const base = path.join(workspaceRoot, normalized.slice(0, idx).replace(/\\/$/, \"\"));\n if (!isDirectory(base)) return [];\n return fs\n .readdirSync(base)\n .map((name) => path.join(base, name))\n .filter((dir) => fs.existsSync(path.join(dir, \"package.json\")));\n }\n\n const dir = path.join(workspaceRoot, normalized);\n return fs.existsSync(path.join(dir, \"package.json\")) ? [dir] : [];\n}\n\n/** Discover workspace packages under a directory tree (for `packages/**` style globs). */\nfunction findNestedPackageDirs(rootDir: string, maxDepth = 6): string[] {\n if (!isDirectory(rootDir)) return [];\n\n const results: string[] = [];\n\n function walk(current: string, depth: number): void {\n if (depth > maxDepth) return;\n\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n results.push(current);\n return;\n }\n\n let entries: string[] = [];\n try {\n entries = fs.readdirSync(current);\n } catch {\n return;\n }\n\n for (const name of entries) {\n if (name === \"node_modules\" || name === \"dist\" || name === \"build\") continue;\n const child = path.join(current, name);\n if (isDirectory(child)) walk(child, depth + 1);\n }\n }\n\n walk(rootDir, 0);\n return results;\n}\n\n/**\n * Find the monorepo workspace root (directory with workspaces / pnpm-workspace.yaml).\n */\nexport function findWorkspaceRoot(startCwd: string): string | null {\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const patterns = [\n ...workspacePatternsFromPackageJson(dir),\n ...workspacePatternsFromPnpm(dir),\n ];\n if (patterns.length > 0) return dir;\n\n if (dir === fsRoot) break;\n dir = path.dirname(dir);\n }\n return null;\n}\n\n/**\n * Find the IUI project root for the current directory.\n * In monorepos, prefers the workspace root when both root and nested packages\n * were initialized separately.\n */\nexport function findIuiProjectRoot(startCwd: string): string | null {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n const candidates: string[] = [];\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n if (fs.existsSync(path.join(dir, IUI_DIR, \"project.json\"))) {\n candidates.push(dir);\n }\n if (dir === fsRoot) break;\n dir = path.dirname(dir);\n }\n\n if (candidates.length === 0) return null;\n if (\n workspaceRoot &&\n candidates.some((c) => path.resolve(c) === path.resolve(workspaceRoot))\n ) {\n return workspaceRoot;\n }\n return candidates[0];\n}\n\n/** Resolved IUI metadata root for the current working directory. */\nexport function resolveIuiProjectRoot(startCwd: string): string {\n return findIuiProjectRoot(startCwd) ?? path.resolve(startCwd);\n}\n\nexport type InitRootOptions = {\n /** When true, initialize once at the monorepo workspace root (opt-in). */\n workspace?: boolean;\n};\n\n/**\n * Where `iui init` should run.\n * Default: current package only. Pass workspace: true to init at the monorepo root.\n */\nexport function resolveInitRoot(\n invocationCwd: string,\n options: InitRootOptions = {},\n): {\n initRoot: string;\n workspaceRoot: string | null;\n redirectedFrom: string | null;\n} {\n const cwd = path.resolve(invocationCwd);\n const workspaceRoot = findWorkspaceRoot(cwd);\n\n if (!options.workspace) {\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n }\n\n if (!workspaceRoot) {\n return { initRoot: cwd, workspaceRoot: null, redirectedFrom: null };\n }\n\n if (path.resolve(workspaceRoot) === cwd) {\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n }\n\n if (readPackageJson(workspaceRoot)) {\n return { initRoot: workspaceRoot, workspaceRoot, redirectedFrom: cwd };\n }\n\n return { initRoot: cwd, workspaceRoot, redirectedFrom: null };\n}\n\n/**\n * Where `npm install` / `pnpm install` must run.\n * In npm/pnpm workspaces, installs from a child package fail — use the workspace root.\n */\nexport function resolveDependencyInstallRoot(cwd: string): string {\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/** Where committed project config (.npmrc scope, lockfile) should live in monorepos. */\nexport function resolveProjectConfigRoot(cwd: string): string {\n return resolveDependencyInstallRoot(cwd);\n}\n\n/**\n * True when installs must run against a workspace root (npm/pnpm/yarn workspaces).\n */\nexport function isMonorepoInstallContext(cwd: string): boolean {\n return findWorkspaceRoot(cwd) !== null;\n}\n\n/**\n * Monorepo child apps should use registry installs (`npm install <pkg> -w <name>`).\n * Local `--no-save` tarballs are non-standard in workspaces and can corrupt lockfiles.\n */\nexport function shouldUseWorkspaceRegistryInstall(cwd: string): boolean {\n return isWorkspaceChildPackage(cwd);\n}\n\n/** True when cwd is a workspace package but not the workspace root. */\nexport function isWorkspaceChildPackage(cwd: string): boolean {\n const workspaceRoot = findWorkspaceRoot(cwd);\n if (!workspaceRoot) return false;\n return path.resolve(workspaceRoot) !== path.resolve(cwd);\n}\n\nexport interface WorkspaceInstallRouting {\n /** Directory where the package manager command must run (workspace root in monorepos). */\n commandCwd: string;\n /** Workspace package name from package.json when installing into a child app. */\n workspaceName: string | null;\n}\n\n/**\n * Route `npm|pnpm|yarn add` to the workspace root with -w/--filter when cwd is apps/*.\n * Running `npm install <pkg>` inside a child workspace package fails on npm (null location).\n */\nexport function resolveWorkspaceInstallRouting(packageDir: string): WorkspaceInstallRouting {\n const resolved = path.resolve(packageDir);\n const commandCwd = resolveDependencyInstallRoot(resolved);\n if (!isWorkspaceChildPackage(resolved)) {\n return { commandCwd: resolved, workspaceName: null };\n }\n const pkg = readPackageJson(resolved);\n const name = pkg?.name;\n const workspaceName = typeof name === \"string\" && name.trim() ? name.trim() : null;\n return { commandCwd, workspaceName };\n}\n\n/** Workspace packages that have committed `.iui/project.json` (per-app init). */\nexport function listIuiInitializedPackages(startCwd: string): string[] {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n if (workspaceRoot) {\n const initialized = listWorkspacePackageDirs(workspaceRoot).filter((dir) =>\n fs.existsSync(path.join(dir, IUI_DIR, \"project.json\")),\n );\n if (initialized.length > 0) return initialized;\n }\n\n const iuiRoot = findIuiProjectRoot(startCwd);\n return iuiRoot ? [iuiRoot] : [];\n}\n\n/**\n * Packages to run `iui doctor` against during setup.\n * - Current dir when it has `.iui/`\n * - All initialized workspace apps when run from the monorepo root\n * - Otherwise the current directory (reports not initialized)\n */\nexport function resolveSetupDoctorTargets(cwd: string): string[] {\n const resolved = path.resolve(cwd);\n if (fs.existsSync(path.join(resolved, IUI_DIR, \"project.json\"))) {\n return [resolved];\n }\n\n const workspacePackages = listIuiInitializedPackages(cwd);\n if (workspacePackages.length > 0) return workspacePackages;\n\n return [resolved];\n}\n\n/** List workspace package directories (absolute paths). */\nexport function listWorkspacePackageDirs(workspaceRoot: string): string[] {\n const patterns = [\n ...workspacePatternsFromPackageJson(workspaceRoot),\n ...workspacePatternsFromPnpm(workspaceRoot),\n ];\n const seen = new Set<string>();\n const out: string[] = [];\n\n for (const pattern of patterns) {\n for (const dir of expandWorkspacePattern(workspaceRoot, pattern)) {\n const key = path.resolve(dir);\n if (!seen.has(key)) {\n seen.add(key);\n out.push(key);\n }\n }\n }\n\n return out.sort();\n}\n\n/** POSIX-style relative import path between two directories. */\nexport function relativeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile).replace(/\\\\/g, \"/\");\n if (!rel.startsWith(\".\")) rel = `./${rel}`;\n return rel.replace(/\\.tsx?$/, \"\");\n}\n\n/**\n * Walk upward from startCwd through workspace root (inclusive) to find an installed package directory.\n */\nexport function resolvePackageDir(packageName: string, startCwd: string): string | null {\n const parts = packageName.startsWith(\"@\") ? packageName.split(\"/\") : [packageName];\n const workspaceRoot = findWorkspaceRoot(startCwd);\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const pkgJson = path.join(dir, \"node_modules\", ...parts, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return path.dirname(pkgJson);\n }\n\n const atStop = workspaceRoot && path.resolve(dir) === path.resolve(workspaceRoot);\n if (dir === fsRoot || atStop) break;\n dir = path.dirname(dir);\n }\n\n return null;\n}\n\n/** True when `packageName` is declared in this directory's package.json only (not ancestors). */\nexport function isPackageInDirectDeps(packageName: string, cwd: string): string | null {\n const pkg = readPackageJson(path.resolve(cwd));\n if (!pkg) return null;\n const deps = pkg.dependencies as Record<string, string> | undefined;\n const devDeps = pkg.devDependencies as Record<string, string> | undefined;\n return deps?.[packageName] ?? devDeps?.[packageName] ?? null;\n}\n\n/** Find package.json declaring a dependency, walking up through the workspace. */\nexport function findPackageJsonWithDep(\n packageName: string,\n startCwd: string,\n): { dir: string; version: string } | null {\n const workspaceRoot = findWorkspaceRoot(startCwd);\n let dir = path.resolve(startCwd);\n const fsRoot = path.parse(dir).root;\n\n while (true) {\n const pkg = readPackageJson(dir);\n if (pkg) {\n const deps = pkg.dependencies as Record<string, string> | undefined;\n const devDeps = pkg.devDependencies as Record<string, string> | undefined;\n const version = deps?.[packageName] ?? devDeps?.[packageName];\n if (version) return { dir, version };\n }\n\n const atStop = workspaceRoot && path.resolve(dir) === path.resolve(workspaceRoot);\n if (dir === fsRoot || atStop) break;\n dir = path.dirname(dir);\n }\n\n return null;\n}\n","// ─── Registry manifest validation (zod) ────────────────────────────────────\r\n\r\nimport { z } from \"zod\";\r\nimport type { ComponentPackageManifest } from \"../types.js\";\r\n\r\nconst slugSchema = z\r\n .string()\r\n .regex(/^[a-z][a-z0-9-]*$/, \"slug must be lowercase alphanumeric with hyphens\");\r\n\r\nconst registryItemSchema = z.object({\r\n name: slugSchema,\r\n type: z.string(),\r\n title: z.string().max(120),\r\n description: z.string().max(500).optional(),\r\n dirName: z\r\n .string()\r\n .regex(/^[A-Za-z][A-Za-z0-9]*$/, \"dirName must be a valid PascalCase identifier\"),\r\n dependencies: z.array(z.string()).optional(),\r\n registryDependencies: z.array(slugSchema).optional(),\r\n slots: z.array(z.string().max(64)).optional(),\r\n categories: z.array(z.string()).optional(),\r\n meta: z.record(z.unknown()).optional(),\r\n});\r\n\r\nconst manifestSchema = z.object({\r\n $schema: z.string().optional(),\r\n name: z.string().max(120),\r\n homepage: z.string().url().optional().or(z.literal(\"\")),\r\n version: z.string().max(64),\r\n items: z.array(registryItemSchema).min(1),\r\n});\r\n\r\nexport function parseAndValidateRegistryManifest(\r\n raw: unknown,\r\n source: string,\r\n): ComponentPackageManifest {\r\n const result = manifestSchema.safeParse(raw);\r\n if (!result.success) {\r\n const detail = result.error.issues\r\n .slice(0, 5)\r\n .map((i) => `${i.path.join(\".\")}: ${i.message}`)\r\n .join(\"; \");\r\n throw new Error(`Invalid component registry from ${source}: ${detail}`);\r\n }\r\n return result.data as ComponentPackageManifest;\r\n}\r\n","/**\n * Product CLI scaffold — loads contract defaults from @inventive-ui/framework only.\n * Accent palettes are never scaffolded; users define theme.colors.accent themselves.\n */\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createJiti } from \"jiti\";\nimport { CLIError } from \"./errors.js\";\nimport { FRAMEWORK_PACKAGE } from \"../constants.js\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nfunction resolveFrameworkScriptsDir(startCwd: string): string {\n const searchRoots = [startCwd, process.cwd(), join(__dirname, \"../..\")];\n for (const root of searchRoots) {\n const frameworkDir = resolvePackageDir(FRAMEWORK_PACKAGE, root);\n if (!frameworkDir) continue;\n const scriptsDir = join(frameworkDir, \"scripts\");\n const loader = join(scriptsDir, \"load-framework-theme-defaults.mjs\");\n if (existsSync(loader)) return scriptsDir;\n }\n\n throw new CLIError(\n `Cannot scaffold iui.config.ts: ${FRAMEWORK_PACKAGE} is not installed or is missing scripts/load-framework-theme-defaults.mjs.`,\n );\n}\n\nexport function buildProjectConfigSource(cwd: string = process.cwd()): string {\n const scriptsDir = resolveFrameworkScriptsDir(cwd);\n const jiti = createJiti(import.meta.url, { interopDefault: true });\n const loader = jiti(\n join(scriptsDir, \"load-framework-theme-defaults.mjs\"),\n ) as {\n loadFrameworkThemeDefaults: (dir: string) => unknown;\n buildThemeScaffoldConfig: (\n defaults: unknown,\n options?: { configType?: string },\n ) => string;\n };\n\n const defaults = loader.loadFrameworkThemeDefaults(scriptsDir);\n return loader.buildThemeScaffoldConfig(defaults, {\n configType: \"IUIThemeConfig\",\n });\n}\n","// ─── Identifier / slug validation ──────────────────────────────────────────\r\n\r\nimport { CLIError } from \"../errors.js\";\r\n\r\nconst SLUG_RE = /^[a-z][a-z0-9-]*$/;\r\nconst JS_IDENTIFIER_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\r\nconst NPM_SCOPE_IMPORT_RE = /^@inventive-ui\\/[a-z0-9][a-z0-9._-]*$/;\r\nconst NPM_COMPONENT_SUBPATH_RE = /^@inventive-ui\\/components\\/[A-Za-z][A-Za-z0-9-]*$/;\r\n\r\nexport function assertComponentSlug(slug: string): void {\r\n if (!SLUG_RE.test(slug)) {\r\n throw new CLIError(\r\n `Invalid component slug: \"${slug}\"`,\r\n \"Use lowercase letters, numbers, and hyphens (e.g. button, input).\",\r\n );\r\n }\r\n}\r\n\r\nexport function assertJsIdentifier(name: string, label: string): void {\r\n if (!JS_IDENTIFIER_RE.test(name)) {\r\n throw new CLIError(`Invalid ${label}: \"${name}\"`);\r\n }\r\n}\r\n\r\nexport function assertImportSpecifier(specifier: string): void {\r\n if (NPM_SCOPE_IMPORT_RE.test(specifier)) return;\r\n if (NPM_COMPONENT_SUBPATH_RE.test(specifier)) return;\r\n if (/^@inventive-ui\\/[a-z0-9][a-z0-9-]*$/.test(specifier)) return;\r\n throw new CLIError(`Unsafe import specifier: \"${specifier}\"`);\r\n}\r\n\r\nexport function escapeTsStringLiteral(value: string): string {\r\n return JSON.stringify(value);\r\n}\r\n\r\n/** Resolve a user-provided slug against manifest keys (case-insensitive). */\r\nexport function resolveManifestKey(\r\n manifest: Record<string, unknown>,\r\n input: string,\r\n): string | null {\r\n const trimmed = input.trim();\r\n if (manifest[trimmed] !== undefined) return trimmed;\r\n const lower = trimmed.toLowerCase();\r\n for (const key of Object.keys(manifest)) {\r\n if (key.toLowerCase() === lower) return key;\r\n }\r\n return null;\r\n}\r\n\r\nexport function sanitizePackageVersionHeader(value: string | null): string | null {\r\n if (!value) return null;\r\n const trimmed = value.trim();\r\n if (!/^[0-9A-Za-z.+~^<>= -]+$/.test(trimmed) || trimmed.length > 64) {\r\n throw new CLIError(\"Server returned an invalid package version header.\");\r\n }\r\n return trimmed;\r\n}\r\n","// ─── Vite config: scaffold once, patch forever ─────────────────────────────\n\nimport ts from \"typescript\";\n\nexport type ViteConfigEnsureAction =\n | \"skipped\"\n | \"scaffolded\"\n | \"patched\"\n | \"merged\"\n | \"noop\"\n | \"failed\";\n\nconst IUI_MANAGED_MARKER = \"@iui-managed\";\nconst FRAMEWORK_VITE_MODULE = \"@inventive-ui/framework/vite\";\n\nconst DEDUPE_PACKAGES = [\"@inventive-ui/framework\", \"react\", \"react-dom\"] as const;\n\nexport const MINIMAL_VITE_SCAFFOLD = `import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport {\n inventiveUiVite,\n IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE,\n} from \"@inventive-ui/framework/vite\";\n\n// @iui-managed — safe to upgrade via iui init/repair\n// inventiveUiVite injects theme + compile-first CSS into <head> (zero-FOUC).\n// Do not import style-map \".generated\" files into the browser — scan them via Framework defaults (src, .iui).\nexport default defineConfig({\n plugins: [...inventiveUiVite({ root: import.meta.dirname }), react()],\n resolve: {\n dedupe: [\"@inventive-ui/framework\", \"react\", \"react-dom\"],\n },\n optimizeDeps: {\n exclude: [...IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE],\n },\n});\n`;\n\n/** Explicit CLI ownership — never infer from inventiveUiVite presence. */\nexport function isIuiManagedViteConfig(content: string): boolean {\n return new RegExp(`//\\\\s*${IUI_MANAGED_MARKER}\\\\b`).test(content);\n}\n\n/** Legacy minimal CLI scaffold (no marker) — eligible for delete on React-only cleanup. */\nexport function isExactMinimalScaffold(content: string): boolean {\n if (isIuiManagedViteConfig(content)) return true;\n const lines = content.split(\"\\n\").filter((line) => line.trim().length > 0);\n if (lines.length > 28) return false;\n if (/mdx|@mdx-js|shiki|manualChunks|alias:/i.test(content)) return false;\n return (\n /from\\s+[\"']@inventive-ui\\/framework\\/vite[\"']/.test(content) &&\n /plugins:\\s*\\[\\.\\.\\.inventiveUiVite/.test(content) &&\n /IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE/.test(content)\n );\n}\n\nfunction hasFrameworkViteImport(sourceFile: ts.SourceFile): boolean {\n let found = false;\n const visit = (node: ts.Node): void => {\n if (\n ts.isImportDeclaration(node) &&\n ts.isStringLiteral(node.moduleSpecifier) &&\n node.moduleSpecifier.text === FRAMEWORK_VITE_MODULE\n ) {\n found = true;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction hasInventiveUiViteCall(sourceFile: ts.SourceFile): boolean {\n let found = false;\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"inventiveUiVite\"\n ) {\n found = true;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction getCalleeName(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr)) return expr.text;\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) {\n return expr.name.text;\n }\n return undefined;\n}\n\nfunction getDefaultExportExpression(sourceFile: ts.SourceFile): ts.Expression | undefined {\n for (const stmt of sourceFile.statements) {\n if (ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n return stmt.expression;\n }\n }\n return undefined;\n}\n\nfunction getConfigObjectLiteral(expr: ts.Expression): ts.ObjectLiteralExpression | undefined {\n let current = expr;\n if (ts.isCallExpression(current) && getCalleeName(current.expression) === \"defineConfig\") {\n current = current.arguments[0] ?? current;\n }\n\n if (ts.isObjectLiteralExpression(current)) return current;\n\n if (ts.isArrowFunction(current) || ts.isFunctionExpression(current)) {\n const body = current.body;\n if (ts.isObjectLiteralExpression(body)) return body;\n if (ts.isBlock(body)) {\n for (const stmt of body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(stmt.expression)\n ) {\n return stmt.expression;\n }\n }\n }\n }\n\n return undefined;\n}\n\nfunction findProperty(\n obj: ts.ObjectLiteralExpression,\n name: string,\n): ts.PropertyAssignment | undefined {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (ts.isIdentifier(prop.name) && prop.name.text === name) return prop;\n if (ts.isStringLiteral(prop.name) && prop.name.text === name) return prop;\n }\n return undefined;\n}\n\nfunction createImportMetaDirname(): ts.Expression {\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createMetaProperty(\n ts.SyntaxKind.ImportKeyword,\n ts.factory.createIdentifier(\"meta\"),\n ),\n \"dirname\",\n );\n}\n\nfunction createInventiveUiViteSpread(): ts.Expression {\n return ts.factory.createSpreadElement(\n ts.factory.createCallExpression(ts.factory.createIdentifier(\"inventiveUiVite\"), undefined, [\n ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment(\"root\", createImportMetaDirname()),\n ]),\n ]),\n );\n}\n\nfunction createIuiExcludeSpread(): ts.Expression {\n return ts.factory.createSpreadElement(ts.factory.createIdentifier(\"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\"));\n}\n\nfunction arrayHasInventiveUiVite(arr: ts.ArrayLiteralExpression): boolean {\n return arr.elements.some(\n (el) =>\n ts.isSpreadElement(el) &&\n ts.isCallExpression(el.expression) &&\n ts.isIdentifier(el.expression.expression) &&\n el.expression.expression.text === \"inventiveUiVite\",\n );\n}\n\nfunction arrayHasIuiExcludeSpread(arr: ts.ArrayLiteralExpression): boolean {\n return arr.elements.some(\n (el) =>\n ts.isSpreadElement(el) &&\n ts.isIdentifier(el.expression) &&\n el.expression.text === \"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\",\n );\n}\n\nfunction arrayHasStringLiteral(arr: ts.ArrayLiteralExpression, value: string): boolean {\n return arr.elements.some(\n (el) => ts.isStringLiteral(el) && el.text === value,\n );\n}\n\nfunction findLeadingArrayLiteral(expr: ts.Expression): ts.ArrayLiteralExpression | undefined {\n if (ts.isArrayLiteralExpression(expr)) return expr;\n if (ts.isParenthesizedExpression(expr)) return findLeadingArrayLiteral(expr.expression);\n if (ts.isCallExpression(expr) && ts.isPropertyAccessExpression(expr.expression)) {\n return findLeadingArrayLiteral(expr.expression.expression);\n }\n return undefined;\n}\n\nfunction replaceLeadingArrayLiteral(\n expr: ts.Expression,\n replacement: ts.ArrayLiteralExpression,\n): { expression: ts.Expression; changed: boolean } {\n if (ts.isArrayLiteralExpression(expr)) {\n return { expression: replacement, changed: true };\n }\n if (ts.isParenthesizedExpression(expr)) {\n const inner = replaceLeadingArrayLiteral(expr.expression, replacement);\n if (!inner.changed) return { expression: expr, changed: false };\n return {\n expression: ts.factory.updateParenthesizedExpression(expr, inner.expression),\n changed: true,\n };\n }\n if (ts.isCallExpression(expr) && ts.isPropertyAccessExpression(expr.expression)) {\n const inner = replaceLeadingArrayLiteral(expr.expression.expression, replacement);\n if (!inner.changed) return { expression: expr, changed: false };\n const updatedAccess = ts.factory.updatePropertyAccessExpression(\n expr.expression,\n inner.expression,\n expr.expression.name,\n );\n return {\n expression: ts.factory.updateCallExpression(\n expr,\n updatedAccess,\n expr.typeArguments,\n expr.arguments,\n ),\n changed: true,\n };\n }\n return { expression: expr, changed: false };\n}\n\nfunction ensureFrameworkViteImport(sourceFile: ts.SourceFile): ts.SourceFile {\n if (hasFrameworkViteImport(sourceFile)) return sourceFile;\n\n const importDecl = ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports([\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(\"inventiveUiVite\"),\n ),\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(\"IUI_ASSET_OPTIMIZE_DEPS_EXCLUDE\"),\n ),\n ]),\n ),\n ts.factory.createStringLiteral(FRAMEWORK_VITE_MODULE),\n );\n\n let insertIndex = 0;\n for (const stmt of sourceFile.statements) {\n if (ts.isImportDeclaration(stmt)) insertIndex++;\n else break;\n }\n\n return ts.factory.updateSourceFile(sourceFile, [\n ...sourceFile.statements.slice(0, insertIndex),\n importDecl,\n ...sourceFile.statements.slice(insertIndex),\n ]);\n}\n\nfunction ensurePluginsOnConfig(\n config: ts.ObjectLiteralExpression,\n pluginOnly: boolean,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n if (pluginOnly) return { config, changed: false };\n\n const pluginsProp = findProperty(config, \"plugins\");\n const iuiSpread = createInventiveUiViteSpread();\n\n if (!pluginsProp) {\n const newProp = ts.factory.createPropertyAssignment(\n \"plugins\",\n ts.factory.createArrayLiteralExpression([iuiSpread]),\n );\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [newProp, ...config.properties]),\n changed: true,\n };\n }\n\n if (!ts.isArrayLiteralExpression(pluginsProp.initializer)) {\n const pluginsArray = findLeadingArrayLiteral(pluginsProp.initializer);\n if (!pluginsArray) {\n return { config, changed: false };\n }\n if (arrayHasInventiveUiVite(pluginsArray)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(pluginsArray, [\n iuiSpread,\n ...pluginsArray.elements,\n ]);\n const replaced = replaceLeadingArrayLiteral(pluginsProp.initializer, newArr);\n if (!replaced.changed) {\n return { config, changed: false };\n }\n const newPluginsProp = ts.factory.updatePropertyAssignment(\n pluginsProp,\n pluginsProp.name,\n replaced.expression,\n );\n const newProps = config.properties.map((p) => (p === pluginsProp ? newPluginsProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newProps),\n changed: true,\n };\n }\n\n const arr = pluginsProp.initializer;\n if (arrayHasInventiveUiVite(arr)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(arr, [iuiSpread, ...arr.elements]);\n const newPluginsProp = ts.factory.updatePropertyAssignment(\n pluginsProp,\n pluginsProp.name,\n newArr,\n );\n const newProps = config.properties.map((p) => (p === pluginsProp ? newPluginsProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newProps),\n changed: true,\n };\n}\n\nfunction ensureDedupeOnConfig(\n config: ts.ObjectLiteralExpression,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n const resolveProp = findProperty(config, \"resolve\");\n let changed = false;\n\n if (!resolveProp || !ts.isObjectLiteralExpression(resolveProp.initializer)) {\n const dedupeProp = ts.factory.createPropertyAssignment(\n \"dedupe\",\n ts.factory.createArrayLiteralExpression(\n DEDUPE_PACKAGES.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ),\n );\n const resolveObj = ts.factory.createObjectLiteralExpression([dedupeProp]);\n if (resolveProp) {\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n resolveObj,\n );\n const newProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return { config: ts.factory.updateObjectLiteralExpression(config, newProps), changed: true };\n }\n const newResolve = ts.factory.createPropertyAssignment(\"resolve\", resolveObj);\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [...config.properties, newResolve]),\n changed: true,\n };\n }\n\n const resolveObj = resolveProp.initializer;\n const dedupeProp = findProperty(resolveObj, \"dedupe\");\n const required = [...DEDUPE_PACKAGES];\n\n if (!dedupeProp || !ts.isArrayLiteralExpression(dedupeProp.initializer)) {\n const newDedupe = ts.factory.createPropertyAssignment(\n \"dedupe\",\n ts.factory.createArrayLiteralExpression(\n required.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ),\n );\n const newResolveProps = dedupeProp\n ? resolveObj.properties.map((p) => (p === dedupeProp ? newDedupe : p))\n : [...resolveObj.properties, newDedupe];\n const newResolveObj = ts.factory.updateObjectLiteralExpression(resolveObj, newResolveProps);\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n newResolveObj,\n );\n const newConfigProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n }\n\n const arr = dedupeProp.initializer;\n const missing = required.filter((pkg) => !arrayHasStringLiteral(arr, pkg));\n if (missing.length === 0) return { config, changed: false };\n\n const newArr = ts.factory.updateArrayLiteralExpression(arr, [\n ...arr.elements,\n ...missing.map((pkg) => ts.factory.createStringLiteral(pkg)),\n ]);\n changed = true;\n const newDedupeProp = ts.factory.updatePropertyAssignment(\n dedupeProp,\n dedupeProp.name,\n newArr,\n );\n const newResolveProps = resolveObj.properties.map((p) => (p === dedupeProp ? newDedupeProp : p));\n const newResolveObj = ts.factory.updateObjectLiteralExpression(resolveObj, newResolveProps);\n const newResolveProp = ts.factory.updatePropertyAssignment(\n resolveProp,\n resolveProp.name,\n newResolveObj,\n );\n const newConfigProps = config.properties.map((p) => (p === resolveProp ? newResolveProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed,\n };\n}\n\nfunction ensureOptimizeDepsExcludeOnConfig(\n config: ts.ObjectLiteralExpression,\n): { config: ts.ObjectLiteralExpression; changed: boolean } {\n const optimizeProp = findProperty(config, \"optimizeDeps\");\n const excludeSpread = createIuiExcludeSpread();\n\n if (!optimizeProp || !ts.isObjectLiteralExpression(optimizeProp.initializer)) {\n const excludeProp = ts.factory.createPropertyAssignment(\n \"exclude\",\n ts.factory.createArrayLiteralExpression([excludeSpread]),\n );\n const optimizeObj = ts.factory.createObjectLiteralExpression([excludeProp]);\n if (optimizeProp) {\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n optimizeObj,\n );\n const newProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return { config: ts.factory.updateObjectLiteralExpression(config, newProps), changed: true };\n }\n const newOptimize = ts.factory.createPropertyAssignment(\"optimizeDeps\", optimizeObj);\n return {\n config: ts.factory.updateObjectLiteralExpression(config, [...config.properties, newOptimize]),\n changed: true,\n };\n }\n\n const optimizeObj = optimizeProp.initializer;\n const excludeProp = findProperty(optimizeObj, \"exclude\");\n\n if (!excludeProp || !ts.isArrayLiteralExpression(excludeProp.initializer)) {\n const newExclude = ts.factory.createPropertyAssignment(\n \"exclude\",\n ts.factory.createArrayLiteralExpression([excludeSpread]),\n );\n const newOptimizeProps = excludeProp\n ? optimizeObj.properties.map((p) => (p === excludeProp ? newExclude : p))\n : [...optimizeObj.properties, newExclude];\n const newOptimizeObj = ts.factory.updateObjectLiteralExpression(optimizeObj, newOptimizeProps);\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n newOptimizeObj,\n );\n const newConfigProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n }\n\n if (arrayHasIuiExcludeSpread(excludeProp.initializer)) {\n return { config, changed: false };\n }\n\n const newArr = ts.factory.updateArrayLiteralExpression(excludeProp.initializer, [\n ...excludeProp.initializer.elements,\n excludeSpread,\n ]);\n const newExcludeProp = ts.factory.updatePropertyAssignment(\n excludeProp,\n excludeProp.name,\n newArr,\n );\n const newOptimizeProps = optimizeObj.properties.map((p) => (p === excludeProp ? newExcludeProp : p));\n const newOptimizeObj = ts.factory.updateObjectLiteralExpression(optimizeObj, newOptimizeProps);\n const newOptimizeProp = ts.factory.updatePropertyAssignment(\n optimizeProp,\n optimizeProp.name,\n newOptimizeObj,\n );\n const newConfigProps = config.properties.map((p) => (p === optimizeProp ? newOptimizeProp : p));\n return {\n config: ts.factory.updateObjectLiteralExpression(config, newConfigProps),\n changed: true,\n };\n}\n\nfunction replaceConfigObjectInTree(\n root: ts.Node,\n oldConfig: ts.ObjectLiteralExpression,\n newConfig: ts.ObjectLiteralExpression,\n): ts.Node {\n const transformer: ts.TransformerFactory<ts.Node> = (context) => {\n const visit: ts.Visitor = (node) => {\n if (node === oldConfig) return newConfig;\n return ts.visitEachChild(node, visit, context);\n };\n return (node) => ts.visitNode(node, visit) as ts.Node;\n };\n\n const result = ts.transform(root, [transformer]);\n const updated = result.transformed[0] ?? root;\n result.dispose();\n return updated;\n}\n\nfunction printSourceFile(sourceFile: ts.SourceFile): string {\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n return `${printer.printNode(ts.EmitHint.Unspecified, sourceFile, sourceFile)}\\n`;\n}\n\nexport function patchViteConfigContent(source: string): { content: string; changed: boolean } | { failed: true } {\n const sourceFile = ts.createSourceFile(\n \"vite.config.ts\",\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const exportExpr = getDefaultExportExpression(sourceFile);\n if (!exportExpr) return { failed: true };\n\n if (!getConfigObjectLiteral(exportExpr)) return { failed: true };\n\n const pluginOnly = hasInventiveUiViteCall(sourceFile);\n let changed = false;\n\n let nextSource = sourceFile;\n if (!hasFrameworkViteImport(sourceFile)) {\n nextSource = ensureFrameworkViteImport(sourceFile);\n changed = true;\n }\n\n const exportExprAfter = getDefaultExportExpression(nextSource);\n if (!exportExprAfter) return { failed: true };\n\n let configObject = getConfigObjectLiteral(exportExprAfter);\n if (!configObject) return { failed: true };\n let config = configObject;\n const pluginsResult = ensurePluginsOnConfig(config, pluginOnly);\n config = pluginsResult.config;\n changed = changed || pluginsResult.changed;\n\n const dedupeResult = ensureDedupeOnConfig(config);\n config = dedupeResult.config;\n changed = changed || dedupeResult.changed;\n\n const excludeResult = ensureOptimizeDepsExcludeOnConfig(config);\n config = excludeResult.config;\n changed = changed || excludeResult.changed;\n\n if (!changed) return { content: source, changed: false };\n\n const updatedExport = replaceConfigObjectInTree(exportExprAfter, configObject, config);\n const updatedStatements = nextSource.statements.map((stmt) => {\n if (ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n return ts.factory.updateExportAssignment(stmt, stmt.modifiers, updatedExport as ts.Expression);\n }\n return stmt;\n });\n\n return {\n content: printSourceFile(ts.factory.updateSourceFile(nextSource, updatedStatements)),\n changed: true,\n };\n}\n","// ─── iui.config.ts: scaffold once, patch forever ───────────────────────────\n\nconst BUILD_BLOCK = ` /**\n * Compile-first CSS — scanned at build time by the Vite/Webpack/Next plugin.\n * Do not import style-map \".generated\" files into the browser graph.\n * scanDirs / scanPackages default in Framework — override only when needed.\n * See Framework docs/01-compile-first-guide.md for all build options.\n */\n build: {\n safelist: [],\n packageSafelist: false,\n includeShadeMatrix: false,\n includeThemePresets: true,\n includeThemeGrayScale: true,\n resolvePalettePatterns: true,\n includeArbitraryScan: true,\n writeFiles: false,\n minify: true,\n useAst: true,\n },\n`;\n\nconst BUILD_DEFAULT_ENTRIES: ReadonlyArray<[string, string]> = [\n [\"safelist\", \"[]\"],\n [\"packageSafelist\", \"false\"],\n [\"includeShadeMatrix\", \"false\"],\n [\"includeThemePresets\", \"true\"],\n [\"includeThemeGrayScale\", \"true\"],\n [\"resolvePalettePatterns\", \"true\"],\n [\"includeArbitraryScan\", \"true\"],\n [\"writeFiles\", \"false\"],\n [\"minify\", \"true\"],\n [\"useAst\", \"true\"],\n];\n\nexport function patchProjectConfigBuildBlock(content: string): { content: string; changed: boolean } {\n if (!/\\bbuild\\s*:\\s*\\{/.test(content)) {\n const updated = content.replace(\n /(\\n)(};)\\s*\\n(\\s*export default config;)/,\n `$1${BUILD_BLOCK}$1$2\\n$3`,\n );\n if (updated === content) return { content, changed: false };\n return { content: updated, changed: true };\n }\n\n let next = content;\n let changed = false;\n\n if (!/\\bbuild\\s*:\\s*\\{/.test(next)) {\n return { content, changed: false };\n }\n\n for (const [key, value] of BUILD_DEFAULT_ENTRIES) {\n if (new RegExp(`\\\\b${key}\\\\s*:`).test(next)) continue;\n const replaced = next.replace(/(\\bbuild\\s*:\\s*\\{\\n)/, `$1 ${key}: ${value},\\n`);\n if (replaced !== next) {\n next = replaced;\n changed = true;\n }\n }\n\n return { content: next, changed };\n}\n","// ─── component.config.ts: scaffold once, merge new registry entries ────────\n\nimport ts from \"typescript\";\nimport type { ComponentPackageManifest, RegistryItem } from \"../../types.js\";\nimport { resolveComponentExport } from \"../componentExports.js\";\nimport { assertJsIdentifier } from \"../security/identifiers.js\";\n\nfunction findComponentConfigObject(\n sourceFile: ts.SourceFile,\n): ts.ObjectLiteralExpression | undefined {\n let found: ts.ObjectLiteralExpression | undefined;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (ts.isVariableStatement(node)) {\n for (const decl of node.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.name.text === \"componentConfig\" &&\n decl.initializer &&\n ts.isObjectLiteralExpression(decl.initializer)\n ) {\n found = decl.initializer;\n return;\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction findComponentConfigMapType(\n sourceFile: ts.SourceFile,\n): ts.TypeLiteralNode | undefined {\n let found: ts.TypeLiteralNode | undefined;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (\n ts.isTypeAliasDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === \"ComponentConfigMap\" &&\n node.type &&\n ts.isTypeLiteralNode(node.type)\n ) {\n found = node.type;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\n\nfunction existingComponentKeys(obj: ts.ObjectLiteralExpression): Set<string> {\n const keys = new Set<string>();\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (ts.isIdentifier(prop.name)) keys.add(prop.name.text);\n else if (ts.isStringLiteral(prop.name)) keys.add(prop.name.text);\n }\n return keys;\n}\n\nfunction formatDefaultConfig(cfg: Record<string, unknown>): string {\n return JSON.stringify(cfg, null, 6)\n .split(\"\\n\")\n .map((line, i) => (i === 0 ? line : ` ${line}`))\n .join(\"\\n\");\n}\n\nfunction buildComponentEntry(item: RegistryItem): string {\n assertJsIdentifier(item.dirName, \"component dirName\");\n const cfg = (item.meta?.defaultConfig as Record<string, unknown>) ?? {};\n const cfgStr = formatDefaultConfig(cfg);\n return ` ${item.dirName}: {\\n default: ${cfgStr},\\n },\\n\\n`;\n}\n\nfunction buildTypeEntry(item: RegistryItem, cwd: string): string {\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName) {\n return ` ${item.dirName}: { default: Partial<${resolved.propsName}> };`;\n }\n return ` ${item.dirName}: { default: Record<string, unknown> };`;\n}\n\nfunction buildTypeImport(item: RegistryItem, cwd: string): string | null {\n const resolved = resolveComponentExport(item, cwd);\n if (resolved.ok && resolved.propsName && resolved.importSpecifier) {\n return `import type { ${resolved.propsName} } from \"${resolved.importSpecifier}\";`;\n }\n return null;\n}\n\nfunction insertBeforeClosingBrace(source: string, objectEnd: number, insertion: string): string {\n let pos = objectEnd - 1;\n while (pos >= 0 && /\\s/.test(source[pos] ?? \"\")) pos--;\n if (source[pos] === \"}\") {\n const prev = source[pos - 1] ?? \"\";\n const needsComma = prev !== \",\" && prev !== \"{\" && prev !== \"\\n\";\n const prefix = needsComma ? \",\\n\" : \"\\n\";\n return `${source.slice(0, pos)}${prefix}${insertion}${source.slice(pos)}`;\n }\n return source;\n}\n\nexport function mergeComponentConfigContent(\n source: string,\n manifest: ComponentPackageManifest | null,\n cwd: string,\n): { content: string; changed: boolean } {\n if (!manifest || manifest.items.length === 0) {\n return { content: source, changed: false };\n }\n\n const sourceFile = ts.createSourceFile(\n \"component.config.ts\",\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const configObject = findComponentConfigObject(sourceFile);\n if (!configObject) return { content: source, changed: false };\n\n const existing = existingComponentKeys(configObject);\n const missing = manifest.items.filter((item) => !existing.has(item.dirName));\n if (missing.length === 0) return { content: source, changed: false };\n\n let next = source;\n const newEntries = missing.map((item) => buildComponentEntry(item)).join(\"\");\n next = insertBeforeClosingBrace(next, configObject.getEnd(), newEntries);\n\n const typeLiteral = findComponentConfigMapType(\n ts.createSourceFile(\"component.config.ts\", next, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS),\n );\n if (typeLiteral) {\n const typeLines = `${missing.map((item) => buildTypeEntry(item, cwd)).join(\"\\n\")}\\n`;\n next = insertBeforeClosingBrace(next, typeLiteral.getEnd(), typeLines);\n }\n\n const existingImportLines = new Set(next.match(/^import\\s.+;$/gm) ?? []);\n const newImports = missing\n .map((item) => buildTypeImport(item, cwd))\n .filter((line): line is string => line !== null && !existingImportLines.has(line));\n\n if (newImports.length > 0) {\n const importMatches = [...next.matchAll(/^import\\s.+;$/gm)];\n const lastImport = importMatches.at(-1);\n if (lastImport?.index !== undefined) {\n const insertAt = lastImport.index + lastImport[0].length;\n next = `${next.slice(0, insertAt)}\\n${[...new Set(newImports)].join(\"\\n\")}${next.slice(insertAt)}`;\n } else {\n next = `${[...new Set(newImports)].join(\"\\n\")}\\n\\n${next}`;\n }\n }\n\n return { content: next, changed: true };\n}\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport type { RegistryItem } from \"../types.js\";\nimport { assertImportSpecifier } from \"./security/identifiers.js\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\ninterface ParsedExports {\n valueExports: Set<string>;\n typeExports: Set<string>;\n}\n\nexport interface ComponentExportResolution {\n ok: boolean;\n importSpecifier?: string;\n /** When the subpath types omit default/named runtime exports, lazy-load from here instead. */\n lazyImportSpecifier?: string;\n componentName?: string;\n propsName?: string;\n /** Suffix after dynamic import(), e.g. \".Switch\" or \".Input.Text\". */\n lazyAccess?: string;\n reason?: string;\n}\n\ninterface ComponentsPackageInfo {\n packageRoot: string;\n exportsField: Record<string, unknown>;\n rootTypesPath: string | null;\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nexport function toPascalCase(value: string): string {\n return value\n .replace(/(^|[-_\\s]+)([a-zA-Z0-9])/g, (_m, _p, c: string) => c.toUpperCase())\n .replace(/[^a-zA-Z0-9]/g, \"\");\n}\n\nfunction readComponentsPackageInfo(cwd: string): ComponentsPackageInfo | null {\n const packageRoot = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!packageRoot) return null;\n const pkgPath = path.join(packageRoot, \"package.json\");\n if (!fs.existsSync(pkgPath)) return null;\n\n try {\n const pkg = fs.readJsonSync(pkgPath) as Record<string, unknown>;\n const exportsField = toRecord(pkg.exports) ?? {};\n\n const rootExport = toRecord(exportsField[\".\"]);\n const rootTypes =\n resolveTypesPathFromExportEntry(rootExport) ??\n (typeof pkg.types === \"string\" ? pkg.types : null);\n\n return {\n packageRoot,\n exportsField,\n rootTypesPath: rootTypes ? path.join(packageRoot, rootTypes) : null,\n };\n } catch {\n return null;\n }\n}\n\nfunction resolveTypesPathFromExportEntry(entry: unknown): string | null {\n if (!entry) return null;\n if (typeof entry === \"string\") return null;\n\n const obj = toRecord(entry);\n if (!obj) return null;\n\n if (typeof obj.types === \"string\") return obj.types;\n\n for (const key of [\"import\", \"require\", \"default\", \"node\", \"browser\"]) {\n const nested = toRecord(obj[key]);\n if (!nested) continue;\n if (typeof nested.types === \"string\") return nested.types;\n }\n\n return null;\n}\n\nfunction parseNamedExportClause(clause: string, parsed: ParsedExports): void {\n const parts = clause\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean);\n\n for (const rawPart of parts) {\n let part = rawPart;\n let isTypeOnly = false;\n if (part.startsWith(\"type \")) {\n isTypeOnly = true;\n part = part.slice(\"type \".length).trim();\n }\n\n const asMatch = part.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s+as\\s+([A-Za-z_][A-Za-z0-9_]*)$/);\n const symbol = asMatch ? asMatch[2] : part;\n if (!symbol) continue;\n\n if (isTypeOnly) parsed.typeExports.add(symbol);\n else parsed.valueExports.add(symbol);\n }\n}\n\nfunction mergeParsedExports(target: ParsedExports, source: ParsedExports): void {\n for (const sym of source.valueExports) target.valueExports.add(sym);\n for (const sym of source.typeExports) target.typeExports.add(sym);\n}\n\nfunction resolveRelativeTypesPath(fromFile: string, rel: string): string | null {\n const base = path.dirname(fromFile);\n const noExt = path.join(base, rel);\n const candidates = [`${noExt}.d.ts`, path.join(noExt, \"index.d.ts\")];\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\nfunction parseTypeExports(typesFilePath: string, visited = new Set<string>()): ParsedExports {\n const parsed: ParsedExports = {\n valueExports: new Set<string>(),\n typeExports: new Set<string>(),\n };\n\n const abs = path.resolve(typesFilePath);\n if (visited.has(abs)) return parsed;\n visited.add(abs);\n\n if (!fs.existsSync(abs)) return parsed;\n\n let text = \"\";\n try {\n text = fs.readFileSync(abs, \"utf-8\");\n } catch {\n return parsed;\n }\n\n applyTypeExportPatterns(text, parsed);\n\n const reexportFrom = text.matchAll(\n /export\\s+(?:type\\s+)?(?:\\{[^}]*\\}|\\*)\\s+from\\s+[\"'](\\.[^\"']+)[\"']/g,\n );\n for (const m of reexportFrom) {\n const refPath = resolveRelativeTypesPath(abs, m[1]);\n if (refPath) mergeParsedExports(parsed, parseTypeExports(refPath, visited));\n }\n\n return parsed;\n}\n\nfunction parseTypeExportsLocal(typesFilePath: string): ParsedExports {\n const parsed: ParsedExports = {\n valueExports: new Set<string>(),\n typeExports: new Set<string>(),\n };\n\n const abs = path.resolve(typesFilePath);\n if (!fs.existsSync(abs)) return parsed;\n\n let text = \"\";\n try {\n text = fs.readFileSync(abs, \"utf-8\");\n } catch {\n return parsed;\n }\n\n applyTypeExportPatterns(text, parsed);\n return parsed;\n}\n\nfunction applyTypeExportPatterns(text: string, parsed: ParsedExports): void {\n const valueDecl = /export\\s+(?:declare\\s+)?(?:const|let|var|function|class)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n const typeDecl = /export\\s+(?:declare\\s+)?(?:type|interface)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n const namedClause = /export\\s+(?!type\\s*\\{)\\{([^}]+)\\}/g;\n const typeNamedClause = /export\\s+type\\s*\\{([^}]+)\\}/g;\n\n for (const m of text.matchAll(valueDecl)) {\n parsed.valueExports.add(m[1]);\n }\n for (const m of text.matchAll(typeDecl)) {\n parsed.typeExports.add(m[1]);\n }\n for (const m of text.matchAll(namedClause)) {\n parseNamedExportClause(m[1], parsed);\n }\n for (const m of text.matchAll(typeNamedClause)) {\n parseNamedExportClause(m[1], parsed);\n }\n}\n\nfunction pickComponentName(item: RegistryItem, parsed: ParsedExports): string | null {\n const expected = [toPascalCase(item.dirName), toPascalCase(item.name)];\n for (const name of expected) {\n if (parsed.valueExports.has(name)) return name;\n }\n\n const lowered = new Set(expected.map((n) => n.toLowerCase()));\n for (const exp of parsed.valueExports) {\n if (lowered.has(exp.toLowerCase())) return exp;\n }\n\n return null;\n}\n\nfunction pickPropsName(componentName: string, parsed: ParsedExports): string | null {\n const direct = `${componentName}Props`;\n if (parsed.typeExports.has(direct) || parsed.valueExports.has(direct)) return direct;\n\n for (const sym of parsed.typeExports) {\n if (sym.toLowerCase() === direct.toLowerCase()) return sym;\n }\n for (const sym of parsed.valueExports) {\n if (sym.toLowerCase() === direct.toLowerCase()) return sym;\n }\n\n return null;\n}\n\nfunction pickDefaultExportComponent(item: RegistryItem, typesIndexPath: string): string | null {\n const expected = [toPascalCase(item.dirName), toPascalCase(item.name)];\n for (const name of expected) {\n const mainTypesPath = findMainComponentTypesPath(typesIndexPath, name);\n if (!mainTypesPath) continue;\n const mainText = readTypesFileText(mainTypesPath);\n const defaultExportMatch = mainText.match(/export\\s+default\\s+([A-Za-z_][A-Za-z0-9_]*)/);\n if (!defaultExportMatch) continue;\n const symbol = defaultExportMatch[1];\n if (expected.some((candidate) => candidate.toLowerCase() === symbol.toLowerCase())) {\n return symbol;\n }\n }\n return null;\n}\n\nfunction readTypesFileText(typesFilePath: string): string {\n try {\n return fs.readFileSync(typesFilePath, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\nfunction findMainComponentTypesPath(typesIndexPath: string, componentName: string): string | null {\n const dir = path.dirname(typesIndexPath);\n const indexText = readTypesFileText(typesIndexPath);\n\n const fromMatches = indexText.matchAll(/from\\s+[\"']\\.\\/([^\"']+)[\"']/g);\n for (const match of fromMatches) {\n const candidate = path.join(dir, `${match[1]}.d.ts`);\n if (fs.existsSync(candidate)) return candidate;\n }\n\n const byName = path.join(dir, `${componentName}.d.ts`);\n return fs.existsSync(byName) ? byName : null;\n}\n\nfunction isNonCallableCompoundExport(typesText: string, symbolName: string): boolean {\n const objectDecl = new RegExp(\n `(?:declare\\\\s+const|const)\\\\s+${symbolName}\\\\s*:\\\\s*\\\\{`,\n );\n return objectDecl.test(typesText);\n}\n\nfunction pickCompoundRenderMember(typesText: string): string {\n if (/\\bText\\s*:\\s*React\\./.test(typesText)) return \"Text\";\n const memberMatch = typesText.match(\n /^\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*React\\.(?:ForwardRefExoticComponent|NamedExoticComponent|FC)/m,\n );\n return memberMatch?.[1] ?? \"Text\";\n}\n\nfunction resolveLazyAccess(\n typesIndexPath: string,\n componentName: string,\n): string {\n const indexText = readTypesFileText(typesIndexPath);\n const mainTypesPath = findMainComponentTypesPath(typesIndexPath, componentName);\n const mainText = mainTypesPath ? readTypesFileText(mainTypesPath) : \"\";\n\n const defaultAsMatch = indexText.match(\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\bdefault\\\\s+as\\\\s+${componentName}\\\\b[^}]*\\\\}`),\n );\n const namedExportMatch = indexText.match(\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\b${componentName}\\\\b[^}]*\\\\}`),\n );\n\n const defaultExportMatch = mainText.match(/export\\s+default\\s+([A-Za-z_][A-Za-z0-9_]*)/);\n const defaultSymbol = defaultExportMatch?.[1];\n\n const compoundSymbol =\n defaultSymbol && isNonCallableCompoundExport(mainText, defaultSymbol)\n ? defaultSymbol\n : isNonCallableCompoundExport(mainText, componentName)\n ? componentName\n : null;\n\n if (compoundSymbol) {\n const member = pickCompoundRenderMember(mainText);\n if (defaultAsMatch || namedExportMatch) {\n return `.${componentName}.${member}`;\n }\n return `.default.${member}`;\n }\n\n if (defaultAsMatch || namedExportMatch) return `.${componentName}`;\n\n if (defaultSymbol && defaultSymbol === componentName) {\n return `.default`;\n }\n\n return `.${componentName}`;\n}\n\nfunction subpathExposesLazyBinding(typesIndexPath: string, componentName: string): boolean {\n const indexText = readTypesFileText(typesIndexPath);\n if (\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\bdefault\\\\s+as\\\\s+${componentName}\\\\b[^}]*\\\\}`).test(\n indexText,\n )\n ) {\n return true;\n }\n if (new RegExp(`export\\\\s*\\\\{[^}]*\\\\b${componentName}\\\\b[^}]*\\\\}`).test(indexText)) {\n return true;\n }\n if (/export\\s+default\\b/.test(indexText)) return true;\n return pickComponentName(\n { name: componentName, dirName: componentName } as RegistryItem,\n parseTypeExportsLocal(typesIndexPath),\n ) !== null;\n}\n\nfunction resolveLazyImport(\n pkgInfo: ComponentsPackageInfo,\n importSpecifier: string,\n typesFilePath: string,\n componentName: string,\n): Pick<ComponentExportResolution, \"lazyImportSpecifier\" | \"lazyAccess\"> {\n let lazyImportSpecifier = importSpecifier;\n let lazyAccess = resolveLazyAccess(typesFilePath, componentName);\n\n if (\n importSpecifier !== \"@inventive-ui/components\" &&\n !subpathExposesLazyBinding(typesFilePath, componentName) &&\n pkgInfo.rootTypesPath\n ) {\n lazyImportSpecifier = \"@inventive-ui/components\";\n lazyAccess = `.${componentName}`;\n }\n\n return { lazyImportSpecifier, lazyAccess };\n}\n\nfunction describeExpected(item: RegistryItem): string {\n return `${toPascalCase(item.dirName)} / ${toPascalCase(item.name)}`;\n}\n\nfunction resolveFromTypesFile(\n item: RegistryItem,\n importSpecifier: string,\n typesFilePath: string,\n pkgInfo: ComponentsPackageInfo,\n): ComponentExportResolution {\n const parsed = parseTypeExports(typesFilePath);\n const indexParsed = parseTypeExportsLocal(typesFilePath);\n const componentName =\n pickComponentName(item, parsed) ?? pickDefaultExportComponent(item, typesFilePath);\n if (!componentName) {\n return {\n ok: false,\n reason: `No matching component export in ${importSpecifier}. Expected ${describeExpected(item)}.`,\n };\n }\n\n const propsName =\n pickPropsName(componentName, indexParsed) ??\n pickPropsName(componentName, parsed) ??\n (() => {\n const typesPath = path.join(path.dirname(typesFilePath), \"types.d.ts\");\n if (!fs.existsSync(typesPath)) return null;\n return pickPropsName(componentName, parseTypeExports(typesPath));\n })();\n\n const lazyImport = resolveLazyImport(\n pkgInfo,\n importSpecifier,\n typesFilePath,\n componentName,\n );\n\n return {\n ok: true,\n importSpecifier,\n lazyImportSpecifier: lazyImport.lazyImportSpecifier,\n componentName,\n propsName: propsName ?? undefined,\n lazyAccess: lazyImport.lazyAccess,\n };\n}\n\nfunction exportCandidatesForItem(item: RegistryItem): string[] {\n const candidates = [\n `./${item.name}`,\n `./${item.name.toLowerCase()}`,\n `./${item.dirName}`,\n `./${item.dirName.toLowerCase()}`,\n ];\n\n return [...new Set(candidates)];\n}\n\nfunction componentFolderCandidates(item: RegistryItem): string[] {\n return [\n ...new Set([\n item.dirName,\n item.name,\n toPascalCase(item.dirName),\n toPascalCase(item.name),\n ]),\n ];\n}\n\nfunction resolveWildcardTypesPath(\n pkgInfo: ComponentsPackageInfo,\n segment: string,\n): string | null {\n const wildcardEntry = pkgInfo.exportsField[\"./*\"];\n if (!wildcardEntry) return null;\n\n const typesRel = resolveTypesPathFromExportEntry(wildcardEntry);\n if (!typesRel || !typesRel.includes(\"*\")) return null;\n\n const resolvedRel = typesRel.replace(/\\*/g, segment);\n const fullPath = path.join(pkgInfo.packageRoot, resolvedRel);\n return fs.existsSync(fullPath) ? fullPath : null;\n}\n\nfunction resolveTypesPathForExportCandidate(\n pkgInfo: ComponentsPackageInfo,\n candidate: string,\n): string | null {\n const entry = pkgInfo.exportsField[candidate];\n if (entry) {\n const typesRel = resolveTypesPathFromExportEntry(entry);\n return typesRel ? path.join(pkgInfo.packageRoot, typesRel) : null;\n }\n\n const segment = candidate.replace(/^\\.\\//, \"\");\n return resolveWildcardTypesPath(pkgInfo, segment);\n}\n\nfunction resolveFromComponentFolders(\n item: RegistryItem,\n pkgInfo: ComponentsPackageInfo,\n): ComponentExportResolution | null {\n for (const folder of componentFolderCandidates(item)) {\n const typesPath =\n resolveWildcardTypesPath(pkgInfo, folder) ??\n (() => {\n const directPath = path.join(\n pkgInfo.packageRoot,\n \"dist\",\n \"components\",\n folder,\n \"index.d.ts\",\n );\n return fs.existsSync(directPath) ? directPath : null;\n })();\n\n if (!typesPath) continue;\n\n const importSpecifier = `@inventive-ui/components/${folder}`;\n try {\n assertImportSpecifier(importSpecifier);\n } catch {\n continue;\n }\n\n const resolved = resolveFromTypesFile(item, importSpecifier, typesPath, pkgInfo);\n if (resolved.ok) return resolved;\n }\n\n return null;\n}\n\nfunction componentBuildExists(item: RegistryItem, pkgInfo: ComponentsPackageInfo): boolean {\n return componentFolderCandidates(item).some((folder) =>\n fs.existsSync(path.join(pkgInfo.packageRoot, \"dist\", \"components\", folder)),\n );\n}\n\nfunction buildMissingComponentReason(item: RegistryItem): string {\n return (\n `Component \"${item.name}\" is listed in iui-manifest.json but is missing from the published ` +\n `@inventive-ui/components build (expected dist/components/${item.dirName}). ` +\n `Run a full components build, export ${describeExpected(item)} from dist/index.d.ts, and republish.`\n );\n}\n\nexport function resolveComponentExport(\n item: RegistryItem,\n cwd: string = process.cwd(),\n): ComponentExportResolution {\n const pkgInfo = readComponentsPackageInfo(cwd);\n if (!pkgInfo) {\n return {\n ok: false,\n reason: \"@inventive-ui/components is not installed in node_modules.\",\n };\n }\n\n const fromFolders = resolveFromComponentFolders(item, pkgInfo);\n if (fromFolders?.ok) return fromFolders;\n\n for (const candidate of exportCandidatesForItem(item)) {\n const typesPath = resolveTypesPathForExportCandidate(pkgInfo, candidate);\n if (!typesPath) continue;\n\n const importSpecifier = `@inventive-ui/components/${candidate.replace(/^\\.\\//, \"\")}`;\n try {\n assertImportSpecifier(importSpecifier);\n } catch {\n continue;\n }\n const resolved = resolveFromTypesFile(item, importSpecifier, typesPath, pkgInfo);\n if (resolved.ok) return resolved;\n }\n\n if (pkgInfo.rootTypesPath) {\n const fromRoot = resolveFromTypesFile(item, \"@inventive-ui/components\", pkgInfo.rootTypesPath, pkgInfo);\n if (fromRoot.ok) return fromRoot;\n }\n\n if (!componentBuildExists(item, pkgInfo)) {\n return {\n ok: false,\n reason: buildMissingComponentReason(item),\n };\n }\n\n return {\n ok: false,\n reason:\n `No matching component export for \"${item.name}\" in @inventive-ui/components. ` +\n `Expected a value export named ${describeExpected(item)}.`,\n };\n}\n","// ─── Three-config tier bleed detection ───────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport {\n ASSETS_CONFIG_FILE,\n COMPONENT_CONFIG_FILE,\n PROJECT_CONFIG_FILE,\n} from \"../constants.js\";\nimport { AssetsConfigSchema, formatZodIssues } from \"./configSchemas.js\";\n\nexport interface TierCheckResult {\n ok: boolean;\n summary: string;\n details?: string;\n}\n\nconst COMPONENT_NAME_RE =\n /\\b(Button|Badge|Tag|Menu|Modal|Avatar|Checkbox|Text|Footer|Listbox|Tree|Switch|Popover|Toast|Alert)\\s*:/;\n\nconst ASSET_BLEED_IN_IUI = [\n { pattern: /import\\s+.*assets\\.config\\.json/, message: \"imports assets.config.json\" },\n { pattern: /\\bassets\\s*:\\s*assetsConfig/, message: \"nests assets via assetsConfig\" },\n { pattern: /\\bassets\\s*:\\s*\\{/, message: \"contains inline assets block\" },\n { pattern: /\\bglobalIcons\\s*:/, message: \"contains globalIcons (belongs in assets.config.json)\" },\n { pattern: /\\bicon\\s*:\\s*\\{[^}]*library\\s*:/, message: \"contains icon.library (belongs in assets.config.json)\" },\n {\n pattern: /loading\\s*:\\s*\\{[^}]*loader\\s*:\\s*\\{/,\n message: \"contains states.loading.loader object (use assets.loader tier)\",\n },\n { pattern: COMPONENT_NAME_RE, message: \"contains component config keys (belongs in component.config.ts)\" },\n];\n\nconst ASSET_BLEED_IN_COMPONENT = [\n { pattern: /\\bglobalIcons\\s*:/, message: \"contains globalIcons\" },\n { pattern: /\\blibrary\\s*:\\s*[\"']/, message: \"contains library assignment\" },\n { pattern: /\\bglobalLogos\\s*:/, message: \"contains globalLogos\" },\n { pattern: /\\bglobalEmojis\\s*:/, message: \"contains globalEmojis\" },\n];\n\nexport function stripAssetsFromIuiConfig(content: string): string {\n let next = content;\n next = next.replace(/^import\\s+assetsConfig\\s+from\\s+[\"']\\.\\/assets\\.config\\.json[\"'];\\s*\\n?/m, \"\");\n next = next.replace(\n /^import\\s+type\\s+\\{([^}]+)\\}\\s+from\\s+\"@inventive-ui\\/framework\\/config\";\\s*\\n?/m,\n (_m, types: string) => {\n const cleaned = types\n .split(\",\")\n .map((t: string) => t.trim())\n .filter((t: string) => t !== \"IUIAssetsConfig\" && t.length > 0)\n .join(\", \");\n if (!cleaned) {\n return 'import type { IUIThemeConfig } from \"@inventive-ui/framework/config\";\\n';\n }\n const hasTheme = cleaned.includes(\"IUIThemeConfig\");\n const typeList = hasTheme ? cleaned : `IUIThemeConfig, ${cleaned}`;\n return `import type { ${typeList} } from \"@inventive-ui/framework/config\";\\n`;\n },\n );\n next = next.replace(/\\n\\s*assets:\\s*assetsConfig\\s+as\\s+IUIAssetsConfig,?\\s*\\n/, \"\\n\");\n next = next.replace(/\\bIUIConfig\\b/g, \"IUIThemeConfig\");\n return next;\n}\n\nexport function checkIuiConfigTierBleed(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): TierCheckResult {\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return {\n ok: false,\n summary: \"iui.config.ts not found\",\n details: \"Run iui init to scaffold project config.\",\n };\n }\n\n let content = fs.readFileSync(configPath, \"utf-8\");\n const issues: string[] = [];\n\n if (!/\\bbuild\\s*:\\s*\\{/.test(content)) {\n issues.push(\"missing compile-first build block\");\n }\n\n for (const { pattern, message } of ASSET_BLEED_IN_IUI) {\n if (pattern.test(content)) {\n issues.push(message);\n }\n }\n\n if (issues.length === 0) {\n return { ok: true, summary: \"iui.config.ts tier boundaries are valid\" };\n }\n\n if (options.autoFix) {\n const fixed = stripAssetsFromIuiConfig(content);\n if (fixed !== content) {\n fs.writeFileSync(configPath, fixed, \"utf-8\");\n content = fixed;\n const remaining = ASSET_BLEED_IN_IUI.filter(({ pattern }) => pattern.test(content)).map(\n (x) => x.message,\n );\n if (remaining.length === 0 && /\\bbuild\\s*:\\s*\\{/.test(content)) {\n return {\n ok: true,\n summary: \"iui.config.ts repaired (removed assets tier bleed)\",\n };\n }\n }\n }\n\n return {\n ok: false,\n summary: \"iui.config.ts violates three-config tier boundaries\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n}\n\nexport function checkAssetsConfigValidity(\n cwd: string = process.cwd(),\n): TierCheckResult {\n const assetsPath = path.join(cwd, ASSETS_CONFIG_FILE);\n if (!fs.existsSync(assetsPath)) {\n return {\n ok: false,\n summary: \"assets.config.json not found\",\n details: \"Run iui init or install asset packages.\",\n };\n }\n\n let raw: unknown;\n try {\n raw = fs.readJsonSync(assetsPath);\n } catch {\n return { ok: false, summary: \"assets.config.json is not valid JSON\" };\n }\n\n const parsed = AssetsConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return {\n ok: false,\n summary: \"assets.config.json failed schema validation\",\n details: formatZodIssues(parsed.error),\n };\n }\n\n const assets = parsed.data;\n const icon = assets.icon as { globalIcons?: Record<string, string> } | undefined;\n if (assets.icon && (!icon?.globalIcons || Object.keys(icon.globalIcons).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing icon.globalIcons\",\n details: \"Run iui init or merge CLI defaults so @alias icons resolve.\",\n };\n }\n\n const logo = assets.logo as { globalLogos?: Record<string, string> } | undefined;\n if (assets.logo && (!logo?.globalLogos || Object.keys(logo.globalLogos).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing logo.globalLogos\",\n details: \"Run iui init or merge CLI defaults so @alias logos resolve.\",\n };\n }\n\n const emoji = assets.emoji as { globalEmojis?: Record<string, string> } | undefined;\n if (assets.emoji && (!emoji?.globalEmojis || Object.keys(emoji.globalEmojis).length === 0)) {\n return {\n ok: false,\n summary: \"assets.config.json is missing emoji.globalEmojis\",\n details: \"Run iui init or merge CLI defaults so @alias emojis resolve.\",\n };\n }\n\n const colorLogo = assets.colorLogo as\n | { globalColorLogos?: Record<string, string> }\n | undefined;\n if (\n assets.colorLogo &&\n (!colorLogo?.globalColorLogos ||\n Object.keys(colorLogo.globalColorLogos).length === 0)\n ) {\n return {\n ok: false,\n summary: \"assets.config.json is missing colorLogo.globalColorLogos\",\n details: \"Run iui init or merge CLI defaults so @alias color logos resolve.\",\n };\n }\n\n return { ok: true, summary: \"assets.config.json is valid\" };\n}\n\nexport function checkComponentConfigTierBleed(\n cwd: string = process.cwd(),\n): TierCheckResult {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return { ok: true, summary: \"component.config.ts tier check skipped (missing)\" };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const issues: string[] = [];\n for (const { pattern, message } of ASSET_BLEED_IN_COMPONENT) {\n if (pattern.test(content)) {\n issues.push(message);\n }\n }\n\n if (issues.length === 0) {\n return { ok: true, summary: \"component.config.ts has no asset tier bleed\" };\n }\n\n return {\n ok: false,\n summary: \"component.config.ts contains asset keys (use assets.config.json)\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n}\n","// ─── Project config validation (Zod) ─────────────────────────────────────────\n\nimport { z } from \"zod\";\n\n/** Permissive theme/states/build — doctor enforces tier bleed separately. */\nconst iuiThemeConfigSchema = z\n .object({\n theme: z.record(z.unknown()).optional(),\n states: z.record(z.unknown()).optional(),\n core: z.record(z.unknown()).optional(),\n build: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const IuiThemeConfigSchema = iuiThemeConfigSchema.refine(\n (data) => !(\"assets\" in data),\n { message: \"iui.config must not contain an assets key — use assets.config.json\" },\n);\n\nexport const AssetsConfigSchema = z\n .object({\n binding: z.enum([\"lazy\", \"scanned\"]).optional(),\n preload: z.enum([\"none\", \"configured\", \"scanned\"]).optional(),\n icon: z\n .object({\n library: z.string().optional(),\n globalIcons: z.record(z.string()).optional(),\n preload: z.enum([\"none\", \"configured\", \"scanned\"]).optional(),\n })\n .passthrough()\n .optional(),\n })\n .passthrough()\n .refine((data) => !(\"theme\" in data) && !(\"build\" in data), {\n message: \"assets.config.json must not contain theme or build keys\",\n });\n\nexport const ComponentConfigEntrySchema = z\n .object({\n default: z.record(z.unknown()).optional(),\n presets: z.record(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nexport const ComponentConfigSchema = z.record(ComponentConfigEntrySchema);\n\nexport const ProjectMetaSchema = z\n .object({\n projectId: z.string().min(1),\n repoUrl: z.string().min(1),\n createdAt: z.string().min(1),\n initScope: z.enum([\"package\", \"workspace\"]).optional(),\n configs: z\n .object({\n theme: z.string().min(1),\n assets: z.string().min(1),\n components: z.string().min(1),\n })\n .strict()\n .optional(),\n })\n .strict()\n .refine((data) => !(\"theme\" in data) && !(\"assets\" in data), {\n message: \"project.json must not contain config values — use configs paths only\",\n });\n\nexport function formatZodIssues(error: z.ZodError): string {\n return error.issues\n .slice(0, 8)\n .map((i) => `${i.path.join(\".\") || \"(root)\"}: ${i.message}`)\n .join(\"\\n\");\n}\n","// Canonical `.iui/` layout — metadata, generated source, and disposable cache.\n\nimport path from \"node:path\";\nimport { IUI_DIR } from \"../constants.js\";\nimport { resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\nexport const IUI_GENERATED_SEGMENT = \"generated\";\nexport const IUI_CACHE_SEGMENT = \"cache\";\n\nexport const IUI_CACHE_FILES = {\n scan: \"scan.cache.json\",\n styles: \"styles.css\",\n manifest: \"manifest.js\",\n stylesInject: \"styles.inject.js\",\n stylesInline: \"styles.inline.js\",\n slotState: \"slot-state.json\",\n slotLock: \"slot.lock\",\n utilities: \"utilities.css\",\n manifestJson: \"manifest.json\",\n slotWarmup: \"slot-warmup.mjs\",\n} as const;\n\n/** Compile-first CSS cache artifacts per active bundler integration. */\nexport const CSS_CACHE_ARTIFACTS_BY_INTEGRATION = {\n vite: [\"styles\", \"manifest\"],\n webpack: [\"styles\", \"manifest\", \"stylesInject\"],\n next: [\"styles\", \"manifest\", \"stylesInline\"],\n} as const;\n\nexport type IuiBuildIntegration = keyof typeof CSS_CACHE_ARTIFACTS_BY_INTEGRATION;\n\nexport function iuiProjectRoot(cwd: string = process.cwd()): string {\n return resolveIuiProjectRoot(cwd);\n}\n\nexport function iuiRoot(cwd: string = process.cwd()): string {\n return path.join(iuiProjectRoot(cwd), IUI_DIR);\n}\n\nexport function iuiGeneratedDir(cwd: string = process.cwd()): string {\n return path.join(iuiRoot(cwd), IUI_GENERATED_SEGMENT);\n}\n\nexport function iuiCacheDir(cwd: string = process.cwd()): string {\n return path.join(iuiRoot(cwd), IUI_CACHE_SEGMENT);\n}\n\nexport function iuiCacheFile(\n cwd: string,\n name: keyof typeof IUI_CACHE_FILES,\n): string {\n return path.join(iuiCacheDir(cwd), IUI_CACHE_FILES[name]);\n}\n\n/** Gitignore entries for disposable IUI state (single directory). */\nexport const IUI_CACHE_GITIGNORE_LINES = [\n \"\",\n \"# IUI disposable cache (.iui/generated/ stays committed)\",\n `${IUI_DIR}/${IUI_CACHE_SEGMENT}/`,\n `${IUI_DIR}/slot-registration-state.json`,\n `${IUI_DIR}/slot-registration.lock`,\n `${IUI_DIR}/classes.cache.json`,\n `${IUI_DIR}/utilities.css`,\n `${IUI_DIR}/build-styles.generated.css`,\n `${IUI_DIR}/build-styles.generated.js`,\n `${IUI_DIR}/build-manifest.generated.js`,\n `${IUI_DIR}/build-css-inline.js`,\n `${IUI_DIR}/build-manifest.json`,\n `${IUI_DIR}/slot-warmup.generated.mjs`,\n \".iui-bootstrap-client.js\",\n \".iui-bootstrap-server.js\",\n \".iui-bootstrap.js\",\n \"public/iui/\",\n];\n","// ─── Interactive Prompts ─────────────────────────────────────────────────────\n//\n// Gemini-style framed input experience.\n// Every prompt gets a clear visual header, then a clean branded input line.\n\nimport inquirer from \"inquirer\";\nimport chalk from \"chalk\";\nimport {\n ASSET_PACKAGES,\n ASSET_CATEGORY_LABELS,\n ICON_LIBRARY_LABELS,\n ILLUSTRATION_STYLE_LABELS,\n STORYSET_ILLUSTRATION_STYLES,\n EMOJI_FAMILIES,\n EMOJI_FAMILY_LABELS,\n type AssetCategory,\n type StorysetIllustrationStyle,\n type EmojiFamily,\n} from \"../constants.js\";\nimport * as ui from \"./ui.js\";\nimport { assertInteractivePrompt } from \"./security/terminal.js\";\n\n// ── Prompt building blocks ────────────────────────────────────────────────────\n\n/** Brand-colored ◆ prefix used on every prompt line. */\nconst PROMPT_PREFIX = ` ${ui.brand.bold(\"◆\")}`;\n\n/**\n * Prints a visual header above a prompt — title in white bold,\n * optional hint in dim. Creates a clear \"input zone\" feel.\n */\nexport function promptHeader(title: string, hint?: string): void {\n console.log();\n console.log(` ${ui.brand.bold(\"◆\")} ${chalk.white.bold(title)}`);\n if (hint) console.log(` ${ui.dim(hint)}`);\n console.log();\n}\n\n// ── Asset selection ────────────────────────────────────────────────────────────\n\nexport async function promptAssetSelection(\n installedPackages: string[] = [],\n): Promise<string[]> {\n assertInteractivePrompt(\"asset package selection\");\n\n promptHeader(\n \"Select Asset Packages\",\n \"Type to filter by name, ID, or category. Space to select, Enter to confirm.\",\n );\n\n const { filter } = await inquirer.prompt<{ filter: string }>([\n {\n type: \"input\",\n name: \"filter\",\n message: chalk.dim(\"Filter (leave empty for all)\"),\n prefix: PROMPT_PREFIX,\n default: \"\",\n },\n ]);\n\n const term = filter.trim().toLowerCase();\n const filtered = term\n ? ASSET_PACKAGES.filter((pkg) => {\n const haystack = `${pkg.displayName} ${pkg.id} ${pkg.category} ${pkg.slotType}`.toLowerCase();\n return haystack.includes(term);\n })\n : ASSET_PACKAGES;\n\n const catalogue = filtered.length > 0 ? filtered : ASSET_PACKAGES;\n if (term && filtered.length === 0) {\n ui.warn(`No packages matched \"${filter}\". Showing full catalogue.`);\n console.log();\n }\n\n const categories = [...new Set(catalogue.map((p) => p.category))] as AssetCategory[];\n\n const choices: Array<\n { name: string; value: string; disabled?: string } | typeof inquirer.Separator.prototype\n > = [];\n\n for (const cat of categories) {\n const inCategory = catalogue.filter((p) => p.category === cat);\n choices.push(\n new inquirer.Separator(\n `\\n ${ui.brand.bold(ASSET_CATEGORY_LABELS[cat])} ${ui.dim(`(${inCategory.length})`)}`,\n ) as typeof inquirer.Separator.prototype,\n );\n for (const pkg of inCategory) {\n choices.push({\n name: `${pkg.displayName.padEnd(26)} ${ui.dim(`[${pkg.id}]`)} ${ui.accent(pkg.slotType)}`,\n value: pkg.id,\n disabled: installedPackages.includes(pkg.id) ? ui.dim(\"installed\") : undefined,\n });\n }\n }\n\n console.log();\n\n const { selected } = await inquirer.prompt<{ selected: string[] }>([\n {\n type: \"checkbox\",\n name: \"selected\",\n message: chalk.dim(\"Toggle packages to install\"),\n prefix: PROMPT_PREFIX,\n choices: choices as any,\n pageSize: 20,\n loop: false,\n },\n ]);\n\n return selected;\n}\n\n// ── Icon library ─────────────────────────────────────────────────────────────\n\nfunction iconLibraryDisplayName(lib: string): string {\n return ICON_LIBRARY_LABELS[lib] ?? lib;\n}\n\nexport async function promptChooseDefaultIconLibrary(\n installedLibraries: string[],\n fallbackCurrent: string | null,\n justInstalledLibrary: string,\n): Promise<string> {\n const libs = [...new Set(installedLibraries)].filter(Boolean);\n if (libs.length === 0) return justInstalledLibrary;\n if (libs.length === 1) return libs[0];\n\n const autoChoice = process.env.IUI_ICON_DEFAULT_CHOICE;\n if (autoChoice === \"keep\") {\n if (fallbackCurrent && libs.includes(fallbackCurrent)) return fallbackCurrent;\n return libs[0];\n }\n if (autoChoice === \"switch\") {\n if (libs.includes(justInstalledLibrary)) return justInstalledLibrary;\n return libs[libs.length - 1];\n }\n\n const defaultSelection =\n (fallbackCurrent && libs.includes(fallbackCurrent) ? fallbackCurrent : null) ??\n (libs.includes(justInstalledLibrary) ? justInstalledLibrary : null) ??\n libs[0];\n\n assertInteractivePrompt(\"icon library choice\");\n\n promptHeader(\n \"Default Icon Library\",\n \"Multiple icon packages are installed. Choose which is the active default.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: string }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: chalk.dim(\"Select default icon set\"),\n prefix: PROMPT_PREFIX,\n choices: libs.map((lib) => ({\n name:\n lib === justInstalledLibrary\n ? `${iconLibraryDisplayName(lib)} ${ui.dim(\"(just installed)\")}`\n : iconLibraryDisplayName(lib),\n value: lib,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Illustration style ─────────────────────────────────────────────────────\n\n/**\n * When Storyset illustrations are installed, pick the default `illustration.style`\n * in assets.config.json (Amico, Bro, Cuate, Pana, Rafiki).\n */\nexport async function promptChooseIllustrationStyle(\n fallbackCurrent: string | null,\n): Promise<StorysetIllustrationStyle> {\n const styles = [...STORYSET_ILLUSTRATION_STYLES];\n\n const autoChoice = process.env.IUI_ILLUSTRATION_STYLE_CHOICE;\n if (autoChoice) {\n const match = styles.find((s) => s.toLowerCase() === autoChoice.trim().toLowerCase());\n if (match) return match;\n }\n\n const defaultSelection =\n (fallbackCurrent &&\n styles.includes(fallbackCurrent as StorysetIllustrationStyle)\n ? (fallbackCurrent as StorysetIllustrationStyle)\n : null) ?? \"Amico\";\n\n assertInteractivePrompt(\"illustration style choice\");\n ui.inputBox(\n \"Illustration Style\",\n \"Storyset includes five visual styles. Pick the default for illustration slots.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: StorysetIllustrationStyle }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: \"Which Storyset style should be the default?\",\n prefix: PROMPT_PREFIX,\n choices: styles.map((style) => ({\n name: ILLUSTRATION_STYLE_LABELS[style],\n value: style,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Emoji family ───────────────────────────────────────────────────────────\n\n/**\n * When the emoji package is installed, pick the default `emoji.family`\n * in assets.config.json (apple, google, facebook, twitter, native).\n * Skin tone is set separately to `medium-light` by the installer.\n */\nexport async function promptChooseEmojiFamily(\n fallbackCurrent: string | null,\n): Promise<EmojiFamily> {\n const families = [...EMOJI_FAMILIES];\n\n const autoChoice = process.env.IUI_EMOJI_FAMILY_CHOICE;\n if (autoChoice) {\n const match = families.find((f) => f.toLowerCase() === autoChoice.trim().toLowerCase());\n if (match) return match;\n }\n\n const defaultSelection =\n (fallbackCurrent && families.includes(fallbackCurrent as EmojiFamily)\n ? (fallbackCurrent as EmojiFamily)\n : null) ?? \"apple\";\n\n assertInteractivePrompt(\"emoji family choice\");\n ui.inputBox(\n \"Emoji Family\",\n \"Choose the default CDN style for emoji slots. Skin tone defaults to medium-light.\",\n );\n\n const { chosen } = await inquirer.prompt<{ chosen: EmojiFamily }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: \"Which emoji family should be the default?\",\n prefix: PROMPT_PREFIX,\n choices: families.map((family) => ({\n name: EMOJI_FAMILY_LABELS[family],\n value: family,\n })),\n default: defaultSelection,\n },\n ]);\n\n return chosen;\n}\n\n// ── Confirm ───────────────────────────────────────────────────────────────────\n\nexport async function confirm(message: string, defaultValue = true): Promise<boolean> {\n assertInteractivePrompt(\"confirmation\");\n const { ok } = await inquirer.prompt<{ ok: boolean }>([\n {\n type: \"confirm\",\n name: \"ok\",\n message: chalk.white(message),\n prefix: PROMPT_PREFIX,\n default: defaultValue,\n },\n ]);\n return ok;\n}\n\n// ── Update selection ──────────────────────────────────────────────────────────\n\nexport async function promptUpdateSelection(\n updates: Array<{\n name: string;\n displayName: string;\n current: string;\n latest: string;\n eligible: boolean;\n }>,\n message = \"Select packages to update\",\n): Promise<string[]> {\n assertInteractivePrompt(\"update selection\");\n const eligible = updates.filter((u) => u.eligible);\n if (eligible.length === 0) return [];\n\n console.log();\n\n const { selected } = await inquirer.prompt<{ selected: string[] }>([\n {\n type: \"checkbox\",\n name: \"selected\",\n message: chalk.dim(message),\n prefix: PROMPT_PREFIX,\n choices: eligible.map((u) => ({\n name: `${u.displayName.padEnd(22)} ${ui.dim(u.current)} ${ui.dim(\"→\")} ${ui.success(u.latest)}`,\n value: u.name,\n checked: true,\n })),\n },\n ]);\n\n return selected;\n}\n\n// ── Framework choice ──────────────────────────────────────────────────────────\n\nexport async function promptFrameworkChoice(): Promise<\"react\" | \"vite\"> {\n assertInteractivePrompt(\"framework choice\");\n\n promptHeader(\n \"Framework Preset\",\n \"React 19 = library only (Next.js, Webpack, or custom Vite). Vite preset = React + dev server + vite.config.ts.\",\n );\n\n const { framework } = await inquirer.prompt<{ framework: \"react\" | \"vite\" }>([\n {\n type: \"list\",\n name: \"framework\",\n message: chalk.dim(\"Choose a setup\"),\n prefix: PROMPT_PREFIX,\n choices: [\n {\n name: `React 19 only ${ui.dim(\"no vite.config.ts — bring your own bundler\")}`,\n value: \"react\",\n },\n {\n name: `Vite 6+ + React ${ui.dim(\"includes vite.config.ts and npm run dev\")}`,\n value: \"vite\",\n },\n ],\n },\n ]);\n return framework;\n}\n\n// ── Text input ────────────────────────────────────────────────────────────────\n\n/**\n * Generic styled text input with a header.\n * Used in command files to avoid re-implementing the framing pattern.\n */\nexport async function promptText(\n title: string,\n hint: string | undefined,\n placeholder: string,\n validate?: (value: string) => true | string,\n): Promise<string> {\n assertInteractivePrompt(title);\n promptHeader(title, hint);\n const { value } = await inquirer.prompt<{ value: string }>([\n {\n type: \"input\",\n name: \"value\",\n message: chalk.dim(placeholder),\n prefix: PROMPT_PREFIX,\n validate,\n },\n ]);\n return value.trim();\n}\n","// ─── iui init ────────────────────────────────────────────────────────────────\n//\n// Full project initialisation:\n// auth → license → register project → configure npm → install framework → generate configs\n//\n// Default: init in the current package only (e.g. apps/docs).\n// Optional --workspace: shared setup at the monorepo root.\n\nimport path from \"node:path\";\nimport ora from \"ora\";\nimport { formatSeatUsage, formatPlanLabel } from \"../services/license.js\";\nimport { registerProject } from \"../services/project.js\";\nimport { fetchComponentRegistry } from \"../services/registry.js\";\nimport { installFramework, ensureFrameworkDeps } from \"../services/framework.js\";\nimport { installComponentsPackage } from \"../services/installer.js\";\nimport {\n bootstrapRegisteredPackages,\n bootstrapWorkspacePackage,\n registerAllWorkspacePackages,\n registerWorkspacePackage,\n} from \"../services/workspace-bootstrap.js\";\nimport {\n ensureProjectConfig,\n ensureComponentConfig,\n ensureInventiveUiViteConfig,\n writeProjectMeta,\n writeAssetsConfig,\n writeTsConfig,\n removeStaleIuiViteConfig,\n isInsideProject,\n detectRepoUrl,\n hasPackageJson,\n ensureProjectNpmrc,\n ensureGitignoreHasNpmrc,\n ensureGitignoreHasIuiBuildCache,\n writeGlobalNpmrcAuth,\n detectPackageManager,\n syncInstallCommand,\n installCmd,\n prepareWorkspaceForDependencyInstall,\n} from \"../utils/filesystem.js\";\nimport { FRAMEWORK_PACKAGE, COMPONENTS_PACKAGE } from \"../constants.js\";\nimport {\n findIuiProjectRoot,\n resolveInitRoot,\n isWorkspaceChildPackage,\n isMonorepoInstallContext,\n} from \"../utils/workspace.js\";\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\ntype InitOptions = {\n source?: string;\n framework?: \"react\" | \"vite\";\n yes?: boolean;\n workspace?: boolean;\n};\n\nexport async function initCommand(opts?: InitOptions): Promise<void> {\n const invocationCwd = process.cwd();\n const sharedWorkspace = opts?.workspace === true;\n\n try {\n ui.heading(\"Initialize Project\");\n\n const existingIuiRoot = findIuiProjectRoot(invocationCwd);\n if (\n existingIuiRoot &&\n path.resolve(existingIuiRoot) !== path.resolve(invocationCwd)\n ) {\n await bootstrapWorkspacePackage(invocationCwd, existingIuiRoot);\n return;\n }\n\n const { initRoot, redirectedFrom } = resolveInitRoot(invocationCwd, {\n workspace: sharedWorkspace,\n });\n\n if (!hasPackageJson(initRoot)) {\n throw new CLIError(\n redirectedFrom\n ? \"Monorepo workspace root has no package.json.\"\n : \"No package.json found in the current directory.\",\n redirectedFrom\n ? \"Add a package.json at the workspace root, or run iui init without --workspace.\"\n : \"npm init\",\n );\n }\n\n if (isInsideProject(initRoot)) {\n ui.warn(\"This project is already initialized.\");\n ui.hint(\"Run iui doctor to check project health.\");\n return;\n }\n\n const originalCwd = process.cwd();\n if (path.resolve(initRoot) !== path.resolve(originalCwd)) {\n process.chdir(initRoot);\n ui.hint(\n `Monorepo --workspace: initializing at ${path.relative(invocationCwd, initRoot) || initRoot}`,\n );\n } else if (!sharedWorkspace && findIuiProjectRoot(initRoot) === null) {\n ui.hint(\"Initializing this package only — other monorepo apps are untouched.\");\n if (isWorkspaceChildPackage(invocationCwd)) {\n ui.hint(\"After clone, teammates run iui setup from the monorepo root (or from this app).\");\n }\n }\n\n try {\n // ── Monorepo: sync lockfile before any package.json changes ────────\n let workspacePrepared = false;\n if (isMonorepoInstallContext(initRoot)) {\n ui.step(\"Preparing workspace for install…\");\n const pm = detectPackageManager(initRoot);\n const syncSpinner = ora({\n text: `Running ${syncInstallCommand(pm)} at workspace root…`,\n prefixText: ` ${ui.dim(\"│\")}`,\n }).start();\n try {\n prepareWorkspaceForDependencyInstall(initRoot);\n workspacePrepared = true;\n syncSpinner.succeed(\"Workspace lockfile synced\");\n } catch (err) {\n syncSpinner.fail(\"Workspace sync failed\");\n throw new CLIError(\n \"Could not sync the monorepo lockfile before installing packages.\",\n formatExecSyncError(err) ?? syncInstallCommand(pm),\n );\n }\n }\n\n // ── Pre-check: React 19.x or Vite 6.x+ ────────────────────────────\n ui.step(\"Checking framework dependencies…\");\n const framework = await ensureFrameworkDeps(initRoot, {\n preferredFramework: opts?.framework,\n autoApprove: opts?.yes === true,\n alwaysPrompt: !opts?.framework && opts?.yes !== true,\n });\n\n // ── Step 1: Auth ───────────────────────────────────────────────────\n ui.step(\"Verifying authentication…\");\n const auth = await ensureAuthSession();\n const license = await ensureLicenseSession();\n ui.ok(`Authenticated as ${ui.accent(auth.github_id ?? \"\")}`);\n\n // ── Step 2: License ────────────────────────────────────────────────\n ui.step(\"Validating license…\");\n const spinner1 = ora({ text: \"Contacting license server…\", prefixText: ` ${ui.dim(\"│\")}` }).start();\n spinner1.succeed(\"License valid\");\n ui.kv(\"Plan\", formatPlanLabel(license.plan));\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats (users)\", seatUsage);\n }\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n\n // ── Step 3: Register project ───────────────────────────────────────\n ui.newline();\n ui.step(\"Registering project…\");\n const repoUrl = detectRepoUrl(initRoot);\n const spinner2 = ora({ text: \"Registering with Inventive UI…\", prefixText: ` ${ui.dim(\"│\")}` }).start();\n const project = await registerProject(auth.token, repoUrl);\n spinner2.succeed(\"Project registered\");\n ui.kv(\"Project ID\", project.project_id);\n\n // ── Step 4: Persist metadata ───────────────────────────────────────\n const meta = {\n projectId: project.project_id,\n repoUrl,\n createdAt: new Date().toISOString(),\n initScope: sharedWorkspace ? (\"workspace\" as const) : (\"package\" as const),\n configs: {\n theme: \"./iui.config.ts\",\n assets: \"./assets.config.json\",\n components: \"./component.config.ts\",\n },\n };\n writeProjectMeta(meta, initRoot);\n\n // ── Step 5: Configure npm registry ─────────────────────────────────\n ui.step(\"Configuring npm registry…\");\n ensureProjectNpmrc(initRoot);\n ensureGitignoreHasNpmrc(initRoot);\n ensureGitignoreHasIuiBuildCache(initRoot);\n writeGlobalNpmrcAuth(auth.token);\n ui.ok(\"npm configured for @inventive-ui packages\");\n\n // Re-sync after npmrc/auth changes — npm workspace adds need a fresh lockfile.\n if (isMonorepoInstallContext(initRoot)) {\n prepareWorkspaceForDependencyInstall(initRoot);\n workspacePrepared = true;\n }\n\n const installOpts = {\n skipWorkspacePrepare: workspacePrepared,\n };\n\n // ── Step 6: Install framework ──────────────────────────────────────\n ui.newline();\n ui.step(\"Installing Inventive UI Framework…\");\n let frameworkOk = true;\n try {\n await installFramework({\n token: auth.token,\n projectId: project.project_id,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: initRoot,\n ...installOpts,\n });\n } catch (err) {\n frameworkOk = false;\n if (err instanceof CLIError) {\n ui.warn(err.message);\n if (err.hint) ui.hint(err.hint);\n } else {\n ui.warn(\"Framework installation failed — continuing with config generation.\");\n }\n }\n\n // ── Step 7: Install components package ─────────────────────────────\n ui.newline();\n ui.step(\"Installing component library…\");\n let componentsOk = true;\n try {\n await installComponentsPackage({\n token: auth.token,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: initRoot,\n ...installOpts,\n });\n } catch (err) {\n componentsOk = false;\n if (err instanceof CLIError) {\n ui.warn(err.message);\n if (err.hint) ui.hint(err.hint);\n } else {\n ui.warn(\"Component library installation failed; continuing with config generation.\");\n }\n }\n\n // ── Step 8: Generate project config files\n ui.step(\"Generating config files…\");\n writeAssetsConfig(initRoot);\n ensureProjectConfig(initRoot);\n writeTsConfig(framework.framework, initRoot);\n if (framework.framework === \"vite\") {\n ensureInventiveUiViteConfig(initRoot);\n ui.ok(\"Config files ready (iui.config.ts, tsconfig.json, tsconfig.node.json, vite.config.ts)\");\n } else {\n if (removeStaleIuiViteConfig(initRoot)) {\n ui.hint(\"Removed vite.config.ts (React-only preset — no Vite tooling required).\");\n }\n ui.ok(\"Config files ready (iui.config.ts, tsconfig.json)\");\n }\n\n // ── Step 9: Generate component.config.ts (from registry) ──────────\n ui.step(\"Generating component.config.ts…\");\n const fetchedRegistry = await fetchComponentRegistry(auth.token);\n if (!fetchedRegistry.registry && fetchedRegistry.apiFailure) {\n ui.warn(`Component registry API: ${fetchedRegistry.apiFailure}`);\n }\n ensureComponentConfig(fetchedRegistry.registry, initRoot);\n ui.ok(\"component.config.ts ready\");\n\n if (framework.framework === \"react\" && removeStaleIuiViteConfig(initRoot)) {\n ui.hint(\"Removed vite.config.ts (React-only preset — no Vite tooling required).\");\n }\n\n if (sharedWorkspace) {\n registerAllWorkspacePackages(initRoot);\n } else {\n registerWorkspacePackage(initRoot, initRoot);\n }\n bootstrapRegisteredPackages(initRoot);\n\n // ── Done ───────────────────────────────────────────────────────────\n if (frameworkOk && componentsOk) {\n ui.done(\"Project initialized successfully!\");\n } else {\n const pm = detectPackageManager(initRoot);\n const missing: string[] = [];\n if (!frameworkOk) missing.push(FRAMEWORK_PACKAGE);\n if (!componentsOk) missing.push(COMPONENTS_PACKAGE);\n\n ui.done(\"Project initialized (config files created), but some packages are still missing.\");\n ui.hint(`Install manually: ${installCmd(pm, missing.join(\" \"), initRoot)}`);\n ui.newline();\n ui.hint(\"If you see npm 'location' or ENOTEMPTY errors, clean the workspace and retry:\");\n ui.hint(\"• cd to monorepo root → remove node_modules/next if present → npm install\");\n ui.hint(\"• Then run: iui install framework && iui install components (from this app)\");\n ui.newline();\n ui.hint(\"Auth-related failures:\");\n ui.hint(\"• Seat/license error → ask an admin to run: iui team add <your-github-email>\");\n ui.hint(\"• Then re-authenticate: iui login\");\n ui.hint(\"• CI / non-interactive builds → set IUI_DEPLOY_TOKEN (see docs/TEAM-ONBOARDING.md)\");\n }\n\n ui.nextSteps([\n \"iui install assets — Install asset packages (icons, illustrations…)\",\n \"iui list — View installed components\",\n \"iui doctor — Check project health\",\n ]);\n } finally {\n process.chdir(originalCwd);\n }\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── License Service ─────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type { LicenseInfo, LicenseSeatList } from \"../types.js\";\n\nexport type LicenseMode = \"seat_based\" | \"individual_plan\";\n\nfunction parseApiErrorBody(body: string, fallback: string): string {\n const trimmed = body.trim();\n if (!trimmed) return fallback;\n if (!trimmed.startsWith(\"{\")) return `${fallback}: ${trimmed}`;\n try {\n const parsed = JSON.parse(trimmed) as { error?: unknown };\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n return parsed.error;\n }\n } catch {\n // ignore\n }\n return fallback;\n}\n\nexport async function validateLicense(token: string): Promise<LicenseInfo> {\n const res = await fetch(`${API_BASE_URL}/license/validate`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"validating your license\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) throw new CLIError(\"License invalid or revoked.\", \"Visit inventiveui.com\");\n if (!res.ok) throw new CLIError(`License validation failed (${res.status}).`);\n\n const license = (await res.json()) as LicenseInfo;\n if (!license.valid) throw new CLIError(\"Your license is not valid.\", \"Visit inventiveui.com\");\n return license;\n}\n\nexport function isUpdateEligible(releaseDate: string, expiresAt: string): boolean {\n return new Date(releaseDate) <= new Date(expiresAt);\n}\n\nexport function getLicenseMode(license: LicenseInfo): LicenseMode {\n if (license.license_mode === \"seat_based\") {\n return \"seat_based\";\n }\n if (license.license_mode === \"individual_plan\" || license.license_mode === \"unlimited\") {\n return \"individual_plan\";\n }\n return typeof license.seat_limit === \"number\" ? \"seat_based\" : \"individual_plan\";\n}\n\nexport function formatPlanLabel(plan?: string): string {\n const value = plan?.trim();\n if (!value) return \"—\";\n const normalized = value.toLowerCase();\n if (normalized === \"individual\" || normalized === \"individual_plan\") return \"Individual\";\n if (normalized === \"team\" || normalized === \"seat_based\") return \"Team\";\n return value;\n}\n\nexport function formatSeatUsage(license: LicenseInfo): string | null {\n if (getLicenseMode(license) !== \"seat_based\") return null;\n if (typeof license.seats_used !== \"number\" || typeof license.seat_limit !== \"number\") {\n return null;\n }\n return `${license.seats_used}/${license.seat_limit}`;\n}\n\nexport function hasAvailableSeat(license: LicenseInfo): boolean {\n if (getLicenseMode(license) !== \"seat_based\") return true;\n if (typeof license.seats_used !== \"number\" || typeof license.seat_limit !== \"number\") {\n return false;\n }\n return license.seats_used < license.seat_limit;\n}\n\nexport async function listLicenseUsers(token: string, includeInactive = false): Promise<LicenseSeatList> {\n const query = includeInactive ? \"?include_inactive=true\" : \"\";\n const res = await fetch(`${API_BASE_URL}/license/users${query}`, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n });\n throwIfRateLimited(res, \"listing team seats\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, \"Only license admin can list seats.\"));\n }\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to list seats (${res.status}).`));\n }\n return res.json() as Promise<LicenseSeatList>;\n}\n\nexport async function addLicenseUser(token: string, email: string): Promise<{ active_seats: number; seat_limit: number }> {\n const res = await fetch(`${API_BASE_URL}/license/users/add`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ email }),\n });\n throwIfRateLimited(res, \"adding a team seat\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to add seat (${res.status}).`));\n }\n const payload = (await res.json()) as { active_seats: number; seat_limit: number };\n return payload;\n}\n\nexport async function removeLicenseUser(token: string, email: string): Promise<{ active_seats: number; seat_limit: number }> {\n const res = await fetch(`${API_BASE_URL}/license/users/remove`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ email }),\n });\n throwIfRateLimited(res, \"removing a team seat\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new CLIError(parseApiErrorBody(body, `Failed to remove seat (${res.status}).`));\n }\n const payload = (await res.json()) as { active_seats: number; seat_limit: number };\n return payload;\n}\n","// ─── Project Service ─────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type { ProjectRegistration } from \"../types.js\";\n\nexport async function registerProject(\n token: string,\n repoUrl: string,\n): Promise<ProjectRegistration> {\n const res = await fetch(`${API_BASE_URL}/projects/register`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ repo_url: repoUrl }),\n });\n throwIfRateLimited(res, \"registering your project\");\n if (res.status === 401) throw new CLIError(\"Authentication expired.\", \"iui login\");\n if (res.status === 403) {\n const body = await res.json().catch(() => ({})) as { error?: string };\n const message = body.error ?? \"Project registration forbidden.\";\n throw new CLIError(\n message,\n message.toLowerCase().includes(\"seat limit\")\n ? \"Visit inventiveui.com to upgrade\"\n : undefined,\n );\n }\n if (!res.ok) throw new CLIError(`Project registration failed (${res.status}).`);\n return (await res.json()) as ProjectRegistration;\n}\n\nexport async function markFrameworkInstalled(token: string, projectId: string): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/framework`, {\n method: \"PUT\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ framework_installed: true }),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n","// ─── Registry API errors (CLI ↔ IUI-CLI-API alignment) ───────────────────────\n//\n// API returns JSON: { \"error\": string, \"code\"?: string }\n// Keep `REGISTRY_*` / manifest code strings in sync with:\n// IUI-CLI-API/src/lib/registryErrorCodes.ts\n\nexport type RegistryApiErrorPayload = {\n error?: string;\n code?: string;\n};\n\n/** Try to parse `{ error, code }` from an API error body. */\nexport function parseRegistryApiErrorBody(body: string): RegistryApiErrorPayload | null {\n const t = body.trim();\n if (!t.startsWith(\"{\")) return null;\n try {\n const o = JSON.parse(t) as unknown;\n if (!o || typeof o !== \"object\") return null;\n const err = (o as { error?: unknown }).error;\n const code = (o as { code?: unknown }).code;\n return {\n error: typeof err === \"string\" ? err : undefined,\n code: typeof code === \"string\" ? code : undefined,\n };\n } catch {\n return null;\n }\n}\n\nconst GENERIC_HINT =\n \"Run iui login if you are not signed in. If the problem continues, check your network or try again later.\";\n\nconst OPERATOR_SERVER_HINT =\n \"If you operate the API: set NODE_AUTH_TOKEN (GitHub PAT with read:packages) or IUI_COMPONENTS_MANIFEST_URL / IUI_COMPONENTS_MANIFEST_PATH. See IUI-CLI-API .env.example.\";\n\n/**\n * User-facing hints keyed by API `code` (manifest, npm proxy, updates).\n * Sync with IUI-CLI-API/src/lib/registryErrorCodes.ts\n */\nexport const REGISTRY_API_ERROR_HINTS: Record<string, string> = {\n // Manifest / GitHub Packages (components)\n MANIFEST_URL_HTTP: \"The configured manifest URL returned an error. Operators should verify IUI_COMPONENTS_MANIFEST_URL.\",\n MANIFEST_URL_INVALID: \"Manifest JSON from the URL must include an \\\"items\\\" array. Fix the hosted file or override.\",\n MANIFEST_URL_ERROR: \"Could not load manifest from IUI_COMPONENTS_MANIFEST_URL. Check URL and network.\",\n MANIFEST_PATH_MISSING: OPERATOR_SERVER_HINT,\n MANIFEST_PATH_INVALID: \"Manifest file at IUI_COMPONENTS_MANIFEST_PATH must include an \\\"items\\\" array.\",\n MANIFEST_PATH_ERROR: \"Could not read IUI_COMPONENTS_MANIFEST_PATH on the server.\",\n REGISTRY_NOT_CONFIGURED: OPERATOR_SERVER_HINT,\n GITHUB_NETWORK_ERROR: \"The API could not reach GitHub Packages. Retry later or check server outbound network.\",\n GITHUB_UNAUTHORIZED: OPERATOR_SERVER_HINT,\n GITHUB_PACKAGE_NOT_FOUND:\n \"@inventive-ui/components may not be published to GitHub Packages, or the scope/name is wrong.\",\n GITHUB_REGISTRY_ERROR: \"GitHub Packages returned an unexpected error while loading component metadata.\",\n COMPONENTS_NO_LATEST: \"Published @inventive-ui/components has no dist-tags.latest on the registry.\",\n GITHUB_VERSION_NETWORK: \"Network error while resolving the latest components version on the server.\",\n COMPONENTS_RESOLVE_PKGJSON:\n \"Server could not read package.json for the latest components version (GitHub may return HTTP 405; tarball fallback failed).\",\n COMPONENTS_TARBALL_HTTP: \"Server could not download the components tarball from GitHub Packages.\",\n COMPONENTS_NO_PACKAGE_JSON_IN_TARBALL: \"Published tarball is missing package/package.json.\",\n COMPONENTS_PKGJSON_FROM_TARBALL: \"Server could not parse package.json from the published tarball.\",\n COMPONENTS_NO_IUI_FIELD:\n \"Published @inventive-ui/components must include an \\\"iui\\\" field in package.json (manifest path or embedded items).\",\n COMPONENTS_MANIFEST_PATH_UNSAFE: \"The manifest path in package.json contains unsafe segments; publish a safe relative path.\",\n COMPONENTS_NO_TARBALL: \"Registry metadata has no tarball URL for the latest components version.\",\n COMPONENTS_MANIFEST_NOT_IN_TARBALL: \"The manifest file declared in package.json was not found inside the tarball.\",\n COMPONENTS_MANIFEST_INVALID_JSON: \"iui-manifest.json inside the package is not valid JSON.\",\n\n // npm proxy (download / metadata)\n REGISTRY_UNAUTHORIZED: \"Run iui login and try again.\",\n REGISTRY_LICENSE_REQUIRED: \"Access requires an active license seat. Ask your admin to add your email or use a deploy token from a licensed account.\",\n REGISTRY_UPDATE_WINDOW_EXPIRED: \"Your update window has expired. Renew at inventiveui.com to access newer package versions.\",\n REGISTRY_PACKAGE_FORBIDDEN: \"This deploy token is scoped to different packages. Create a new token with the required package scope.\",\n REGISTRY_INVALID_PACKAGE: \"That package id is not served by this registry API.\",\n REGISTRY_PACKAGE_NOT_FOUND: \"Package not found on the registry. It may be unpublished or the name may be wrong.\",\n REGISTRY_NO_PUBLISHED_VERSION: \"No published version found for that package.\",\n REGISTRY_NO_TARBALL_URL: \"Registry metadata has no tarball URL for the requested version.\",\n REGISTRY_TARBALL_DOWNLOAD_FAILED: \"The API could not download the package tarball from GitHub Packages.\",\n REGISTRY_UPSTREAM_METADATA_ERROR: \"GitHub Packages returned an error while loading package metadata.\",\n\n // POST /registry/updates\n REGISTRY_UPDATES_INVALID_JSON: \"Request body was not valid JSON.\",\n REGISTRY_UPDATES_MISSING_PROJECT_ID: \"Project metadata is missing. Run iui init to register this repository.\",\n REGISTRY_UPDATES_PROJECT_NOT_FOUND: \"This project is not registered to your account. Re-run iui init in this repository.\",\n REGISTRY_UPDATES_MISSING_COMPONENTS: \"Request must include a \\\"components\\\" object with installed versions.\",\n};\n\nexport function registryApiHintForCode(code?: string): string | undefined {\n if (!code) return undefined;\n return REGISTRY_API_ERROR_HINTS[code];\n}\n\n/** One-line summary for dim() / logs when manifest fetch fails. */\nexport function formatManifestApiFailure(httpStatus: number, body: string): string {\n const p = parseRegistryApiErrorBody(body);\n if (p?.code && p?.error) return `${httpStatus} [${p.code}] ${p.error}`;\n if (p?.error) return `${httpStatus} — ${p.error}`;\n const raw = body.trim().replace(/\\s+/g, \" \");\n if (raw.length > 180) return `${httpStatus} — ${raw.slice(0, 177)}…`;\n return raw ? `${httpStatus} — ${raw}` : String(httpStatus);\n}\n\n/** Message + optional hint for failed tarball download via /registry/npm/download */\nexport function formatPackageDownloadFailure(\n httpStatus: number,\n body: string,\n packageLabel: string,\n): { message: string; hint?: string } {\n const p = parseRegistryApiErrorBody(body);\n const hint = registryApiHintForCode(p?.code) ?? (httpStatus === 401 || httpStatus === 403 ? GENERIC_HINT : undefined);\n const detail = p?.error ? ` ${p.error}` : \"\";\n return {\n message: `Failed to download ${packageLabel} (${httpStatus}).${detail}`.trim(),\n hint,\n };\n}\n\n/** CLIError payload when POST /registry/updates fails (includes manifest errors). */\nexport function formatComponentUpdatesFailure(httpStatus: number, body: string): {\n message: string;\n hint?: string;\n} {\n const p = parseRegistryApiErrorBody(body);\n const hint =\n registryApiHintForCode(p?.code) ?? (httpStatus >= 500 ? OPERATOR_SERVER_HINT : GENERIC_HINT);\n const detail = p?.error ? `: ${p.error}` : \"\";\n return {\n message: `Failed to check for updates (${httpStatus})${detail}`,\n hint,\n };\n}\n","// ─── Registry Service ────────────────────────────────────────────────────────\n\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport {\n formatComponentUpdatesFailure,\n formatManifestApiFailure,\n parseRegistryApiErrorBody,\n} from \"../constants/registry-api-errors.js\";\nimport { authHeader } from \"./auth.js\";\nimport { readComponentPackageManifest } from \"../utils/filesystem.js\";\nimport { CLIError, throwIfRateLimited } from \"../utils/errors.js\";\nimport type {\n ComponentUpdate,\n ComponentPackageManifest,\n} from \"../types.js\";\nimport { parseAndValidateRegistryManifest } from \"../validation/registryManifest.js\";\n\nexport type ComponentRegistrySource = \"api\" | \"local\" | \"none\";\n\n/**\n * Fetch the component registry manifest from the API.\n *\n * The API reads the \"iui\" field from the latest published\n * @inventive-ui/components package.json on GitHub Packages.\n *\n * Uses API as source of truth, with local iui-manifest.json fallback when the\n * API is unreachable.\n */\nexport async function fetchComponentRegistry(\n token?: string,\n): Promise<{\n registry: ComponentPackageManifest | null;\n source: ComponentRegistrySource;\n /** Why the API did not return a manifest (aligned with API `{ error, code }` when JSON). */\n apiFailure?: string;\n /** Structured API error when manifest request failed with a JSON body. */\n apiError?: { httpStatus: number; code?: string; message?: string };\n}> {\n // Local fallback for offline/unavailable API scenarios.\n const local = readComponentPackageManifest();\n\n // Try remote API first (source of truth)\n const url = `${API_BASE_URL}/registry/components/manifest`;\n try {\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (token) Object.assign(headers, authHeader(token));\n\n const res = await fetch(url, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers,\n });\n\n if (res.ok) {\n const raw = await res.json();\n const registry = parseAndValidateRegistryManifest(raw, \"API\");\n return { registry, source: \"api\" };\n }\n\n const body = await res.text().catch(() => \"\");\n const apiFailure = formatManifestApiFailure(res.status, body);\n const parsed = parseRegistryApiErrorBody(body);\n const apiError =\n parsed?.error !== undefined || parsed?.code !== undefined\n ? {\n httpStatus: res.status,\n code: parsed.code,\n message: parsed.error ?? \"\",\n }\n : undefined;\n if (local) {\n return { registry: local, source: \"local\", apiFailure, apiError };\n }\n return { registry: null, source: \"none\", apiFailure, apiError };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (local) {\n return {\n registry: local,\n source: \"local\",\n apiFailure: `${msg} (${url})`,\n };\n }\n return {\n registry: null,\n source: \"none\",\n apiFailure: `${msg} (${url})`,\n };\n }\n}\n\nexport async function fetchComponentUpdates(\n token: string,\n projectId: string,\n installed: Record<string, string>,\n): Promise<ComponentUpdate[]> {\n const res = await fetch(`${API_BASE_URL}/registry/updates`, {\n method: \"POST\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { \"Content-Type\": \"application/json\", ...authHeader(token) },\n body: JSON.stringify({ project_id: projectId, components: installed }),\n });\n throwIfRateLimited(res, \"checking for component updates\");\n if (!res.ok) {\n const bodyText = await res.text().catch(() => \"\");\n const { message, hint } = formatComponentUpdatesFailure(res.status, bodyText);\n throw new CLIError(message, hint);\n }\n return (await res.json()) as ComponentUpdate[];\n}\n\nexport async function pingRegistry(): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE_URL}/health`, {\n signal: AbortSignal.timeout(5_000),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Fetch the latest published version for an @inventive-ui package short name\n * (e.g. \"components\", \"icons-lucide\", \"cli\") via the authenticated npm proxy.\n */\nexport async function fetchLatestScopedPackageVersion(\n token: string,\n shortName: string,\n): Promise<string | null> {\n const scopedName = `@inventive-ui/${shortName}`;\n const res = await fetch(`${API_BASE_URL}/registry/npm/${encodeURIComponent(scopedName)}`, {\n method: \"GET\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: { Accept: \"application/json\", ...authHeader(token) },\n });\n\n throwIfRateLimited(res, `checking latest version for ${shortName}`);\n if (!res.ok) return null;\n\n try {\n const body = (await res.json()) as {\n \"dist-tags\"?: { latest?: string };\n version?: string;\n };\n return body[\"dist-tags\"]?.latest ?? body.version ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function fetchLatestCliVersion(token?: string): Promise<string | null> {\n try {\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (token) Object.assign(headers, authHeader(token));\n const cliPackage = \"inventive-ui\";\n const res = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(cliPackage)}`,\n {\n method: \"GET\",\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers,\n },\n );\n if (!res.ok) return null;\n const body = (await res.json()) as {\n \"dist-tags\"?: { latest?: string };\n version?: string;\n };\n return body[\"dist-tags\"]?.latest ?? body.version ?? null;\n } catch {\n return null;\n }\n}\n","// ─── Framework Installer Service ─────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport {\n isPackageInDeps,\n isPackageInDirectDeps,\n detectPackageManager,\n installCmd,\n installDevCmd,\n getInstalledPackageVersion,\n runSyncInstall,\n cleanupLegacyFrameworkMeta,\n detectReactVersion,\n detectReactDomVersion,\n detectViteVersion,\n type ReactCheckResult,\n type ReactDomCheckResult,\n type ViteCheckResult,\n} from \"../utils/filesystem.js\";\nimport { markFrameworkInstalled } from \"./project.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport {\n REACT_SAFE_VERSION,\n REQUIRED_REACT_MAJOR,\n VITE_SAFE_VERSION,\n REQUIRED_VITE_MAJOR,\n REQUIRED_VITE_PLUGIN_REACT_MAJOR,\n VITE_PLUGIN_REACT_SAFE_VERSION,\n NODE_TYPES_SAFE_VERSION,\n} from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { confirm, promptFrameworkChoice } from \"../utils/prompts.js\";\nimport { CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { installDevPackages, installPackages } from \"../utils/security/process.js\";\nimport { isMonorepoInstallContext } from \"../utils/workspace.js\";\nimport { prepareWorkspaceForDependencyInstall } from \"../utils/filesystem.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\nimport {\n getDirectDeclaredVersionFloor,\n syncDeclaredDependencyVersion,\n} from \"../utils/declared-deps.js\";\n\nexport { cleanupTempFile, downloadPackageTarball } from \"./registry-download.js\";\n// re-export for installer backward compatibility\n\nexport interface FrameworkInstallOptions {\n token: string;\n projectId: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport type FrameworkChoice = \"react\" | \"vite\";\n\nexport interface EnsureFrameworkDepsOptions {\n preferredFramework?: FrameworkChoice;\n autoApprove?: boolean;\n /** On fresh init, ask React vs Vite even when React is already in package.json. */\n alwaysPrompt?: boolean;\n}\n\nexport interface EnsureFrameworkDepsResult {\n framework: FrameworkChoice;\n reactVersion: string | null;\n reactDomVersion: string | null;\n viteVersion: string | null;\n}\n\nexport interface FrameworkInstallStatus {\n installed: boolean;\n version: string | null;\n declaredVersion: string | null;\n source: \"node_modules\" | \"yarn-pnp\" | \"declared\" | \"missing\";\n}\n\nconst FRAMEWORK_PACKAGE = \"@inventive-ui/framework\";\n\nfunction hasYarnPnP(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, \".pnp.cjs\")) ||\n fs.existsSync(path.join(cwd, \".pnp.js\"))\n );\n}\n\n/**\n * Baseline for update checks in npm/yarn/pnpm workspaces: compare registry\n * against this app's declared semver floor, not a sibling's hoisted install.\n */\nexport function getFrameworkUpdateBaselineVersion(\n cwd: string = process.cwd(),\n): string | null {\n return (\n getDirectDeclaredVersionFloor(FRAMEWORK_PACKAGE, cwd)\n ?? getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd)\n );\n}\n\nexport function getFrameworkInstallStatus(\n cwd: string = process.cwd(),\n): FrameworkInstallStatus {\n cleanupLegacyFrameworkMeta(cwd);\n\n const installedVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n const declaredInPkg =\n isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd) ?? isPackageInDeps(FRAMEWORK_PACKAGE, cwd);\n if (installedVersion) {\n return {\n installed: true,\n version: installedVersion,\n declaredVersion: declaredInPkg ?? installedVersion,\n source: \"node_modules\",\n };\n }\n\n const declaredVersion = isPackageInDeps(FRAMEWORK_PACKAGE, cwd);\n if (declaredVersion && hasYarnPnP(cwd)) {\n return {\n installed: true,\n version: declaredVersion,\n declaredVersion,\n source: \"yarn-pnp\",\n };\n }\n\n if (declaredVersion) {\n return {\n installed: false,\n version: null,\n declaredVersion,\n source: \"declared\",\n };\n }\n\n return {\n installed: false,\n version: null,\n declaredVersion: null,\n source: \"missing\",\n };\n}\n\nexport async function installFramework(opts: FrameworkInstallOptions): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n const source = normalizeInstallSource(opts.source);\n const forceLatest = opts.forceLatest === true;\n const status = getFrameworkInstallStatus(cwd);\n\n const declaredHere = isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd);\n if (declaredHere && status.installed && !forceLatest) {\n const synced = syncDeclaredDependencyVersion(FRAMEWORK_PACKAGE, cwd);\n const suffix = status.version ? ` ${ui.dim(`v${status.version}`)}` : \"\";\n ui.info(`Framework already installed${suffix}.`);\n if (synced && status.version) {\n ui.ok(`Synced package.json to ${ui.dim(`^${status.version}`)}`);\n }\n cleanupLegacyFrameworkMeta(cwd);\n await notifyIfUpdateAvailable(opts.token, \"framework\", status.version, \"Inventive UI Framework\");\n return;\n }\n\n const spinner = ora({\n text: forceLatest ? \"Updating Inventive UI Framework…\" : \"Installing Inventive UI Framework…\",\n prefixText: \" \",\n }).start();\n\n try {\n let installedVersion = \"0.0.0\";\n const pm = detectPackageManager(cwd);\n let installSucceeded = false;\n let installError: unknown = null;\n\n try {\n const result = await installPackageWithFallback(\n { packageShortName: \"framework\", npmName: FRAMEWORK_PACKAGE },\n {\n token: opts.token,\n source,\n cwd,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipIfInstalled: !forceLatest,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n installedVersion = result.version;\n installSucceeded = true;\n } catch (err) {\n installError = err;\n spinner.text = \"Install failed — checking local dependencies…\";\n }\n\n if (!installSucceeded) {\n const alreadyInDeps = isPackageInDirectDeps(FRAMEWORK_PACKAGE, cwd);\n if (alreadyInDeps) {\n try {\n runSyncInstall(pm, cwd);\n const nowInstalled = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n if (nowInstalled) {\n installedVersion = nowInstalled;\n installSucceeded = true;\n spinner.succeed(\n `Framework ${ui.dim(`v${installedVersion}`)} found in dependencies and installed`,\n );\n } else if (hasYarnPnP(cwd)) {\n installedVersion = alreadyInDeps;\n installSucceeded = true;\n spinner.succeed(\n `Framework ${ui.dim(`v${installedVersion}`)} resolved via Yarn PnP`,\n );\n }\n } catch {\n // Fall through to error below.\n }\n } else {\n spinner.fail(\"Framework installation failed\");\n if (installError instanceof CLIError) throw installError;\n throw new CLIError(\n `Could not install ${FRAMEWORK_PACKAGE}.`,\n formatExecSyncError(installError) ??\n \"Ensure you are logged in (iui login) and registry auth is configured.\",\n );\n }\n }\n\n if (!installSucceeded) {\n spinner.fail(\"Framework installation failed\");\n throw new CLIError(\n `Found ${FRAMEWORK_PACKAGE} in package.json, but it is not installed in the current environment.`,\n \"Run your package manager install command (npm install / pnpm install / yarn install) and retry.\",\n );\n }\n\n if (installSucceeded && !spinner.isSpinning) {\n // Already showed succeed message in fallback 3\n } else {\n spinner.succeed(`Framework v${installedVersion} installed`);\n }\n\n if (syncDeclaredDependencyVersion(FRAMEWORK_PACKAGE, cwd)) {\n ui.ok(`Synced package.json to ${ui.dim(`^${installedVersion}`)}`);\n }\n\n // 4. Remove legacy framework metadata file if present.\n cleanupLegacyFrameworkMeta(cwd);\n\n // 5. Notify backend (non-fatal)\n const synced = await markFrameworkInstalled(opts.token, opts.projectId);\n if (!synced) {\n ui.warn(\"Framework installed locally, but project status could not be synced to the API.\");\n ui.hint(\"Run iui doctor after network recovery to verify project state.\");\n }\n } catch (error) {\n if (error instanceof CLIError) throw error;\n spinner.fail(\"Framework installation failed\");\n throw error;\n }\n}\n\nexport function checkFrameworkInstalled(cwd?: string): boolean {\n return getFrameworkInstallStatus(cwd).installed;\n}\n\n// ── React version pre-check ─────────────────────────────────────────────────\n\n/**\n * Check whether React 19.x is installed in the consumer project.\n * Returns the detection result for callers that only need the status.\n */\nexport function getReactStatus(cwd?: string): ReactCheckResult {\n return detectReactVersion(cwd);\n}\n\n/**\n * Check whether react-dom 19.x is installed in the consumer project.\n */\nexport function getReactDomStatus(cwd?: string): ReactDomCheckResult {\n return detectReactDomVersion(cwd);\n}\n\n// ── Vite version pre-check ──────────────────────────────────────────────────\n\n/**\n * Check whether Vite 6.x or newer is installed in the consumer project.\n * Returns the detection result for callers that only need the status.\n */\nexport function getViteStatus(cwd?: string): ViteCheckResult {\n return detectViteVersion(cwd);\n}\n\n// ── Unified framework dependency pre-check ──────────────────────────────────\n\n/**\n * Detect whether React 19.x or Vite 6+ is present.\n *\n * Logic:\n * - If at least one is present and correct → pass (user's chosen framework).\n * - If one is present but wrong version → prompt to update that one.\n * - If neither is present → ask the user which framework to use, then install it.\n */\nexport async function ensureFrameworkDeps(\n cwd: string = process.cwd(),\n opts: EnsureFrameworkDepsOptions = {},\n): Promise<EnsureFrameworkDepsResult> {\n const pm = detectPackageManager(cwd);\n const autoApprove = opts.autoApprove === true;\n\n const preferred = normalizeFrameworkChoice(opts.preferredFramework);\n if (opts.preferredFramework && !preferred) {\n throw new CLIError('Invalid framework. Use \"react\" or \"vite\".');\n }\n\n let react = detectReactVersion(cwd);\n let reactDom = detectReactDomVersion(cwd);\n let vite = detectViteVersion(cwd);\n\n let framework: FrameworkChoice;\n if (preferred) {\n framework = preferred;\n } else if (opts.alwaysPrompt === true) {\n ui.hint(\"Choose the setup preset for this package (configs and tooling are per-app).\");\n ui.newline();\n framework = await promptFrameworkChoice();\n } else if (hasViteConfig(cwd) || vite.status !== \"not-installed\") {\n framework = \"vite\";\n } else if (react.status !== \"not-installed\" || reactDom.status !== \"not-installed\") {\n framework = \"react\";\n } else {\n ui.warn(\"No supported frontend framework detected in this project.\");\n ui.hint(\"Choose a setup preset to continue with automated configuration.\");\n ui.newline();\n framework = await promptFrameworkChoice();\n }\n\n await ensureReactRuntime(pm, cwd, autoApprove, react, reactDom);\n react = detectReactVersion(cwd);\n reactDom = detectReactDomVersion(cwd);\n\n if (framework === \"vite\") {\n await ensureViteRuntime(pm, cwd, autoApprove, vite);\n vite = detectViteVersion(cwd);\n }\n\n if (react.status !== \"ok\" || reactDom.status !== \"ok\") {\n throw new CLIError(\n `React ${REQUIRED_REACT_MAJOR}.x and react-dom ${REQUIRED_REACT_MAJOR}.x are required.`,\n \"Install compatible React packages and rerun the command.\",\n );\n }\n\n if (framework === \"vite\" && vite.status !== \"ok\") {\n throw new CLIError(\n `Vite ${REQUIRED_VITE_MAJOR}.x or newer is required for the selected framework preset.`,\n \"Install compatible Vite packages and rerun the command.\",\n );\n }\n\n return {\n framework,\n reactVersion: react.version,\n reactDomVersion: reactDom.version,\n viteVersion: vite.status === \"ok\" ? vite.version : null,\n };\n}\n\n// ── Internal helpers ────────────────────────────────────────────────────────\n\ntype PM = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nfunction normalizeInstallSource(source?: \"api\" | \"registry\"): \"api\" | \"registry\" {\n return source === \"registry\" ? \"registry\" : \"api\";\n}\n\nfunction normalizeFrameworkChoice(choice?: string): FrameworkChoice | null {\n if (!choice) return null;\n const c = String(choice).trim().toLowerCase();\n if (c === \"react\" || c === \"vite\") return c;\n return null;\n}\n\nfunction hasViteConfig(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, \"vite.config.ts\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.mts\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.js\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.mjs\")) ||\n fs.existsSync(path.join(cwd, \"vite.config.cjs\"))\n );\n}\n\nasync function ensureReactRuntime(\n pm: PM,\n cwd: string,\n autoApprove: boolean,\n react: ReactCheckResult,\n reactDom: ReactDomCheckResult,\n): Promise<void> {\n if (react.status === \"ok\" && reactDom.status === \"ok\") {\n ui.ok(`React ${react.version} detected`);\n ui.ok(`react-dom ${reactDom.version} detected`);\n return;\n }\n\n const pkgs = `react@${REACT_SAFE_VERSION} react-dom@${REACT_SAFE_VERSION}`;\n const command = installCmd(pm, pkgs);\n const currentVersion =\n react.status !== \"not-installed\"\n ? react.version\n : reactDom.status !== \"not-installed\"\n ? reactDom.version\n : \"not installed\";\n\n ui.warn(`React runtime is incomplete or incompatible (${currentVersion}).`);\n ui.hint(`Inventive UI requires React ${REQUIRED_REACT_MAJOR}.x and react-dom ${REQUIRED_REACT_MAJOR}.x`);\n ui.newline();\n\n const shouldUpdate = autoApprove\n ? true\n : await confirm(\n `Install / update react@${REACT_SAFE_VERSION} and react-dom@${REACT_SAFE_VERSION}?`,\n );\n\n if (!shouldUpdate) {\n throw new CLIError(`React ${REQUIRED_REACT_MAJOR}.x is required.`, command);\n }\n\n const spinner = ora({ text: \"Updating React…\", prefixText: \" \" }).start();\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installPackages(pm, pkgs, cwd);\n spinner.succeed(`React updated to ${REQUIRED_REACT_MAJOR}.x`);\n } catch (err) {\n spinner.fail(\"Failed to update React\");\n throw new CLIError(\n \"Could not update React automatically.\",\n formatExecSyncError(err) ?? command,\n );\n }\n}\n\nasync function ensureViteRuntime(\n pm: PM,\n cwd: string,\n autoApprove: boolean,\n vite: ViteCheckResult,\n): Promise<void> {\n const pluginReactVersion = detectPluginReactVersion(cwd);\n const hasPluginReact = pluginReactVersion !== null;\n const pluginReactMajor =\n pluginReactVersion !== null ? getMajorFromVersion(pluginReactVersion) : null;\n const pluginReactOk =\n pluginReactMajor !== null && pluginReactMajor >= REQUIRED_VITE_PLUGIN_REACT_MAJOR;\n const needsVite = vite.status !== \"ok\";\n const needsPluginReact = !pluginReactOk;\n const needsNodeTypes =\n !isPackageInDeps(\"@types/node\", cwd) && !getInstalledPackageVersion(\"@types/node\", cwd);\n\n if (!needsVite && !needsPluginReact && !needsNodeTypes) {\n ui.ok(`Vite ${vite.version} detected`);\n ui.ok(`@vitejs/plugin-react ${pluginReactVersion} detected`);\n return;\n }\n\n const pkgs = [\n needsVite ? `vite@${VITE_SAFE_VERSION}` : null,\n needsPluginReact ? `@vitejs/plugin-react@${VITE_PLUGIN_REACT_SAFE_VERSION}` : null,\n needsNodeTypes ? `@types/node@${NODE_TYPES_SAFE_VERSION}` : null,\n ]\n .filter(Boolean)\n .join(\" \");\n const command = installDevCmd(pm, pkgs);\n\n if (needsVite) {\n const currentVersion = vite.status === \"not-installed\" ? \"not installed\" : vite.version;\n ui.warn(`Vite is missing or incompatible (${currentVersion}).`);\n ui.hint(`Inventive UI Vite preset requires Vite ${REQUIRED_VITE_MAJOR}.x or newer`);\n }\n if (needsPluginReact) {\n if (!hasPluginReact) {\n ui.warn(\"@vitejs/plugin-react is missing.\");\n } else {\n ui.warn(\n `@vitejs/plugin-react ${pluginReactVersion} is incompatible with Vite ${REQUIRED_VITE_MAJOR}+.`,\n );\n ui.hint(\n `Inventive UI Vite preset requires @vitejs/plugin-react ${REQUIRED_VITE_PLUGIN_REACT_MAJOR}.x or newer`,\n );\n }\n }\n ui.newline();\n\n const shouldUpdate = autoApprove\n ? true\n : await confirm(`Install / update required Vite tooling (${pkgs})?`);\n\n if (!shouldUpdate) {\n throw new CLIError(`Vite ${REQUIRED_VITE_MAJOR}.x setup is required.`, command);\n }\n\n const spinner = ora({ text: \"Installing Vite tooling…\", prefixText: \" \" }).start();\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installDevPackages(pm, pkgs, cwd);\n spinner.succeed(\"Vite tooling is ready\");\n } catch (err) {\n spinner.fail(\"Failed to install Vite tooling\");\n throw new CLIError(\n \"Could not install Vite tooling automatically.\",\n formatExecSyncError(err) ?? command,\n );\n }\n}\n\nfunction detectPluginReactVersion(cwd: string): string | null {\n const installed = getInstalledPackageVersion(\"@vitejs/plugin-react\", cwd);\n if (installed) return installed;\n return isPackageInDeps(\"@vitejs/plugin-react\", cwd) ?? null;\n}\n\nfunction getMajorFromVersion(version: string): number | null {\n const cleaned = version.replace(/^[\\^~>=<\\s]+/, \"\").trim();\n const match = cleaned.match(/^(\\d+)/);\n if (!match) return null;\n const major = parseInt(match[1], 10);\n return Number.isNaN(major) ? null : major;\n}\n","// ─── Download @inventive-ui/* tarballs via API proxy ──────────────────────────\n\nimport { createWriteStream, mkdtempSync, unlinkSync, rmSync } from \"node:fs\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Readable, Transform } from \"node:stream\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { API_BASE_URL, API_REQUEST_TIMEOUT_MS } from \"../constants.js\";\nimport { formatPackageDownloadFailure } from \"../constants/registry-api-errors.js\";\nimport { authHeader } from \"./auth.js\";\nimport { CLIError, getNodeErrorCode, throwIfRateLimited } from \"../utils/errors.js\";\nimport { sanitizePackageVersionHeader } from \"../utils/security/identifiers.js\";\n\nconst MAX_TARBALL_BYTES = 250 * 1024 * 1024;\n\n/**\n * Download a short package name (e.g. \"framework\", \"components\", \"icons-lucide\")\n * from GET /registry/npm/download.\n */\nexport async function downloadPackageTarball(\n token: string,\n packageShortName: string,\n): Promise<{ path: string; version: string }> {\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(packageShortName)) {\n throw new CLIError(`Invalid package name: ${packageShortName}`);\n }\n\n const url = `${API_BASE_URL}/registry/npm/download?package=${encodeURIComponent(packageShortName)}`;\n let res: Response;\n try {\n res = await fetch(url, {\n signal: AbortSignal.timeout(API_REQUEST_TIMEOUT_MS),\n headers: authHeader(token),\n });\n } catch (err) {\n const code = getNodeErrorCode(err);\n const msg = err instanceof Error ? err.message : String(err);\n throw new CLIError(\n `Failed to download ${packageShortName} (network).`,\n code ? `${code}: ${msg}` : msg,\n );\n }\n\n throwIfRateLimited(res, `downloading ${packageShortName}`);\n\n if (!res.ok || !res.body) {\n const bodyText = await res.text().catch(() => \"\");\n const { message, hint } = formatPackageDownloadFailure(\n res.status,\n bodyText,\n packageShortName,\n );\n throw new CLIError(message, hint);\n }\n\n const version = sanitizePackageVersionHeader(res.headers.get(\"X-Package-Version\"));\n if (!version) {\n throw new CLIError(`Server did not return a version for ${packageShortName}.`);\n }\n\n const contentLength = res.headers.get(\"content-length\");\n if (contentLength) {\n const len = Number(contentLength);\n if (Number.isFinite(len) && len > MAX_TARBALL_BYTES) {\n throw new CLIError(\n `Download of ${packageShortName} exceeds size limit (${MAX_TARBALL_BYTES} bytes).`,\n );\n }\n }\n\n const tmpDir = mkdtempSync(path.join(os.tmpdir(), \"iui-dl-\"));\n const tempPath = path.join(tmpDir, `${packageShortName}.tgz`);\n const fileStream = createWriteStream(tempPath, { flags: \"wx\" });\n let bytesWritten = 0;\n\n const limiter = new Transform({\n transform(chunk, _encoding, callback) {\n bytesWritten += chunk.length;\n if (bytesWritten > MAX_TARBALL_BYTES) {\n callback(\n new CLIError(\n `Download of ${packageShortName} exceeded size limit (${MAX_TARBALL_BYTES} bytes).`,\n ),\n );\n return;\n }\n callback(null, chunk);\n },\n });\n\n try {\n await pipeline(\n Readable.fromWeb(res.body as import(\"node:stream/web\").ReadableStream),\n limiter,\n fileStream,\n );\n } catch (err) {\n cleanupTempFile(tempPath);\n throw err;\n }\n\n return { path: tempPath, version };\n}\n\nexport function cleanupTempFile(filePath: string): void {\n const parent = path.dirname(filePath);\n try {\n unlinkSync(filePath);\n } catch {\n /* ignore */\n }\n if (parent.includes(\"iui-dl-\")) {\n try {\n rmSync(parent, { recursive: true, force: true });\n } catch {\n /* ignore */\n }\n }\n}\n","// ─── Keep package.json declared ranges aligned with installed versions ─────────\n//\n// npm resolves semver ranges into node_modules without rewriting package.json.\n// After install/update/doctor, bump direct @inventive-ui deps to ^<installed>\n// when the installed release is ahead of the declared range floor.\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { NPM_SCOPE } from \"../constants.js\";\nimport { atomicWriteJson } from \"./atomic.js\";\nimport { getInstalledPackageVersion } from \"./filesystem.js\";\nimport { isPackageInDirectDeps } from \"./workspace.js\";\nimport { cleanVersionString, isVersionEqual, isVersionGreater } from \"./version.js\";\n\ntype DepField = \"dependencies\" | \"devDependencies\";\n\n/**\n * True when package.json should be normalized to `^installed`.\n */\nexport function shouldSyncDeclaredDependency(\n declared: string,\n installed: string,\n): boolean {\n const desired = `^${installed}`;\n if (declared === desired) return false;\n if (declared.startsWith(\"file:\")) return true;\n\n const floor = cleanVersionString(declared);\n if (!floor) return false;\n\n if (isVersionGreater(installed, floor)) return true;\n\n // Normalize exact pins and legacy ranges to caret form matching installed.\n return isVersionEqual(installed, floor) && declared !== desired;\n}\n\nfunction readDepField(\n pkg: Record<string, Record<string, string>>,\n packageName: string,\n): { field: DepField; declared: string } | null {\n const declared =\n pkg.dependencies?.[packageName] ?? pkg.devDependencies?.[packageName];\n if (!declared) return null;\n const field: DepField = pkg.dependencies?.[packageName]\n ? \"dependencies\"\n : \"devDependencies\";\n return { field, declared };\n}\n\n/**\n * When `node_modules` resolves ahead of the declared semver floor, write\n * `^<installed>` into this package's package.json.\n */\nexport function syncDeclaredDependencyVersion(\n packageName: string,\n cwd: string = process.cwd(),\n): boolean {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return false;\n\n const installed = getInstalledPackageVersion(packageName, cwd);\n if (!installed) return false;\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const dep = readDepField(pkg, packageName);\n if (!dep) return false;\n\n if (!shouldSyncDeclaredDependency(dep.declared, installed)) return false;\n\n const desired = `^${installed}`;\n pkg[dep.field] ??= {};\n pkg[dep.field]![packageName] = desired;\n atomicWriteJson(pkgPath, pkg);\n return true;\n}\n\n/** Semver floor from this package's own package.json (ignores hoisted node_modules). */\nexport function getDirectDeclaredVersionFloor(\n packageName: string,\n cwd: string = process.cwd(),\n): string | null {\n const declared = isPackageInDirectDeps(packageName, cwd);\n if (!declared) return null;\n const floor = cleanVersionString(declared);\n return floor || null;\n}\n\n/** True when hoisted node_modules is ahead of this app's declared semver range. */\nexport function needsDeclaredDependencySync(\n packageName: string,\n cwd: string = process.cwd(),\n): boolean {\n const declared = isPackageInDirectDeps(packageName, cwd);\n if (!declared) return false;\n const installed = getInstalledPackageVersion(packageName, cwd);\n if (!installed) return false;\n return shouldSyncDeclaredDependency(declared, installed);\n}\n\n/** Sync all direct @inventive-ui/* dependencies declared in this workspace app. */\nexport function syncInventiveUiDeclaredDependencies(\n cwd: string = process.cwd(),\n): string[] {\n const pkgPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(pkgPath)) return [];\n\n const pkg = fs.readJsonSync(pkgPath) as Record<string, Record<string, string>>;\n const names = new Set<string>();\n for (const field of [\"dependencies\", \"devDependencies\"] as const) {\n for (const name of Object.keys(pkg[field] ?? {})) {\n if (name.startsWith(`${NPM_SCOPE}/`)) names.add(name);\n }\n }\n\n const synced: string[] = [];\n for (const name of [...names].sort()) {\n if (syncDeclaredDependencyVersion(name, cwd)) synced.push(name);\n }\n return synced;\n}\n","// ─── Unified package install (API tarball ↔ registry) ─────────────────────\n\nimport {\n detectPackageManager,\n fixTarballDep,\n getInstalledPackageVersion,\n isPackageInDeps,\n isPackageInDirectDeps,\n prepareWorkspaceForDependencyInstall,\n runSyncInstall,\n runTarballInstall,\n} from \"../utils/filesystem.js\";\nimport {\n isMonorepoInstallContext,\n shouldUseWorkspaceRegistryInstall,\n} from \"../utils/workspace.js\";\nimport { downloadPackageTarball, cleanupTempFile } from \"./registry-download.js\";\nimport { fetchLatestScopedPackageVersion } from \"./registry.js\";\nimport { installPackages } from \"../utils/security/process.js\";\nimport { CLIError, formatExecSyncError } from \"../utils/errors.js\";\nimport { syncDeclaredDependencyVersion } from \"../utils/declared-deps.js\";\nimport { isVersionEqual, isVersionGreater } from \"../utils/version.js\";\n\nexport type InstallSource = \"api\" | \"registry\";\n\nexport interface PackageInstallTarget {\n /** API short name, e.g. \"framework\", \"components\", \"icons-lucide\" */\n packageShortName: string;\n /** Full npm name, e.g. \"@inventive-ui/framework\" */\n npmName: string;\n}\n\nexport interface PackageInstallOptions {\n token: string;\n source?: InstallSource;\n cwd?: string;\n /** Skip install when package already present at this version or any version */\n skipIfInstalled?: boolean;\n /**\n * Upgrade to the newest published version. Resolves the version from the\n * authenticated registry API and installs an explicit semver (not `@latest`).\n */\n forceLatest?: boolean;\n /** Install this exact published version (used by `iui update`). */\n targetVersion?: string;\n /** Caller already ran {@link prepareWorkspaceForDependencyInstall}. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport interface PackageInstallResult {\n version: string;\n method: \"api-tarball\" | \"registry\" | \"deps-sync\" | \"already-installed\";\n}\n\nfunction normalizeSource(source?: string): InstallSource {\n const raw = source ?? process.env.IUI_INSTALL_SOURCE ?? \"api\";\n return raw === \"registry\" ? \"registry\" : \"api\";\n}\n\nexport type InstallStepOrderOptions = {\n /** When true, allow authenticated API tarball fallback after registry (monorepos). */\n upgrade?: boolean;\n};\n\n/**\n * Install strategy for monorepos: registry-first with explicit semver, then API\n * tarball when upgrading (private-registry best practice for npm workspaces).\n */\nexport function resolveInstallStepOrder(\n cwd: string,\n source: InstallSource,\n options: InstallStepOrderOptions = {},\n): Array<\"registry\" | \"api\"> {\n if (shouldUseWorkspaceRegistryInstall(cwd)) {\n return options.upgrade ? [\"registry\", \"api\"] : [\"registry\"];\n }\n return source === \"api\" ? [\"api\", \"registry\"] : [\"registry\", \"api\"];\n}\n\nfunction buildRegistryInstallSpec(\n npmName: string,\n targetVersion: string | null,\n _forceLatest: boolean,\n): string {\n if (targetVersion) return `${npmName}@${targetVersion}`;\n // Bare names become \"*\" in workspace manifest writes; always pin a registry tag.\n return `${npmName}@latest`;\n}\n\nasync function resolveUpgradeTargetVersion(\n target: PackageInstallTarget,\n opts: PackageInstallOptions,\n): Promise<string | null> {\n if (opts.targetVersion) return opts.targetVersion;\n if (!opts.forceLatest) return null;\n return await fetchLatestScopedPackageVersion(opts.token, target.packageShortName);\n}\n\nfunction assertUpgradeSucceeded(\n target: PackageInstallTarget,\n existing: string | null,\n resolved: string,\n requestedVersion: string | null,\n): void {\n if (!existing || !requestedVersion) return;\n if (!isVersionEqual(resolved, existing)) return;\n if (!isVersionGreater(requestedVersion, existing)) return;\n\n throw new CLIError(\n `Could not upgrade ${target.npmName} to v${requestedVersion}.`,\n `Still at v${existing}. Check registry auth (iui login) and retry, or install manually with your package manager.`,\n );\n}\n\nexport async function installPackageWithFallback(\n target: PackageInstallTarget,\n opts: PackageInstallOptions,\n): Promise<PackageInstallResult> {\n const cwd = opts.cwd ?? process.cwd();\n const source = normalizeSource(opts.source);\n const pm = detectPackageManager(cwd);\n const forceLatest = opts.forceLatest === true;\n const upgradeRequested = forceLatest || Boolean(opts.targetVersion);\n const requestedVersion = await resolveUpgradeTargetVersion(target, opts);\n\n if (!opts.skipWorkspacePrepare) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n\n const declaredHere = isPackageInDirectDeps(target.npmName, cwd);\n const existing = getInstalledPackageVersion(target.npmName, cwd);\n // In monorepos, siblings may hoist into root node_modules — still add deps to this package.\n if (opts.skipIfInstalled && declaredHere && existing && !upgradeRequested) {\n syncDeclaredDependencyVersion(target.npmName, cwd);\n return { version: existing, method: \"already-installed\" };\n }\n\n if (\n upgradeRequested\n && requestedVersion\n && existing\n && !isVersionGreater(requestedVersion, existing)\n ) {\n syncDeclaredDependencyVersion(target.npmName, cwd);\n return { version: existing, method: \"already-installed\" };\n }\n\n let version = existing ?? \"0.0.0\";\n let installed = false;\n let installedVia: PackageInstallResult[\"method\"] = \"registry\";\n let lastInstallError: unknown = null;\n\n const tryRegistry = (): void => {\n const installSpec = buildRegistryInstallSpec(\n target.npmName,\n requestedVersion,\n forceLatest && !requestedVersion,\n );\n installPackages(pm, installSpec, cwd);\n const after = getInstalledPackageVersion(target.npmName, cwd) ?? version;\n if (upgradeRequested && existing && isVersionEqual(after, existing)) {\n version = after;\n installed = false;\n return;\n }\n version = after;\n installed = Boolean(version && version !== \"0.0.0\");\n if (installed) installedVia = \"registry\";\n };\n\n const tryApi = async (): Promise<void> => {\n const { path: tarball, version: v } = await downloadPackageTarball(\n opts.token,\n target.packageShortName,\n );\n version = v;\n runTarballInstall(pm, tarball, cwd);\n fixTarballDep(target.npmName, v, cwd);\n cleanupTempFile(tarball);\n if (isMonorepoInstallContext(cwd)) {\n runSyncInstall(pm, cwd);\n }\n const after = getInstalledPackageVersion(target.npmName, cwd) ?? v;\n version = after;\n installed = Boolean(version && version !== \"0.0.0\");\n if (installed) installedVia = \"api-tarball\";\n };\n\n const stepOrder = resolveInstallStepOrder(cwd, source, { upgrade: upgradeRequested });\n\n for (const step of stepOrder) {\n if (installed) break;\n try {\n if (step === \"api\") {\n await tryApi();\n } else {\n tryRegistry();\n }\n } catch (err) {\n lastInstallError = err;\n }\n }\n\n if (!installed) {\n // Never mask a failed upgrade with a lockfile-only sync — that leaves stale versions.\n if (!upgradeRequested) {\n const declared =\n isPackageInDirectDeps(target.npmName, cwd) ?? isPackageInDeps(target.npmName, cwd);\n if (declared) {\n try {\n runSyncInstall(pm, cwd);\n const synced = getInstalledPackageVersion(target.npmName, cwd);\n if (synced) {\n return { version: synced, method: \"deps-sync\" };\n }\n } catch (err) {\n lastInstallError = err;\n }\n }\n }\n throw new CLIError(\n upgradeRequested\n ? `Could not upgrade ${target.npmName}${requestedVersion ? ` to v${requestedVersion}` : \"\"}.`\n : `Failed to install ${target.npmName}.`,\n formatExecSyncError(lastInstallError) ??\n \"Ensure you are logged in (iui login) and registry auth is configured.\",\n );\n }\n\n assertUpgradeSucceeded(target, existing, version, requestedVersion);\n\n syncDeclaredDependencyVersion(target.npmName, cwd);\n\n return {\n version,\n method: installedVia,\n };\n}\n","// ─── Behind-latest version notifier ──────────────────────────────────────────\r\n//\r\n// Best-effort, reproducible-friendly update nudges. We never auto-upgrade an\r\n// already-installed package (that would break lockfile reproducibility for\r\n// teams) — instead we surface when a newer version exists and point at\r\n// `iui update`. All checks are network best-effort and silent on failure.\r\n\r\nimport { fetchLatestScopedPackageVersion } from \"./registry.js\";\r\nimport { isVersionGreater } from \"../utils/version.js\";\r\nimport * as ui from \"./../utils/ui.js\";\r\n\r\n/**\r\n * Resolve the latest published version for an @inventive-ui short name.\r\n * Returns null on any failure (offline, auth, rate limit) so callers stay quiet.\r\n */\r\nexport async function getLatestVersionSafe(\r\n token: string | undefined,\r\n shortName: string,\r\n): Promise<string | null> {\r\n if (!token) return null;\r\n try {\r\n return await fetchLatestScopedPackageVersion(token, shortName);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Print a warning + `iui update` hint when `currentVersion` is behind the\r\n * latest published version. Best-effort and silent on any failure.\r\n *\r\n * @returns the latest version when known, otherwise null.\r\n */\r\nexport async function notifyIfUpdateAvailable(\r\n token: string | undefined,\r\n shortName: string,\r\n currentVersion: string | null | undefined,\r\n label: string,\r\n): Promise<string | null> {\r\n if (!currentVersion) return null;\r\n const latest = await getLatestVersionSafe(token, shortName);\r\n if (latest && isVersionGreater(latest, currentVersion)) {\r\n ui.warn(`${label} v${currentVersion} is behind the latest v${latest}.`);\r\n ui.hint(\"Run iui update to move to the latest version.\");\r\n return latest;\r\n }\r\n return latest;\r\n}\r\n","// ─── Component Package Service ───────────────────────────────────────────────\n\nimport ora from \"ora\";\nimport {\n getInstalledPackageVersion,\n isPackageInDirectDeps,\n} from \"../utils/filesystem.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport { COMPONENTS_PACKAGE } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { syncDeclaredDependencyVersion } from \"../utils/declared-deps.js\";\nimport { ensureSlotRegistry } from \"./slot-registry.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\n\nexport interface InstallOptions {\n token: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\nexport async function installComponentsPackage(\n opts: InstallOptions,\n): Promise<{ previousVersion: string | null; version: string }> {\n const cwd = opts.cwd ?? process.cwd();\n const source = opts.source === \"registry\" ? \"registry\" : \"api\";\n const forceLatest = opts.forceLatest === true;\n const spinner = ora({\n text: forceLatest ? \"Updating components package…\" : \"Installing components package…\",\n prefixText: \" \",\n }).start();\n\n const declaredHere = isPackageInDirectDeps(COMPONENTS_PACKAGE, cwd);\n const previousVersion = declaredHere\n ? getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd)\n : null;\n\n let pkgVersion = previousVersion ?? \"0.0.0\";\n\n if (declaredHere && previousVersion && !forceLatest) {\n const synced = syncDeclaredDependencyVersion(COMPONENTS_PACKAGE, cwd);\n spinner.succeed(\n `${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)} already installed`,\n );\n if (synced) {\n ui.ok(`Synced package.json to ${ui.dim(`^${pkgVersion}`)}`);\n }\n await notifyIfUpdateAvailable(opts.token, \"components\", pkgVersion, COMPONENTS_PACKAGE);\n } else {\n try {\n const result = await installPackageWithFallback(\n {\n packageShortName: \"components\",\n npmName: COMPONENTS_PACKAGE,\n },\n {\n token: opts.token,\n source,\n cwd,\n skipIfInstalled: !forceLatest,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n pkgVersion = result.version;\n if (\n forceLatest\n && previousVersion\n && result.method !== \"already-installed\"\n && pkgVersion === previousVersion\n ) {\n spinner.fail(\"Components package was not upgraded\");\n throw new CLIError(\n `Could not upgrade ${COMPONENTS_PACKAGE} beyond v${previousVersion}.`,\n \"Check registry auth (iui login) and retry, or install manually from the workspace root.\",\n );\n }\n spinner.succeed(\n forceLatest\n ? `${COMPONENTS_PACKAGE} ${ui.dim(`${previousVersion ? `v${previousVersion} → ` : \"\"}v${pkgVersion}`)}`\n : `${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)} installed`,\n );\n } catch (err) {\n spinner.fail(forceLatest ? \"Could not update components package\" : \"Could not install components package\");\n throw err;\n }\n }\n\n const result = await ensureSlotRegistry({\n cwd,\n quiet: true,\n repairInstall: true,\n mode: \"repair\",\n });\n if (result.status === \"skipped\") {\n ui.warn(\"Component slot registry was not generated.\");\n ui.hint(\n \"Run iui init in this package (or iui doctor). Hoisted node_modules are supported — a root-level install is not required.\",\n );\n } else {\n ui.ok(\n result.status === \"repaired\"\n ? `Component slots repaired for ${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)}`\n : `Component slots ready for ${COMPONENTS_PACKAGE} ${ui.dim(`v${pkgVersion}`)}`,\n );\n ui.hint('Import components from \"@inventive-ui/components\"; slots are available automatically.');\n }\n return { previousVersion, version: pkgVersion };\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n COMPONENTS_PACKAGE,\n IUI_DIR,\n ASSET_PACKAGES_MAP,\n} from \"../constants.js\";\nimport type {\n ComponentManifest,\n ComponentPackageManifest,\n PackageManifest,\n SlotManifest,\n} from \"../types.js\";\nimport {\n componentManifestPath,\n detectPackageManager,\n getInstalledPackageVersion,\n isInsideProject,\n isPackageInDeps,\n packageManifestPath,\n readComponentPackageManifest,\n runSyncInstall,\n slotManifestPath,\n writeAssetsConfig,\n writeComponentManifest,\n writePackageManifest,\n writeSlotManifest,\n ensureProjectConfig,\n projectHasViteTooling,\n ensureInventiveUiViteConfig,\n} from \"../utils/filesystem.js\";\nimport { atomicWriteJson, cleanupTempFiles, retry, sha256 } from \"../utils/atomic.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { withRegistryLock } from \"./registry-lock.js\";\nimport {\n validateGeneratedSlotImports,\n writeComponentSlotFiles,\n writeSlotHelperFile,\n} from \"./slots.js\";\nimport {\n validateGeneratedAssetBoundImports,\n writeAssetBoundFiles,\n} from \"./asset-bound.js\";\nimport { bootstrapRegisteredPackages } from \"./workspace-bootstrap.js\";\nimport { iuiCacheFile } from \"./iui-paths.js\";\nimport {\n findPackageJsonWithDep,\n resolveIuiProjectRoot,\n} from \"../utils/workspace.js\";\nimport * as ui from \"../utils/ui.js\";\n\nconst STATE_SCHEMA_VERSION = 1;\n\ntype LifecycleStatus = \"idle\" | \"running\" | \"complete\" | \"failed\";\ntype LifecyclePhase =\n | \"started\"\n | \"state-loaded\"\n | \"manifests-written\"\n | \"slot-files-written\"\n | \"integrity-verified\"\n | \"complete\";\n\ninterface RegistrationState {\n schemaVersion: number;\n status: LifecycleStatus;\n phase: LifecyclePhase;\n packageVersion: string | null;\n checksum: string | null;\n startedAt: string;\n updatedAt: string;\n completedAt?: string;\n attempts: number;\n lastError?: string;\n repairedIssues: string[];\n}\n\nexport interface SlotRegistryResult {\n status: \"skipped\" | \"valid\" | \"repaired\";\n packageVersion: string | null;\n repairedIssues: string[];\n}\n\nexport interface SlotRegistryOptions {\n cwd?: string;\n quiet?: boolean;\n repairInstall?: boolean;\n mode?: \"validate\" | \"repair\";\n}\n\nfunction statePath(cwd: string): string {\n return iuiCacheFile(cwd, \"slotState\");\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction checksumFor(components: ComponentManifest, slots: SlotManifest): string {\n return sha256(JSON.stringify({ components, slots }));\n}\n\nfunction backupCorruptFile(filePath: string): void {\n if (!fs.existsSync(filePath)) return;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n try {\n fs.moveSync(filePath, `${filePath}.corrupt-${stamp}`, { overwrite: false });\n } catch {\n /* best effort */\n }\n}\n\nfunction readJsonObject<T extends Record<string, unknown>>(\n filePath: string,\n fallback: T,\n issues: string[],\n label: string,\n): T {\n if (!fs.existsSync(filePath)) return fallback;\n try {\n const value = fs.readJsonSync(filePath) as unknown;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return value as T;\n }\n } catch {\n /* handled below */\n }\n backupCorruptFile(filePath);\n issues.push(`${label} was unreadable and has been rebuilt`);\n return fallback;\n}\n\nfunction readState(cwd: string, issues: string[]): RegistrationState | null {\n const filePath = statePath(cwd);\n if (!fs.existsSync(filePath)) return null;\n try {\n const raw = fs.readJsonSync(filePath) as Partial<RegistrationState>;\n if (raw.schemaVersion !== STATE_SCHEMA_VERSION) {\n issues.push(\"registration state schema was upgraded\");\n return null;\n }\n if (!raw.status || !raw.phase) {\n issues.push(\"registration state was incomplete\");\n return null;\n }\n return raw as RegistrationState;\n } catch {\n backupCorruptFile(filePath);\n issues.push(\"registration state was unreadable and has been rebuilt\");\n return null;\n }\n}\n\nfunction writeState(cwd: string, state: RegistrationState): void {\n atomicWriteJson(statePath(cwd), state);\n}\n\nfunction updateState(\n cwd: string,\n state: RegistrationState,\n phase: LifecyclePhase,\n patch: Partial<RegistrationState> = {},\n): RegistrationState {\n const next: RegistrationState = {\n ...state,\n ...patch,\n phase,\n updatedAt: now(),\n };\n writeState(cwd, next);\n return next;\n}\n\nfunction buildDesiredState(\n registry: ComponentPackageManifest,\n packageVersion: string,\n currentSlots: SlotManifest,\n packages: PackageManifest,\n): { components: ComponentManifest; slots: SlotManifest } {\n const components: ComponentManifest = {};\n const slots: SlotManifest = {};\n const timestamp = now();\n\n for (const item of registry.items) {\n components[item.name] = packageVersion;\n slots[item.name] = {\n component: item.name,\n slotType: \"component\",\n registeredAt: currentSlots[item.name]?.registeredAt ?? timestamp,\n version: packageVersion,\n };\n if (item.slots.length > 0) {\n slots[item.name].supportedSlots = [...item.slots].sort();\n }\n }\n\n for (const [packageId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) continue;\n const key = `asset:${packageId}`;\n slots[key] = {\n component: packageId,\n slotType: def.slotType,\n registeredAt: currentSlots[key]?.registeredAt ?? timestamp,\n version: meta.version,\n };\n }\n\n return { components, slots };\n}\n\nfunction hasManifestDrift(\n currentComponents: ComponentManifest,\n currentSlots: SlotManifest,\n desiredComponents: ComponentManifest,\n desiredSlots: SlotManifest,\n): boolean {\n return (\n JSON.stringify(currentComponents) !== JSON.stringify(desiredComponents) ||\n JSON.stringify(currentSlots) !== JSON.stringify(desiredSlots)\n );\n}\n\nexport function shouldSkipWritesFastPath(params: {\n mode: \"validate\" | \"repair\";\n previousState: RegistrationState | null;\n currentChecksum: string;\n currentPackageVersion: string;\n drift: boolean;\n integrityIssues: string[];\n}): boolean {\n const {\n mode,\n previousState,\n currentChecksum,\n currentPackageVersion,\n drift,\n integrityIssues,\n } = params;\n if (mode !== \"validate\") return false;\n if (!previousState) return false;\n if (previousState.status !== \"complete\") return false;\n if (previousState.checksum !== currentChecksum) return false;\n if (previousState.packageVersion !== currentPackageVersion) return false;\n if (drift) return false;\n if (integrityIssues.length > 0) return false;\n return true;\n}\n\nfunction ensureInstalledManifest(cwd: string, repairInstall: boolean): ComponentPackageManifest | null {\n let registry: ComponentPackageManifest | null = null;\n try {\n registry = readComponentPackageManifest(cwd);\n } catch (error) {\n if (!repairInstall) throw error;\n }\n if (registry) return registry;\n\n if (!repairInstall || !isPackageInDeps(COMPONENTS_PACKAGE, cwd)) {\n return null;\n }\n\n const pm = detectPackageManager(cwd);\n const installDir = findPackageJsonWithDep(COMPONENTS_PACKAGE, cwd)?.dir ?? resolveIuiProjectRoot(cwd);\n runSyncInstall(pm, installDir);\n registry = readComponentPackageManifest(cwd);\n return registry;\n}\n\nexport async function ensureSlotRegistry(\n options: SlotRegistryOptions = {},\n): Promise<SlotRegistryResult> {\n const cwd = options.cwd ?? process.cwd();\n const mode = options.mode ?? \"repair\";\n if (!isInsideProject(cwd)) {\n return { status: \"skipped\", packageVersion: null, repairedIssues: [] };\n }\n\n const iuiRoot = resolveIuiProjectRoot(cwd);\n\n return withRegistryLock(iuiRoot, async () => {\n const iuiPath = path.join(iuiRoot, IUI_DIR);\n const issues: string[] = [];\n cleanupTempFiles(iuiPath);\n\n const registry = ensureInstalledManifest(\n cwd,\n mode === \"repair\" && options.repairInstall === true,\n );\n if (!registry) {\n return { status: \"skipped\", packageVersion: null, repairedIssues: [] };\n }\n\n const packageVersion =\n getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd) ?? registry.version;\n const previousState = readState(iuiRoot, issues);\n let state: RegistrationState | null = null;\n\n try {\n const currentComponents = readJsonObject<ComponentManifest>(\n componentManifestPath(iuiRoot),\n {},\n issues,\n \".iui/components.json\",\n );\n const currentPackages = readJsonObject<PackageManifest>(\n packageManifestPath(iuiRoot),\n {},\n issues,\n \".iui/packages.json\",\n );\n const currentSlots = readJsonObject<SlotManifest>(\n slotManifestPath(iuiRoot),\n {},\n issues,\n \".iui/slots.json\",\n );\n const desired = buildDesiredState(\n registry,\n packageVersion,\n currentSlots,\n currentPackages,\n );\n const checksum = checksumFor(desired.components, desired.slots);\n\n if (previousState?.status === \"running\" || previousState?.status === \"failed\") {\n issues.push(\"interrupted registration was resumed\");\n }\n if (previousState?.checksum && previousState.checksum !== checksum) {\n issues.push(\"slot registry checksum changed\");\n }\n const driftDetected = hasManifestDrift(\n currentComponents,\n currentSlots,\n desired.components,\n desired.slots,\n );\n if (driftDetected) {\n issues.push(\"slot manifests drifted\");\n }\n\n const generationIssues = validateGeneratedSlotImports(iuiRoot);\n const assetBoundIssues = validateGeneratedAssetBoundImports(iuiRoot);\n const integrityIssues = [...generationIssues, ...assetBoundIssues];\n\n if (shouldSkipWritesFastPath({\n mode,\n previousState,\n currentChecksum: checksum,\n currentPackageVersion: packageVersion,\n drift: driftDetected,\n integrityIssues,\n })) {\n return {\n status: \"valid\",\n packageVersion,\n repairedIssues: [],\n };\n }\n\n if (mode === \"validate\") {\n if (integrityIssues.length > 0) {\n throw new CLIError(\n \"Slot registry integrity check failed.\",\n integrityIssues.map((issue) => `- ${issue}`).join(\"\\n\"),\n );\n }\n return {\n status: \"valid\",\n packageVersion,\n repairedIssues: issues,\n };\n }\n\n state = {\n schemaVersion: STATE_SCHEMA_VERSION,\n status: \"running\",\n phase: \"started\",\n packageVersion,\n checksum: previousState?.checksum ?? null,\n startedAt: now(),\n updatedAt: now(),\n attempts: (previousState?.attempts ?? 0) + 1,\n repairedIssues: issues,\n };\n writeState(iuiRoot, state);\n updateState(iuiRoot, state, \"state-loaded\");\n\n await retry(() => {\n writeComponentManifest(desired.components, iuiRoot);\n writePackageManifest(currentPackages, iuiRoot);\n writeSlotManifest(desired.slots, iuiRoot);\n });\n let next = updateState(iuiRoot, state, \"manifests-written\", {\n checksum,\n repairedIssues: issues,\n });\n\n await retry(async () => {\n writeComponentSlotFiles(iuiRoot);\n writeAssetsConfig(iuiRoot);\n ensureProjectConfig(iuiRoot);\n await writeAssetBoundFiles(iuiRoot);\n writeSlotHelperFile(iuiRoot);\n if (projectHasViteTooling(cwd)) {\n ensureInventiveUiViteConfig(cwd);\n }\n });\n bootstrapRegisteredPackages(iuiRoot);\n next = updateState(iuiRoot, next, \"slot-files-written\", { repairedIssues: issues });\n if (integrityIssues.length > 0) {\n throw new CLIError(\n \"Slot registry integrity check failed.\",\n integrityIssues.map((issue) => `- ${issue}`).join(\"\\n\"),\n );\n }\n\n next = updateState(iuiRoot, next, \"integrity-verified\", { repairedIssues: issues });\n updateState(iuiRoot, next, \"complete\", {\n status: \"complete\",\n completedAt: now(),\n lastError: undefined,\n repairedIssues: issues,\n });\n\n if (!options.quiet && issues.length > 0) {\n ui.ok(\"Slot registry repaired\");\n }\n\n return {\n status: issues.length > 0 ? \"repaired\" : \"valid\",\n packageVersion,\n repairedIssues: issues,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Slot registry update failed\";\n if (state) {\n updateState(iuiRoot, state, \"state-loaded\", {\n status: \"failed\",\n lastError: message,\n repairedIssues: issues,\n });\n }\n throw error;\n }\n });\n}\n","import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { iuiCacheFile } from \"./iui-paths.js\";\r\nimport { CLIError } from \"../utils/errors.js\";\r\n\r\nconst LOCK_STALE_MS = 2 * 60 * 1000;\r\nconst LOCK_RETRY_MS = 80;\r\nconst LOCK_TIMEOUT_MS = 10_000;\r\n\r\nexport interface RegistryLock {\r\n path: string;\r\n release: () => void;\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nfunction lockPath(cwd: string): string {\r\n return iuiCacheFile(cwd, \"slotLock\");\r\n}\r\n\r\nfunction readLockAge(filePath: string): number | null {\r\n try {\r\n const stat = fs.statSync(filePath);\r\n return Date.now() - stat.mtimeMs;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction removeStaleLock(filePath: string): void {\r\n const age = readLockAge(filePath);\r\n if (age === null || age < LOCK_STALE_MS) return;\r\n try {\r\n fs.unlinkSync(filePath);\r\n } catch {\r\n /* another process may have removed it */\r\n }\r\n}\r\n\r\nexport async function acquireRegistryLock(cwd: string): Promise<RegistryLock> {\r\n const filePath = lockPath(cwd);\r\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\r\n const started = Date.now();\r\n\r\n while (Date.now() - started < LOCK_TIMEOUT_MS) {\r\n removeStaleLock(filePath);\r\n try {\r\n const fd = fs.openSync(filePath, \"wx\", 0o600);\r\n fs.writeFileSync(\r\n fd,\r\n JSON.stringify({\r\n pid: process.pid,\r\n startedAt: new Date().toISOString(),\r\n cwd,\r\n }, null, 2),\r\n );\r\n fs.closeSync(fd);\r\n\r\n let released = false;\r\n const release = (): void => {\r\n if (released) return;\r\n released = true;\r\n try {\r\n fs.unlinkSync(filePath);\r\n } catch {\r\n /* best effort */\r\n }\r\n };\r\n\r\n return { path: filePath, release };\r\n } catch (error) {\r\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\r\n throw new CLIError(\r\n \"Could not prepare slot registry lock.\",\r\n \"Check permissions for the .iui directory and retry.\",\r\n );\r\n }\r\n await sleep(LOCK_RETRY_MS);\r\n }\r\n }\r\n\r\n throw new CLIError(\r\n \"Slot registry is busy.\",\r\n \"Another process is updating this project. Retry after it completes.\",\r\n );\r\n}\r\n\r\nexport async function withRegistryLock<T>(\r\n cwd: string,\r\n operation: () => Promise<T> | T,\r\n): Promise<T> {\r\n const lock = await acquireRegistryLock(cwd);\r\n const cleanup = (): void => lock.release();\r\n process.once(\"SIGINT\", cleanup);\r\n process.once(\"SIGTERM\", cleanup);\r\n\r\n try {\r\n return await operation();\r\n } finally {\r\n process.off(\"SIGINT\", cleanup);\r\n process.off(\"SIGTERM\", cleanup);\r\n lock.release();\r\n }\r\n}\r\n","// ─── Slot Service ────────────────────────────────────────────────────────────\n//\n// Responsible for:\n// 1. Building the local slot manifest (.iui/slots.json)\n// 2. Rebuilding the slot-registry file from installed package metadata\n// 3. Emitting managed slot internals under .iui/generated and a stable\n// compatibility bridge at src/iui/slot.tsx for app imports.\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n readSlotManifest,\n writeSlotManifest,\n readComponentManifest,\n readPackageManifest,\n readComponentPackageManifest,\n registryItemsMap,\n} from \"../utils/filesystem.js\";\nimport { ASSET_PACKAGES_MAP } from \"../constants.js\";\nimport {\n collectInstalledSlotEmitters,\n type SlotEmitter,\n} from \"../utils/slot-emitters.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport {\n assertComponentSlug,\n assertJsIdentifier,\n assertImportSpecifier,\n escapeTsStringLiteral,\n} from \"../utils/security/identifiers.js\";\nimport { resolveWithinRoot } from \"../utils/security/paths.js\";\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\nimport {\n relativeImportPath,\n} from \"../utils/workspace.js\";\nimport { hasAssetBoundRegistration } from \"./asset-bound.js\";\nimport {\n generatedIuiDir,\n generatedSlotsDir,\n iuiProjectRoot,\n} from \"./generated-paths.js\";\n\nconst SLOT_GROUP_CORE_FILE = \"slot-core.generated.tsx\";\nconst SLOT_GROUP_OPTIONAL_FILE = \"slot-optional.generated.tsx\";\n\nimport {\n contractEntryToBootstrapPolicy,\n loadPublicSlotContract,\n validateSlotPrefetchPolicy,\n} from \"../utils/public-slot-contract.js\";\n\n// ── Full slot registry regeneration ─────────────────────────────────────────\n//\n// Scans currently installed components + asset packages and produces\n// a complete slots.json manifest so project metadata stays in sync.\n// Component slot types are read from the installed package manifest\n// (node_modules/@inventive-ui/components/iui-manifest.json).\n\nexport function regenerateSlotManifest(cwd?: string): { total: number } {\n const components = readComponentManifest(cwd);\n const packages = readPackageManifest(cwd);\n const manifest = readSlotManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd ?? process.cwd());\n const itemsLookup = registryItemsMap(pkgManifest);\n let added = 0;\n\n // ── Component slots ────────────────────────────────────────────────────\n for (const [slug, version] of Object.entries(components)) {\n const supported = itemsLookup[slug]?.slots ?? [];\n if (!manifest[slug]) {\n manifest[slug] = {\n component: slug,\n slotType: \"component\",\n registeredAt: new Date().toISOString(),\n version,\n };\n if (supported.length > 0) manifest[slug].supportedSlots = supported;\n added++;\n } else {\n manifest[slug].version = version;\n manifest[slug].supportedSlots = supported.length > 0 ? supported : undefined;\n }\n }\n\n // ── Asset package slots ────────────────────────────────────────────────\n for (const [pkgId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n if (!def) continue;\n const key = `asset:${pkgId}`;\n if (!manifest[key]) {\n manifest[key] = {\n component: pkgId,\n slotType: def.slotType,\n registeredAt: new Date().toISOString(),\n version: meta.version,\n };\n added++;\n } else {\n manifest[key].version = meta.version;\n }\n }\n\n // ── Prune slots for uninstalled items ──────────────────────────────────\n for (const key of Object.keys(manifest)) {\n if (key.startsWith(\"asset:\")) {\n const pkgId = key.replace(\"asset:\", \"\");\n if (!packages[pkgId]) { delete manifest[key]; }\n } else {\n if (!components[key]) { delete manifest[key]; }\n }\n }\n\n writeSlotManifest(manifest, cwd);\n return { total: Object.keys(manifest).length };\n}\n\n// ── Component slot files (.iui/generated/slots/*.slot.tsx) ───────────────────\n//\n// Generates slot registration files so components can be used as slots\n// (e.g. prefix={{ type: \"chip\", label: \"Tag\" }} in another component).\n\nfunction bridgeSlotFilePath(cwd: string): string {\n return path.join(cwd, \"src\", \"iui\", \"slot.tsx\");\n}\n\nfunction cleanupLegacySourceSlotFiles(cwd: string): void {\n const legacySlotsDir = path.join(cwd, \"src\", \"iui\", \"slots\");\n if (!fs.existsSync(legacySlotsDir)) return;\n\n try {\n const files = fs.readdirSync(legacySlotsDir);\n for (const file of files) {\n if (file.endsWith(\".slot.tsx\")) {\n fs.removeSync(path.join(legacySlotsDir, file));\n }\n }\n const remaining = fs.readdirSync(legacySlotsDir);\n if (remaining.length === 0) {\n fs.removeSync(legacySlotsDir);\n }\n } catch {\n // Non-fatal cleanup\n }\n}\n\ntype SlotBootstrapPolicy = \"core\" | \"optional\";\n\nfunction loadSlotBootstrapPolicy(cwd: string): Map<string, SlotBootstrapPolicy> {\n const policy = new Map<string, SlotBootstrapPolicy>();\n const contract = loadPublicSlotContract(cwd);\n if (!contract) return policy;\n\n for (const entry of contract.slots ?? []) {\n if (!entry?.type || !entry.public) continue;\n policy.set(entry.type, contractEntryToBootstrapPolicy(entry));\n }\n\n return policy;\n}\n\nexport function validateGeneratedSlotImports(cwd: string = process.cwd()): string[] {\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n if (!pkgManifest) {\n return [\"@inventive-ui/components manifest is missing from node_modules.\"];\n }\n\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.keys(components)\n .map((slug) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n\n const { issues } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n\n return issues.map((issue) => issue);\n}\n\nfunction renderGetComponentExpr(emitter: SlotEmitter, _slotPropsType = \"unknown\"): string {\n // Keep in sync with @inventive-ui/components/scripts/lib/render-slot-component-expr.mjs\n const access = emitter.lazyAccess.replace(/^\\./, \"\").trim();\n const parts = access.split(\".\").filter(Boolean);\n const compName = emitter.componentName;\n\n if (parts.length === 0) {\n assertJsIdentifier(compName, \"component export\");\n return `resolveComponentExport(mod, ${JSON.stringify(compName)})`;\n }\n\n if (parts.length === 1) {\n const name = parts[0] === \"default\" ? compName : parts[0];\n assertJsIdentifier(name, \"component export\");\n return `resolveComponentExport(mod, ${JSON.stringify(name)})`;\n }\n\n const [root, ...rest] = parts;\n if (root !== \"default\") {\n assertJsIdentifier(root, \"component export\");\n }\n for (const part of rest) {\n assertJsIdentifier(part, \"component export member\");\n }\n const rootName = root === \"default\" ? compName : root;\n if (rest.length === 1) {\n return `resolveComponentExport(mod, ${JSON.stringify(rootName)}, ${JSON.stringify(rest[0])})`;\n }\n const rootExpr = `resolveComponentExport(mod, ${JSON.stringify(rootName)})`;\n return `${rootExpr}?.${rest.join(\".\")}`;\n}\n\n/**\n * Component-as-slot file template — matches components-updated\n * `scripts/add-slots/template.js` (createEagerComponent, no React.lazy/Suspense).\n */\nexport function renderSlotFileContent(emitter: SlotEmitter): string {\n const compName = emitter.componentName;\n const propsTypeName = emitter.propsName;\n const needsComponentProps = propsTypeName === \"Props\";\n const slotTypeDef = needsComponentProps\n ? `ComponentProps<typeof ${compName}Type>`\n : propsTypeName;\n const slotPropsType = `Omit<${slotTypeDef}, \"type\">`;\n const slotName = emitter.type;\n const slotNameLit = escapeTsStringLiteral(slotName);\n const importLit = escapeTsStringLiteral(emitter.importSpecifier);\n const lazyImportLit = escapeTsStringLiteral(emitter.lazyImportSpecifier);\n const getComponentExpr = renderGetComponentExpr(emitter, slotPropsType);\n\n const typeImport = needsComponentProps\n ? `import type { ComponentProps } from \"react\";\nimport type { ${compName} as ${compName}Type } from ${importLit};`\n : `import type { ${propsTypeName} } from ${importLit};`;\n\n return `// Managed by iui. Do not edit manually.\nimport React from \"react\";\nimport {\n registerSlot,\n createEagerComponent,\n resolveComponentExport,\n} from \"@inventive-ui/framework/slots\";\n${typeImport}\n\n/**\n * Slot type for ${compName}\n */\nexport type ${compName}Slot = {\n type: \"${slotName}\";\n} & Omit<${slotTypeDef}, \"type\">;\n\ndeclare module \"@inventive-ui/framework/slots\" {\n interface SlotMap {\n \"${slotName}\": ${compName}Slot;\n }\n}\n\nconst Comp = createEagerComponent<${slotPropsType}>(\n () => import(${lazyImportLit}),\n (mod) =>\n ${getComponentExpr} as React.ComponentType<${slotPropsType}>,\n);\n\nregisterSlot(${slotNameLit}, (slot) => {\n const { type, ...props } = slot;\n return <Comp {...props} />;\n});\n`;\n}\n\nexport function writeComponentSlotFiles(cwd: string = process.cwd()): void {\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n const slotsDir = generatedSlotsDir(cwd);\n const generationIssues: string[] = [];\n\n cleanupLegacySourceSlotFiles(cwd);\n\n if (Object.keys(components).length === 0) {\n // Only remove stale slot files; don't create dirs when no components\n if (fs.existsSync(slotsDir)) {\n const existingSlots = fs.readdirSync(slotsDir).filter((f) => f.endsWith(\".slot.tsx\"));\n for (const file of existingSlots) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n }\n }\n return;\n }\n\n fs.ensureDirSync(slotsDir);\n\n\n if (!pkgManifest) return;\n\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.entries(components)\n .map(([slug]) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n\n const { emitters, issues: emitterIssues } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n generationIssues.push(...emitterIssues.map((issue) => `- ${issue}`));\n\n const contract = loadPublicSlotContract(cwd);\n if (contract) {\n for (const entry of contract.slots ?? []) {\n if (!entry.public) continue;\n const prefetchError = validateSlotPrefetchPolicy(entry);\n if (prefetchError) {\n generationIssues.push(prefetchError);\n }\n }\n }\n\n const slotPolicy = loadSlotBootstrapPolicy(cwd);\n const coreEmitters: SlotEmitter[] = [];\n const optionalEmitters: SlotEmitter[] = [];\n\n for (const emitter of emitters) {\n assertComponentSlug(emitter.type);\n assertJsIdentifier(emitter.componentName, \"component export\");\n if (emitter.propsName !== \"Props\") assertJsIdentifier(emitter.propsName, \"props type\");\n assertImportSpecifier(emitter.importSpecifier);\n assertImportSpecifier(emitter.lazyImportSpecifier);\n const policy = slotPolicy.get(emitter.type) ?? \"optional\";\n if (policy === \"core\") coreEmitters.push(emitter);\n else optionalEmitters.push(emitter);\n }\n\n const root = iuiProjectRoot(cwd);\n const renderedGroups: Array<{ fileName: string; emitters: SlotEmitter[] }> = [\n { fileName: SLOT_GROUP_CORE_FILE, emitters: coreEmitters },\n { fileName: SLOT_GROUP_OPTIONAL_FILE, emitters: optionalEmitters },\n ];\n for (const group of renderedGroups) {\n const outPath = resolveWithinRoot(root, \".iui\", \"generated\", \"slots\", group.fileName);\n if (group.emitters.length === 0) {\n if (fs.existsSync(outPath)) fs.removeSync(outPath);\n continue;\n }\n safeWriteFile(\n outPath,\n renderGroupedSlotFileContent(group.emitters, {\n prefetch: group.fileName === SLOT_GROUP_CORE_FILE,\n }),\n );\n }\n\n // Remove stale slot files from legacy per-slot generation.\n const existingSlots = fs.existsSync(slotsDir)\n ? fs.readdirSync(slotsDir).filter((f) => f.endsWith(\".slot.tsx\") || f.endsWith(\".generated.tsx\"))\n : [];\n for (const file of existingSlots) {\n if (file === SLOT_GROUP_CORE_FILE || file === SLOT_GROUP_OPTIONAL_FILE) continue;\n if (file.endsWith(\".slot.tsx\")) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n continue;\n }\n if (file.endsWith(\".generated.tsx\")) {\n try {\n fs.removeSync(path.join(slotsDir, file));\n } catch {}\n }\n }\n\n if (generationIssues.length > 0) {\n throw new CLIError(\n [\n \"Component public slot contract mismatch while generating slot files:\",\n ...generationIssues,\n ].join(\"\\n\"),\n \"Reinstall @inventive-ui/components and run iui doctor to repair the slot registry.\",\n );\n }\n}\n\nfunction renderGroupedSlotFileContent(\n emitters: SlotEmitter[],\n options: { prefetch?: boolean } = {},\n): string {\n const needsComponentProps = emitters.some((emitter) => emitter.propsName === \"Props\");\n const lines: string[] = [\n \"// Managed by iui. Do not edit manually.\",\n 'import React from \"react\";',\n 'import { registerSlot, createEagerComponent, resolveComponentExport } from \"@inventive-ui/framework/slots\";',\n ];\n if (needsComponentProps) {\n lines.push('import type { ComponentProps } from \"react\";');\n }\n lines.push(\"\");\n\n const imports = new Set<string>();\n\n let idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n if (emitter.propsName === \"Props\") {\n imports.add(\n `import type { ${emitter.componentName} as ${alias}Type } from \"${emitter.importSpecifier}\";`,\n );\n } else {\n imports.add(`import type { ${emitter.propsName} } from \"${emitter.importSpecifier}\";`);\n }\n }\n lines.push(...[...imports].sort(), \"\");\n\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n const slotType = emitter.propsName === \"Props\"\n ? `ComponentProps<typeof ${alias}Type>`\n : emitter.propsName;\n lines.push(`type ${alias}Slot = { type: \"${emitter.type}\" } & Omit<${slotType}, \"type\">;`);\n lines.push(`type ${alias}SlotProps = Omit<${alias}Slot, \"type\">;`);\n }\n\n lines.push(\"\", 'declare module \"@inventive-ui/framework/slots\" {', \" interface SlotMap {\");\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n lines.push(` \"${emitter.type}\": Comp${idx}Slot;`);\n }\n lines.push(\" }\", \"}\", \"\");\n\n idx = 0;\n for (const emitter of emitters) {\n idx += 1;\n const alias = `Comp${idx}`;\n const renderer = `${alias}Renderer`;\n lines.push(`const ${renderer} = createEagerComponent<${alias}SlotProps>(`);\n lines.push(` () => import(${escapeTsStringLiteral(emitter.lazyImportSpecifier)}),`);\n lines.push(` (mod) => ${renderGetComponentExpr(emitter, `${alias}SlotProps`)} as React.ComponentType<${alias}SlotProps>,`);\n if (options.prefetch) {\n lines.push(\" { prefetch: true },\");\n }\n lines.push(\");\", \"\");\n lines.push(`registerSlot(${escapeTsStringLiteral(emitter.type)}, (slot) => {`);\n lines.push(\" const { type, ...props } = slot;\");\n lines.push(` return <${renderer} {...props} />;`);\n lines.push(\"});\", \"\");\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n// ── Slot helper codegen (.iui/generated + src/iui bridge) ───────────────────\n//\n// Generates a small helper file that:\n// - Re-exports SlotRenderer / useSlotRenderer from the framework\n// - Imports component slot files (for registration); asset packages stay lazy\n// - Exposes a typed union of slot types based on .iui/slots.json\n\nexport function writeSlotHelperFile(cwd: string = process.cwd()): void {\n const manifest = readSlotManifest(cwd);\n const components = readComponentManifest(cwd);\n const pkgManifest = readComponentPackageManifest(cwd);\n const slotTypes = new Set<string>();\n\n for (const record of Object.values(manifest)) {\n if (record.slotType && record.slotType !== \"component\") {\n slotTypes.add(record.slotType);\n }\n if (Array.isArray(record.supportedSlots)) {\n for (const t of record.supportedSlots) slotTypes.add(t);\n }\n }\n\n let emitterSlotTypes: string[] = [];\n if (pkgManifest) {\n const itemsLookup = registryItemsMap(pkgManifest);\n const installedItems = Object.keys(components)\n .map((slug) => itemsLookup[slug])\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n const { emitters } = collectInstalledSlotEmitters(\n installedItems,\n new Set(Object.keys(components)),\n cwd,\n );\n emitterSlotTypes = emitters.map((emitter) => emitter.type);\n for (const type of emitterSlotTypes) slotTypes.add(type);\n } else {\n for (const slug of Object.keys(components)) slotTypes.add(slug);\n }\n\n const typesArray = Array.from(slotTypes).sort();\n\n const slotImports: string[] = [];\n const coreSlotsPath = path.join(generatedSlotsDir(cwd), SLOT_GROUP_CORE_FILE);\n const optionalSlotsPath = path.join(generatedSlotsDir(cwd), SLOT_GROUP_OPTIONAL_FILE);\n if (fs.existsSync(coreSlotsPath)) slotImports.push(`import \"./slots/${SLOT_GROUP_CORE_FILE.replace(/\\.tsx$/, \"\")}\";`);\n if (fs.existsSync(optionalSlotsPath)) slotImports.push(`import \"./slots/${SLOT_GROUP_OPTIONAL_FILE.replace(/\\.tsx$/, \"\")}\";`);\n const componentSlotImports = slotImports.join(\"\\n\");\n\n const includeAssetBindings = hasAssetBoundRegistration(cwd);\n\n const outDir = generatedIuiDir(cwd);\n fs.ensureDirSync(outDir);\n const outPath = path.join(outDir, \"slot.generated.tsx\");\n\n const sections: string[] = [\n `// Managed by iui. Do not edit manually.`,\n `// Rebuilt automatically when the CLI validates the project.`,\n ];\n\n // Asset packages stay lazy in Framework unless CLI generated bound static imports.\n if (includeAssetBindings) {\n sections.push(\"\");\n sections.push(\"// Scanned asset bindings (static glyph imports)\");\n sections.push(`import \"./assets/register-bound\";`);\n }\n\n if (componentSlotImports) {\n sections.push(\"\");\n sections.push(\"// Component slot registrations\");\n sections.push(componentSlotImports);\n }\n\n sections.push(\"\");\n sections.push(`// Framework slot system — flag, icon, loader, etc. registrations run as side effects`);\n sections.push(`// when @inventive-ui/framework is first imported. No explicit registration needed here.`);\n sections.push(`import { SlotRenderer, useSlotRenderer } from \"@inventive-ui/framework/slots\";`);\n sections.push(`import slotManifest from \"../slots.json\";`);\n sections.push(\"\");\n sections.push(\n typesArray.length > 0\n ? `export type IUISlotType =\\n${typesArray.map((t) => ` | \"${t}\"`).join(\"\\n\")};`\n : `export type IUISlotType = never;`,\n );\n sections.push(\"\");\n sections.push(`export { SlotRenderer, useSlotRenderer };`);\n sections.push(\"\");\n sections.push(`export const slots = slotManifest;`);\n sections.push(\"\");\n\n const content = sections.join(\"\\n\");\n\n safeWriteFile(outPath, content);\n}\n\n/** Stable app import path that re-exports the generated slot registry at the IUI root. */\nexport function writeSlotBridge(packageDir: string, iuiRoot: string): void {\n const bridgePath = bridgeSlotFilePath(packageDir);\n const generatedFile = path.join(iuiRoot, \".iui\", \"generated\", \"slot.generated.tsx\");\n const importBase = relativeImportPath(path.dirname(bridgePath), generatedFile);\n\n fs.ensureDirSync(path.dirname(bridgePath));\n if (fs.existsSync(bridgePath)) {\n const existing = fs.readFileSync(bridgePath, \"utf-8\");\n if (existing.length > 0 && !/@iui-managed/.test(existing)) {\n return;\n }\n }\n\n const bridgeContent = `// Managed by iui. Do not edit manually.\n// @iui-managed\n// Compatibility bridge: keep project imports stable at src/iui/slot.tsx.\n\nexport { SlotRenderer, useSlotRenderer, slots } from \"${importBase}\";\nexport type { IUISlotType } from \"${importBase}\";\n`;\n safeWriteFile(bridgePath, bridgeContent);\n cleanupLegacySourceSlotFiles(packageDir);\n}\n\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { resolvePackageDir } from \"./workspace.js\";\n\nexport interface PublicSlotContractEntry {\n type: string;\n parent: string;\n import: string;\n lazyImport?: string;\n props: string;\n lazyAccess: string;\n component?: string;\n bootstrap: \"sync\" | \"lazy\";\n /** When true, consumer codegen emits createEagerComponent(..., { prefetch: true }). */\n prefetch?: boolean;\n profile: string[];\n public: boolean;\n}\n\nexport interface PublicSlotContract {\n version: string;\n slots: PublicSlotContractEntry[];\n}\n\nconst CONTRACT_FILENAME = \"public-slot-contract.json\";\n\nexport function loadPublicSlotContract(\n cwd: string = process.cwd(),\n): PublicSlotContract | null {\n const pkgRoot = resolvePackageDir(\"@inventive-ui/components\", cwd);\n if (!pkgRoot) return null;\n\n const contractPath = path.join(pkgRoot, CONTRACT_FILENAME);\n if (!fs.existsSync(contractPath)) return null;\n\n try {\n return fs.readJsonSync(contractPath) as PublicSlotContract;\n } catch {\n return null;\n }\n}\n\n/** Mirrors components `scripts/lib/slot-consumer-codegen-policy.mjs` (`slotCodegenGroup`). */\nexport function slotRequiresPrefetch(entry: PublicSlotContractEntry): boolean {\n if (entry.prefetch === true) return true;\n if (entry.prefetch === false) return false;\n if (entry.bootstrap === \"sync\") return true;\n return Array.isArray(entry.profile) && entry.profile.includes(\"critical\");\n}\n\nexport function contractEntryToBootstrapPolicy(\n entry: PublicSlotContractEntry,\n): \"core\" | \"optional\" {\n return slotRequiresPrefetch(entry) ? \"core\" : \"optional\";\n}\n\n/** Mirrors components `validateSlotPrefetchPolicy` — returns an error message or null. */\nexport function validateSlotPrefetchPolicy(\n entry: PublicSlotContractEntry,\n): string | null {\n const type = entry.type ?? \"?\";\n const requires = slotRequiresPrefetch(entry);\n if (requires && entry.prefetch === false) {\n return `slot \"${type}\" is core/critical but prefetch is false`;\n }\n if (\n (entry.bootstrap === \"sync\"\n || (Array.isArray(entry.profile) && entry.profile.includes(\"critical\")))\n && entry.prefetch !== true\n ) {\n return `slot \"${type}\" must declare prefetch: true (sync/critical peer hub)`;\n }\n if (!requires && entry.prefetch === true) {\n return `slot \"${type}\" declares prefetch: true but is not sync/critical`;\n }\n return null;\n}\n","import type { RegistryItem } from \"../types.js\";\nimport type { PublicSlotContractEntry } from \"./public-slot-contract.js\";\nimport { loadPublicSlotContract } from \"./public-slot-contract.js\";\n\n/** Extra slot type strings that share the same renderer as a registry component. */\nexport const SLOT_TYPE_ALIASES: Record<string, string[]> = {\n infotip: [\"info-tip\"],\n};\n\nexport interface SlotEmitter {\n /** Slot discriminator used by SlotRenderer / registerSlot. */\n type: string;\n /** Registry item slug that owns this emitter. */\n parentSlug: string;\n componentName: string;\n propsName: string;\n importSpecifier: string;\n lazyImportSpecifier: string;\n lazyAccess: string;\n}\n\nfunction contractEntryToEmitter(entry: PublicSlotContractEntry): SlotEmitter {\n const lazyAccess = entry.lazyAccess.startsWith(\".\")\n ? entry.lazyAccess\n : `.${entry.lazyAccess}`;\n\n return {\n type: entry.type,\n parentSlug: entry.parent,\n componentName: entry.component ?? entry.type,\n propsName: entry.props,\n importSpecifier: entry.import,\n lazyImportSpecifier: entry.lazyImport ?? entry.import,\n lazyAccess,\n };\n}\n\nfunction isContractEntryInstalled(\n entry: PublicSlotContractEntry,\n installedSlugs: Set<string>,\n): boolean {\n if (!entry.public) return false;\n if (installedSlugs.has(entry.type)) return true;\n if (installedSlugs.has(entry.parent)) return true;\n return false;\n}\n\nexport function collectInstalledSlotEmitters(\n items: RegistryItem[],\n installedSlugs: Set<string>,\n cwd: string = process.cwd(),\n): { emitters: SlotEmitter[]; issues: string[] } {\n const contract = loadPublicSlotContract(cwd);\n if (!contract) {\n return {\n emitters: [],\n issues: [\n \"@inventive-ui/components/public-slot-contract.json is missing from node_modules.\",\n ],\n };\n }\n\n const issues: string[] = [];\n const emitters: SlotEmitter[] = [];\n const registrySlugs = new Set(items.map((item) => item.name));\n\n for (const slug of installedSlugs) {\n if (!registrySlugs.has(slug)) continue;\n const hasPrimary = contract.slots.some(\n (entry) => entry.public && entry.type === slug,\n );\n if (!hasPrimary) {\n issues.push(`${slug}: no public slot contract entry for primary type \"${slug}\"`);\n }\n }\n\n for (const entry of contract.slots) {\n if (!isContractEntryInstalled(entry, installedSlugs)) continue;\n if (!entry.props || !entry.lazyAccess || !entry.import) {\n issues.push(`${entry.type}: incomplete public slot contract entry`);\n continue;\n }\n emitters.push(contractEntryToEmitter(entry));\n }\n\n const deduped = new Map<string, SlotEmitter>();\n for (const emitter of emitters) {\n if (!deduped.has(emitter.type)) {\n deduped.set(emitter.type, emitter);\n }\n }\n\n return {\n emitters: [...deduped.values()].sort((a, b) => a.type.localeCompare(b.type)),\n issues,\n };\n}\n\nexport function collectSlotEmitters(\n item: RegistryItem,\n cwd: string = process.cwd(),\n): { emitters: SlotEmitter[]; issues: string[] } {\n return collectInstalledSlotEmitters([item], new Set([item.name]), cwd);\n}\n","// ─── Safe path writes (reject symlinks on sensitive paths) ─────────────────\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { CLIError } from \"../errors.js\";\r\nimport { atomicWriteFile } from \"../atomic.js\";\r\n\r\nexport function assertNotSymlink(filePath: string, label: string): void {\r\n try {\r\n const stat = fs.lstatSync(filePath);\r\n if (stat.isSymbolicLink()) {\r\n throw new CLIError(`Refusing to use symlinked ${label}: ${filePath}`);\r\n }\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return;\r\n if (err instanceof CLIError) throw err;\r\n throw new CLIError(`Cannot verify ${label} path: ${filePath}`);\r\n }\r\n}\r\n\r\nexport function safeWriteFile(filePath: string, content: string): void {\r\n const dir = path.dirname(filePath);\r\n if (fs.existsSync(dir)) {\r\n assertNotSymlink(dir, \"directory\");\r\n }\r\n const parent = path.dirname(filePath);\r\n fs.mkdirSync(parent, { recursive: true });\r\n if (fs.existsSync(filePath)) {\r\n assertNotSymlink(filePath, \"file\");\r\n }\r\n atomicWriteFile(filePath, content);\r\n}\r\n","// ─── Bound asset slot codegen (.iui/generated/assets/) ───────────────────────\n//\n// Generates static glyph imports for scanned assets so Framework slots render\n// synchronously on first paint when `binding: \"scanned\"`.\n\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\nimport { resolveWithinRoot } from \"../utils/security/paths.js\";\nimport { generatedAssetsDir, iuiProjectRoot } from \"./generated-paths.js\";\nimport {\n resolveDependencyInstallRoot,\n resolvePackageDir,\n} from \"../utils/workspace.js\";\n\nconst LIBRARY_TO_PKG: Record<string, string> = {\n lucide: \"icons-lucide\",\n phosphor: \"icons-phosphor\",\n material: \"icons-material\",\n \"material-icons\": \"icons-material\",\n materialSymbols: \"material-symbols\",\n \"material-symbols\": \"material-symbols\",\n};\n\nconst PKG_LOOKUP_PREFIX: Record<string, string> = {\n \"icons-lucide\": \"icons/\",\n \"icons-phosphor\": \"icons/\",\n \"icons-material\": \"icons/\",\n \"material-symbols\": \"icons/\",\n logos: \"logos/\",\n \"color-logos\": \"logos/\",\n flags: \"flags/\",\n \"file-types\": \"types/\",\n loaders: \"loaders/\",\n illustrations: \"\",\n};\n\nconst BOUND_SPECS = [\n {\n slotType: \"icon\",\n fileName: \"icons.bound.ts\",\n exportName: \"BOUND_ICONS\",\n packages: new Set([\n \"material-symbols\",\n \"icons-lucide\",\n \"icons-phosphor\",\n \"icons-material\",\n ]),\n filterByDefaultIconLibrary: true,\n },\n {\n slotType: \"logo\",\n fileName: \"logos.bound.ts\",\n exportName: \"BOUND_LOGOS\",\n packages: new Set([\"logos\"]),\n },\n {\n slotType: \"color-logo\",\n fileName: \"color-logos.bound.ts\",\n exportName: \"BOUND_COLOR_LOGOS\",\n packages: new Set([\"color-logos\"]),\n },\n {\n slotType: \"flag\",\n fileName: \"flags.bound.ts\",\n exportName: \"BOUND_FLAGS\",\n packages: new Set([\"flags\"]),\n },\n {\n slotType: \"file-type\",\n fileName: \"file-types.bound.ts\",\n exportName: \"BOUND_FILE_TYPES\",\n packages: new Set([\"file-types\"]),\n },\n {\n slotType: \"loader\",\n fileName: \"loaders.bound.ts\",\n exportName: \"BOUND_LOADERS\",\n packages: new Set([\"loaders\"]),\n },\n {\n slotType: \"illustration\",\n fileName: \"illustrations.bound.ts\",\n exportName: \"BOUND_ILLUSTRATIONS\",\n packages: new Set([\"illustrations\"]),\n },\n] as const;\n\nfunction isAssetPackageInstalled(cwd: string, pkgId: string): boolean {\n return resolvePackageDir(`@inventive-ui/${pkgId}`, cwd) !== null;\n}\n\nconst DEFAULT_SCAN = {\n scanDirs: [\"src\", \".storybook\", \"stories\", \".iui\"],\n include: [\n \"**/*.stories.*\",\n \"**/*.mdx\",\n \"**/src/**/*.tsx\",\n \"**/src/**/*.ts\",\n \"**/src/**/*.jsx\",\n \"**/src/**/*.js\",\n \"**/.storybook/**/*.tsx\",\n \"**/.storybook/**/*.ts\",\n \"**/.storybook/**/*.jsx\",\n \"**/.storybook/**/*.js\",\n ],\n exclude: [\"**/*.test.*\", \"**/*.spec.*\"],\n};\n\ntype ScanUtils = {\n scanUsedSlotAssets: (\n viteRoot: string,\n options?: Record<string, unknown>,\n ) => Map<string, Set<string>>;\n lookupKeyToModuleId: (pkg: string, lookupKey: string) => string;\n readDefaultIconLibraryFromConfig: (viteRoot: string) => string;\n isScannedAssetBindingEnabled: (viteRoot: string, slotType: string) => boolean;\n};\n\nfunction resolveFrameworkModule(cwd: string, relativePath: string): string | null {\n const searchRoots = new Set<string>();\n for (const candidate of [\n resolveDependencyInstallRoot(cwd),\n path.resolve(cwd),\n iuiProjectRoot(cwd),\n ]) {\n searchRoots.add(path.resolve(candidate));\n }\n\n for (const start of searchRoots) {\n const frameworkDir = resolvePackageDir(\"@inventive-ui/framework\", start);\n if (!frameworkDir) continue;\n const installed = path.join(frameworkDir, relativePath);\n if (fs.existsSync(installed)) return installed;\n }\n\n // Local monorepo dev layout (Framework sibling to app packages).\n const root = iuiProjectRoot(cwd);\n for (const candidate of [\n path.join(root, \"..\", \"Framework\", relativePath),\n path.join(root, \"..\", \"..\", \"Framework\", relativePath),\n ]) {\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\nasync function loadScanUtils(cwd: string): Promise<ScanUtils> {\n const scanPath = resolveFrameworkModule(\n cwd,\n \"integrations/vite/scan-used-slot-assets.mjs\",\n );\n const resolvePath = resolveFrameworkModule(\n cwd,\n \"integrations/shared/resolve-scanned-icon-name.mjs\",\n );\n\n if (!scanPath || !resolvePath) {\n const installRoot = resolveDependencyInstallRoot(cwd);\n const frameworkDir = resolvePackageDir(\"@inventive-ui/framework\", installRoot);\n const hint =\n frameworkDir && !scanPath\n ? \"Update @inventive-ui/framework to the latest version (iui update) — scan utilities require a current Framework release.\"\n : \"Install @inventive-ui/framework and run iui doctor again.\";\n throw new CLIError(\"Could not load Framework scan utilities.\", hint);\n }\n\n const scanMod = await import(pathToFileURL(scanPath).href);\n const resolveMod = await import(pathToFileURL(resolvePath).href);\n return { ...scanMod, ...resolveMod } as ScanUtils;\n}\n\nfunction lookupKeyToGlyphKey(pkg: string, lookupKey: string): string {\n let subpath = lookupKey.replace(/^\\.\\//, \"\").replace(/\\.js$/, \"\");\n if (pkg === \"illustrations\") {\n return subpath;\n }\n const prefix = PKG_LOOKUP_PREFIX[pkg];\n if (prefix && subpath.startsWith(prefix)) {\n subpath = subpath.slice(prefix.length);\n }\n return subpath;\n}\n\nfunction glyphToIdentifier(name: string, used: Set<string>): string {\n let base = name\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n\n if (!base || !/^[A-Za-z_$]/.test(base)) {\n base = `Glyph${base}`;\n }\n\n let id = base;\n let suffix = 2;\n while (used.has(id)) {\n id = `${base}${suffix++}`;\n }\n used.add(id);\n return id;\n}\n\nfunction resolveIconPkg(library: string): string | null {\n return LIBRARY_TO_PKG[library] ?? library;\n}\n\nfunction buildBoundFileContent(\n exportName: string,\n entries: Array<{ key: string; moduleId: string; identifier: string }>,\n): string {\n const lines = [\n \"// Managed by iui. Do not edit manually.\",\n \"// Static glyph bindings for scanned assets (`binding: \\\"scanned\\\"`).\",\n \"\",\n 'import type { ComponentType } from \"react\";',\n ];\n\n for (const entry of entries) {\n lines.push(`import ${entry.identifier} from \"${entry.moduleId}\";`);\n }\n\n lines.push(\"\");\n lines.push(\n `export const ${exportName}: Record<string, ComponentType<Record<string, unknown>>> = {`,\n );\n\n for (const entry of entries) {\n lines.push(` ${JSON.stringify(entry.key)}: ${entry.identifier},`);\n }\n\n lines.push(\"};\");\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nfunction cleanupAssetBoundFiles(cwd: string): void {\n const assetsDir = generatedAssetsDir(cwd);\n if (!fs.existsSync(assetsDir)) return;\n\n for (const file of fs.readdirSync(assetsDir)) {\n if (file.endsWith(\".bound.ts\") || file === \"register-bound.ts\") {\n fs.removeSync(path.join(assetsDir, file));\n }\n }\n\n const remaining = fs.readdirSync(assetsDir);\n if (remaining.length === 0) {\n fs.removeSync(assetsDir);\n }\n}\n\nexport function hasAssetBoundRegistration(cwd: string): boolean {\n return fs.existsSync(path.join(generatedAssetsDir(cwd), \"register-bound.ts\"));\n}\n\nexport async function writeAssetBoundFiles(cwd: string = process.cwd()): Promise<void> {\n const root = iuiProjectRoot(cwd);\n const scanUtils = await loadScanUtils(cwd);\n const activeSpecs = BOUND_SPECS.filter((spec) =>\n scanUtils.isScannedAssetBindingEnabled(root, spec.slotType),\n );\n\n if (activeSpecs.length === 0) {\n cleanupAssetBoundFiles(root);\n return;\n }\n\n const registry = scanUtils.scanUsedSlotAssets(root, DEFAULT_SCAN);\n const defaultIconLibrary = scanUtils.readDefaultIconLibraryFromConfig(root);\n const defaultIconPkg = resolveIconPkg(defaultIconLibrary);\n const assetsDir = generatedAssetsDir(root);\n fs.ensureDirSync(assetsDir);\n\n const generatedFiles = new Set<string>();\n const registrationSpecs: Array<{\n slotType: string;\n exportName: string;\n fileName: string;\n }> = [];\n\n for (const spec of activeSpecs) {\n const entries: Array<{ key: string; moduleId: string; identifier: string }> =\n [];\n const usedIdentifiers = new Set<string>();\n\n for (const [pkg, keys] of registry.entries()) {\n if (!spec.packages.has(pkg)) continue;\n if (\n \"filterByDefaultIconLibrary\" in spec &&\n spec.filterByDefaultIconLibrary &&\n pkg !== defaultIconPkg\n ) {\n continue;\n }\n if (!isAssetPackageInstalled(cwd, pkg)) continue;\n\n for (const lookupKey of keys) {\n const key = lookupKeyToGlyphKey(pkg, lookupKey);\n const moduleId = scanUtils.lookupKeyToModuleId(pkg, lookupKey);\n const identifier = glyphToIdentifier(key, usedIdentifiers);\n if (entries.some((entry) => entry.key === key)) continue;\n entries.push({ key, moduleId, identifier });\n }\n }\n\n entries.sort((a, b) => a.key.localeCompare(b.key));\n\n if (entries.length === 0) {\n continue;\n }\n\n const content = buildBoundFileContent(spec.exportName, entries);\n const outPath = resolveWithinRoot(\n root,\n \".iui\",\n \"generated\",\n \"assets\",\n spec.fileName,\n );\n safeWriteFile(outPath, content);\n generatedFiles.add(spec.fileName);\n registrationSpecs.push({\n slotType: spec.slotType,\n exportName: spec.exportName,\n fileName: spec.fileName,\n });\n }\n\n const existing = fs.existsSync(assetsDir)\n ? fs.readdirSync(assetsDir).filter((f) => f.endsWith(\".bound.ts\"))\n : [];\n for (const file of existing) {\n if (!generatedFiles.has(file)) {\n fs.removeSync(path.join(assetsDir, file));\n }\n }\n\n if (registrationSpecs.length === 0) {\n cleanupAssetBoundFiles(root);\n return;\n }\n\n const registerLines = [\n \"// Managed by iui. Do not edit manually.\",\n \"\",\n 'import { registerBoundAssetComponents } from \"@inventive-ui/framework/slots\";',\n ];\n\n for (const spec of registrationSpecs) {\n registerLines.push(\n `import { ${spec.exportName} } from \"./${spec.fileName.replace(/\\.ts$/, \"\")}\";`,\n );\n }\n\n registerLines.push(\"\");\n for (const spec of registrationSpecs) {\n registerLines.push(\n `registerBoundAssetComponents(${JSON.stringify(spec.slotType)}, ${spec.exportName});`,\n );\n }\n registerLines.push(\"\");\n\n safeWriteFile(\n resolveWithinRoot(root, \".iui\", \"generated\", \"assets\", \"register-bound.ts\"),\n registerLines.join(\"\\n\"),\n );\n}\n\nfunction assetModuleCandidates(pkgRoot: string, moduleId: string): string[] {\n const pkgName = moduleId.split(\"/\").slice(0, 2).join(\"/\");\n const subpath = moduleId.slice(pkgName.length + 1);\n const pkgId = pkgName.replace(\"@inventive-ui/\", \"\");\n\n if (!subpath || subpath.includes(\"..\")) return [];\n\n if (pkgId === \"loaders\") {\n return [path.join(pkgRoot, \"dist\", \"loaders\", `${subpath}.js`)];\n }\n\n if (pkgId === \"illustrations\") {\n const [family, scene] = subpath.split(\"/\");\n if (family && scene) {\n return [path.join(pkgRoot, \"dist\", family, `${scene}.js`)];\n }\n return [path.join(pkgRoot, \"dist\", `${subpath}.js`)];\n }\n\n const prefix = PKG_LOOKUP_PREFIX[pkgId];\n if (prefix) {\n const dir = prefix.replace(/\\/$/, \"\");\n return [\n path.join(pkgRoot, \"dist\", dir, `${subpath}.js`),\n path.join(pkgRoot, \"dist\", `${subpath}.js`),\n path.join(pkgRoot, \"dist\", subpath, \"index.js\"),\n ];\n }\n\n return [\n path.join(pkgRoot, \"dist\", `${subpath}.js`),\n path.join(pkgRoot, \"dist\", subpath, \"index.js\"),\n ];\n}\n\nexport function validateGeneratedAssetBoundImports(\n cwd: string = process.cwd(),\n): string[] {\n const assetsDir = generatedAssetsDir(cwd);\n if (!fs.existsSync(assetsDir)) return [];\n\n const issues: string[] = [];\n const boundFiles = fs\n .readdirSync(assetsDir)\n .filter((file) => file.endsWith(\".bound.ts\"));\n\n for (const file of boundFiles) {\n const content = fs.readFileSync(path.join(assetsDir, file), \"utf8\");\n const importRe = /from\\s+[\"'](@inventive-ui\\/[^\"']+)[\"']/g;\n let match: RegExpExecArray | null;\n while ((match = importRe.exec(content)) !== null) {\n const moduleId = match[1];\n const pkgName = moduleId.split(\"/\").slice(0, 2).join(\"/\");\n const pkgRoot = resolvePackageDir(pkgName, cwd);\n if (!pkgRoot) {\n issues.push(`${file}: missing asset package ${pkgName}`);\n continue;\n }\n const candidates = assetModuleCandidates(pkgRoot, moduleId);\n if (!candidates.some((candidate) => fs.existsSync(candidate))) {\n issues.push(`${file}: missing asset module ${moduleId}`);\n }\n }\n }\n\n return issues;\n}\n","// Shared `.iui/generated` layout used by component slots and asset bindings.\n\nimport path from \"node:path\";\nimport { resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\n/** IUI metadata root for the current package (same as component slot codegen). */\nexport function iuiProjectRoot(cwd: string): string {\n return resolveIuiProjectRoot(cwd);\n}\n\nexport function generatedIuiDir(cwd: string): string {\n return path.join(iuiProjectRoot(cwd), \".iui\", \"generated\");\n}\n\nexport function generatedSlotsDir(cwd: string): string {\n return path.join(generatedIuiDir(cwd), \"slots\");\n}\n\nexport function generatedAssetsDir(cwd: string): string {\n return path.join(generatedIuiDir(cwd), \"assets\");\n}\n","// ─── Monorepo workspace bootstrap ────────────────────────────────────────────\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport {\n findWorkspaceRoot,\n listWorkspacePackageDirs,\n resolveIuiProjectRoot,\n} from \"../utils/workspace.js\";\nimport { ensureProjectNpmrc } from \"../utils/filesystem.js\";\nimport { writeSlotBridge } from \"./slots.js\";\nimport { writeProjectBootstrapArtifacts } from \"./bootstrap.js\";\nimport { atomicWriteJson } from \"../utils/atomic.js\";\nimport { IUI_DIR } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\n\ninterface WorkspaceManifest {\n iuiRoot: string;\n packages: string[];\n updatedAt: string;\n}\n\nfunction workspaceManifestPath(iuiRoot: string): string {\n return path.join(iuiRoot, IUI_DIR, \"workspace.json\");\n}\n\nfunction readWorkspaceManifest(iuiRoot: string): WorkspaceManifest | null {\n const p = workspaceManifestPath(iuiRoot);\n if (!fs.existsSync(p)) return null;\n try {\n const raw = fs.readJsonSync(p) as Partial<WorkspaceManifest>;\n if (!Array.isArray(raw.packages)) return null;\n return {\n iuiRoot: raw.iuiRoot ?? iuiRoot,\n packages: raw.packages.map(String),\n updatedAt: raw.updatedAt ?? \"\",\n };\n } catch {\n return null;\n }\n}\n\nfunction writeWorkspaceManifest(iuiRoot: string, packageDirs: string[]): void {\n const unique = [...new Set(packageDirs.map((dir) => path.resolve(dir)))];\n atomicWriteJson(workspaceManifestPath(iuiRoot), {\n iuiRoot,\n packages: unique.map((dir) => path.relative(iuiRoot, dir) || \".\"),\n updatedAt: new Date().toISOString(),\n });\n}\n\nfunction resolveRegisteredPackageDirs(iuiRoot: string): string[] {\n const resolvedRoot = path.resolve(iuiRoot);\n const manifest = readWorkspaceManifest(resolvedRoot);\n if (!manifest) return [resolvedRoot];\n\n const dirs = manifest.packages.map((rel) =>\n path.resolve(resolvedRoot, rel === \".\" ? \"\" : rel),\n );\n if (!dirs.some((dir) => path.resolve(dir) === resolvedRoot)) {\n dirs.unshift(resolvedRoot);\n }\n return dirs;\n}\n\n/** Track a workspace package that uses this IUI root (does not touch unrelated apps). */\nexport function registerWorkspacePackage(iuiRoot: string, packageDir: string): void {\n const resolvedRoot = path.resolve(iuiRoot);\n const resolvedPackage = path.resolve(packageDir);\n const existing = resolveRegisteredPackageDirs(resolvedRoot);\n if (!existing.some((dir) => path.resolve(dir) === resolvedPackage)) {\n existing.push(resolvedPackage);\n }\n writeWorkspaceManifest(resolvedRoot, existing);\n}\n\n/** Register every workspace package for shared monorepo init (--workspace). */\nexport function registerAllWorkspacePackages(iuiRoot: string): string[] {\n const resolvedRoot = path.resolve(iuiRoot);\n const workspaceRoot = findWorkspaceRoot(resolvedRoot);\n const targets = new Set<string>([resolvedRoot]);\n\n if (workspaceRoot) {\n for (const pkgDir of listWorkspacePackageDirs(workspaceRoot)) {\n targets.add(path.resolve(pkgDir));\n }\n }\n\n const dirs = [...targets];\n writeWorkspaceManifest(resolvedRoot, dirs);\n return dirs;\n}\n\n/** Bootstrap slot bridges only for packages that opted in via init/bootstrap. */\nexport function bootstrapRegisteredPackages(iuiRoot: string): string[] {\n const resolvedRoot = resolveIuiProjectRoot(iuiRoot);\n const bootstrapped: string[] = [];\n\n for (const packageDir of resolveRegisteredPackageDirs(resolvedRoot)) {\n if (!fs.existsSync(path.join(packageDir, \"package.json\"))) continue;\n ensureProjectNpmrc(packageDir);\n writeSlotBridge(packageDir, resolvedRoot);\n writeProjectBootstrapArtifacts(packageDir, resolvedRoot);\n bootstrapped.push(packageDir);\n }\n\n return bootstrapped;\n}\n\n/** Bootstrap a single workspace package that shares an ancestor IUI root. */\nexport async function bootstrapWorkspacePackage(\n packageDir: string,\n iuiRoot: string,\n): Promise<void> {\n const resolvedPackage = path.resolve(packageDir);\n const resolvedIuiRoot = resolveIuiProjectRoot(iuiRoot);\n\n if (!fs.existsSync(path.join(resolvedPackage, \"package.json\"))) {\n throw new CLIError(\n `No package.json found in ${resolvedPackage}.`,\n \"Run iui init from a workspace app directory that contains package.json.\",\n );\n }\n\n ui.heading(\"Bootstrap workspace package\");\n ui.kv(\"IUI root\", resolvedIuiRoot);\n if (resolvedPackage !== resolvedIuiRoot) {\n ui.kv(\"Package\", resolvedPackage);\n }\n\n registerWorkspacePackage(resolvedIuiRoot, resolvedPackage);\n bootstrapRegisteredPackages(resolvedIuiRoot);\n\n ui.ok(\"Slot bridge ready\");\n ui.hint(\n \"This app is linked to an existing IUI setup — packages and configs stay at the IUI root.\",\n );\n ui.nextSteps([\n 'import \"./iui/bootstrap\" in your app entry (or rely on Vite auto-wiring)',\n \"iui doctor — Verify project health\",\n \"iui list — View installed components\",\n ]);\n}\n","// ─── Generated bootstrap integration ────────────────────────────────────────\r\r\n//\r\r\n// Connects the three user configs into a single generated integration module.\r\r\n// Runtime imports the bridge at src/iui/bootstrap.ts (side-effect).\r\r\n\r\r\nimport fs from \"fs-extra\";\r\r\nimport path from \"node:path\";\r\r\nimport {\r\r\n ASSETS_CONFIG_FILE,\r\r\n COMPONENT_CONFIG_FILE,\r\r\n PROJECT_CONFIG_FILE,\r\r\n} from \"../constants.js\";\r\r\nimport { readProjectMeta } from \"../utils/filesystem.js\";\r\r\nimport { safeWriteFile } from \"../utils/security/fsSafe.js\";\r\r\nimport { relativeImportPath } from \"../utils/workspace.js\";\r\r\nimport type { ProjectConfigPaths } from \"../types.js\";\r\r\nimport { generatedIuiDir } from \"./generated-paths.js\";\r\r\n\r\r\nconst BOOTSTRAP_GENERATED_FILE = \"bootstrap.generated.tsx\";\r\r\n\r\r\nfunction bridgeBootstrapFilePath(cwd: string): string {\r\r\n return path.join(cwd, \"src\", \"iui\", \"bootstrap.ts\");\r\r\n}\r\r\n\r\r\nexport function bootstrapGeneratedPath(cwd: string = process.cwd()): string {\r\r\n return path.join(generatedIuiDir(cwd), BOOTSTRAP_GENERATED_FILE);\r\r\n}\r\r\n\r\r\n/** Resolve config paths from .iui/project.json, falling back to CLI defaults. */\r\r\nexport function resolveProjectConfigPaths(cwd: string): ProjectConfigPaths {\r\r\n const meta = readProjectMeta(cwd);\r\r\n const configs = meta?.configs;\r\r\n if (configs?.theme && configs?.assets && configs?.components) {\r\r\n return configs;\r\r\n }\r\r\n return {\r\r\n theme: PROJECT_CONFIG_FILE,\r\r\n assets: ASSETS_CONFIG_FILE,\r\r\n components: COMPONENT_CONFIG_FILE,\r\r\n };\r\r\n}\r\r\n\r\r\nfunction configImportFromGenerated(cwd: string, configRel: string): string {\r\r\n const generatedDir = path.dirname(bootstrapGeneratedPath(cwd));\r\r\n const abs = path.resolve(cwd, configRel.replace(/^\\.\\//, \"\"));\r\r\n return relativeImportPath(generatedDir, abs);\r\r\n}\r\r\n\r\r\n/** Import paths the generated bootstrap file should reference. */\r\r\nexport function expectedBootstrapImportPaths(cwd: string): ProjectConfigPaths {\r\r\n const configs = resolveProjectConfigPaths(cwd);\r\r\n return {\r\r\n theme: configImportFromGenerated(cwd, configs.theme),\r\r\n assets: configImportFromGenerated(cwd, configs.assets),\r\r\n components: configImportFromGenerated(cwd, configs.components),\r\r\n };\r\r\n}\r\r\n\r\r\n/** Emit `.iui/generated/bootstrap.generated.tsx` wiring theme + assets + components. */\r\r\nexport function writeBootstrapGenerated(cwd: string = process.cwd()): void {\r\r\n const outPath = bootstrapGeneratedPath(cwd);\r\r\n fs.ensureDirSync(path.dirname(outPath));\r\r\n\r\r\n const imports = expectedBootstrapImportPaths(cwd);\r\r\n\r\r\n const content = `// @iui-managed\r\r\n// Generated by iui CLI — do not edit manually.\r\r\n// Connects iui.config.ts + assets.config.json + component.config.ts for standard bootstrap.\r\r\n\r\r\nimport theme from \"${imports.theme}\";\r\r\nimport assets from \"${imports.assets}\";\r\r\nimport { componentConfig as projectComponentConfig } from \"${imports.components}\";\r\r\nimport {\r\r\n mergeProjectConfig,\r\r\n initFramework,\r\r\n registerBootstrapState,\r\r\n} from \"@inventive-ui/framework\";\r\r\nimport { initConfig as initSlotsConfig } from \"@inventive-ui/framework/slots\";\r\r\nimport type { IUIAssetsConfig } from \"@inventive-ui/framework/config\";\r\r\n\r\r\nimport \"./slot.generated\";\r\r\n\r\r\nconst themeConfig = (theme as { default?: typeof theme }).default ?? theme;\r\r\n\r\r\nexport const frameworkConfig = mergeProjectConfig(\r\r\n themeConfig,\r\r\n assets as IUIAssetsConfig,\r\r\n);\r\r\n\r\r\nregisterBootstrapState({\r\r\n frameworkConfig,\r\r\n componentConfig: projectComponentConfig,\r\r\n});\r\r\n\r\r\ninitFramework(frameworkConfig);\r\r\ninitSlotsConfig(frameworkConfig);\r\r\n\r\r\nexport { projectComponentConfig as componentConfig };\r\r\n`;\r\r\n\r\r\n safeWriteFile(outPath, content);\r\r\n}\r\r\n\r\r\n/** Stable app import path that side-effect-imports generated bootstrap. */\r\r\nexport function writeBootstrapBridge(packageDir: string, iuiRoot: string): void {\r\r\n const bridgePath = bridgeBootstrapFilePath(packageDir);\r\r\n const generatedFile = bootstrapGeneratedPath(iuiRoot);\r\r\n const importBase = relativeImportPath(path.dirname(bridgePath), generatedFile);\r\r\n\r\r\n fs.ensureDirSync(path.dirname(bridgePath));\r\r\n if (fs.existsSync(bridgePath)) {\r\r\n const existing = fs.readFileSync(bridgePath, \"utf-8\");\r\r\n if (existing.length > 0 && !/@iui-managed/.test(existing)) {\r\r\n return;\r\r\n }\r\r\n }\r\r\n\r\r\n const bridgeContent = `// Managed by iui. Do not edit manually.\r\r\n// @iui-managed\r\r\n// Standard bootstrap: wires theme + assets + component configs before IUIProvider.\r\r\n\r\r\nimport \"${importBase}\";\r\r\n`;\r\r\n\r\r\n safeWriteFile(bridgePath, bridgeContent);\r\r\n}\r\r\n\r\r\nexport function writeProjectBootstrapArtifacts(\r\r\n packageDir: string,\r\r\n iuiRoot: string,\r\r\n): void {\r\r\n writeBootstrapGenerated(iuiRoot);\r\r\n writeBootstrapBridge(packageDir, iuiRoot);\r\r\n}\r\r\n","// ─── Per-invocation session (auth + optional license cache) ─────────────────\r\n\r\nimport type { GlobalConfig } from \"../types.js\";\r\nimport type { LicenseInfo } from \"../types.js\";\r\nimport { requireValidatedAuthCached } from \"./auth.js\";\r\nimport { validateLicense } from \"./license.js\";\r\n\r\nexport interface InvocationSession {\r\n auth: GlobalConfig;\r\n license?: LicenseInfo;\r\n}\r\n\r\nlet activeSession: InvocationSession | null = null;\r\nlet licenseCache: { token: string; data: LicenseInfo; at: number } | null = null;\r\nconst LICENSE_CACHE_TTL_MS = 60_000;\r\n\r\nexport function getSession(): InvocationSession | null {\r\n return activeSession;\r\n}\r\n\r\nexport function setSession(session: InvocationSession): void {\r\n activeSession = session;\r\n}\r\n\r\nexport function clearSession(): void {\r\n activeSession = null;\r\n licenseCache = null;\r\n}\r\n\r\nexport async function ensureAuthSession(): Promise<GlobalConfig> {\r\n if (activeSession?.auth?.token) {\r\n return activeSession.auth;\r\n }\r\n const auth = await requireValidatedAuthCached();\r\n setSession({ auth });\r\n return auth;\r\n}\r\n\r\nexport async function ensureLicenseSession(force = false): Promise<LicenseInfo> {\r\n const auth = await ensureAuthSession();\r\n const now = Date.now();\r\n if (\r\n !force &&\r\n licenseCache &&\r\n licenseCache.token === auth.token &&\r\n now - licenseCache.at < LICENSE_CACHE_TTL_MS\r\n ) {\r\n if (activeSession) activeSession.license = licenseCache.data;\r\n return licenseCache.data;\r\n }\r\n const license = await validateLicense(auth.token);\r\n licenseCache = { token: auth.token, data: license, at: now };\r\n setSession({ auth, license });\r\n return license;\r\n}\r\n","function getOrdinalSuffix(day: number): string {\n const mod100 = day % 100;\n if (mod100 >= 11 && mod100 <= 13) return \"th\";\n switch (day % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n}\n\nexport function formatNaturalDateTime(value: string): string {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n\n const day = date.getDate();\n const month = date.toLocaleString(\"en-US\", { month: \"long\" });\n const year = date.getFullYear();\n const hour24 = date.getHours();\n const hour12 = hour24 % 12 || 12;\n const minute = String(date.getMinutes()).padStart(2, \"0\");\n const second = String(date.getSeconds()).padStart(2, \"0\");\n const meridiem = hour24 >= 12 ? \"PM\" : \"AM\";\n\n return `${day}${getOrdinalSuffix(day)} ${month} ${year}, ${hour12}.${minute}.${second} ${meridiem}`;\n}","// ─── Shared install preparation (registry auth + workspace sync) ─────────────\n//\n// Standard practice for monorepos (npm/pnpm/yarn): sync the workspace lockfile\n// once per command, then add packages with -w/--filter. Used by init, install,\n// assets, update, and framework flows.\n\nimport {\n ensureProjectNpmrc,\n writeGlobalNpmrcAuth,\n prepareWorkspaceForDependencyInstall,\n isInsideProject,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext, resolveIuiProjectRoot } from \"../utils/workspace.js\";\n\nexport interface InstallContextResult {\n /** Directory that owns .iui/ and package.json for installs. */\n cwd: string;\n /** When true, skip redundant workspace sync inside installPackageWithFallback. */\n skipWorkspacePrepare: boolean;\n}\n\n/**\n * Resolve the package directory for install commands.\n * Inside an initialized project, targets the app that owns `.iui/`.\n */\nexport function resolveInstallTargetCwd(startCwd: string = process.cwd()): string {\n if (isInsideProject(startCwd)) {\n return resolveIuiProjectRoot(startCwd);\n }\n return startCwd;\n}\n\n/**\n * Configure npm registry auth and sync monorepo lockfile before adding deps.\n * Call once at the start of an install command; pass `skipWorkspacePrepare` through.\n */\nexport function prepareInstallContext(\n token: string,\n startCwd?: string,\n): InstallContextResult {\n const cwd = resolveInstallTargetCwd(startCwd ?? process.cwd());\n ensureProjectNpmrc(cwd);\n writeGlobalNpmrcAuth(token);\n\n let skipWorkspacePrepare = false;\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n skipWorkspacePrepare = true;\n }\n\n return { cwd, skipWorkspacePrepare };\n}\n","// ─── Asset Package Service ───────────────────────────────────────────────────\n//\n// Installs / removes first-party asset packages (icons, illustrations, etc.)\n// via npm and registers their slots locally.\n\nimport ora from \"ora\";\nimport {\n readPackageManifest,\n writePackageManifest,\n writeAssetsConfig,\n detectPackageManager,\n collectInstalledIconLibraries,\n persistPreferredIconLibrary,\n persistPreferredIllustrationStyle,\n persistPreferredEmojiFamily,\n readAssetsConfigIconLibrary,\n readAssetsConfigIllustrationStyle,\n readAssetsConfigEmojiFamily,\n prepareWorkspaceForDependencyInstall,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext } from \"../utils/workspace.js\";\nimport { installPackageWithFallback } from \"./package-install.js\";\nimport { ensureSlotRegistry } from \"./slot-registry.js\";\nimport { notifyIfUpdateAvailable } from \"./version-check.js\";\nimport { ASSET_PACKAGES_MAP, ASSET_PACKAGE_TO_SLOT_CONFIG } from \"../constants.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { uninstallPackage } from \"../utils/security/process.js\";\nimport {\n promptChooseDefaultIconLibrary,\n promptChooseIllustrationStyle,\n promptChooseEmojiFamily,\n} from \"../utils/prompts.js\";\n\nexport interface AssetInstallOptions {\n token: string;\n source?: \"api\" | \"registry\";\n cwd?: string;\n forceLatest?: boolean;\n /** Exact semver to install (from registry API during `iui update`). */\n targetVersion?: string;\n /** Caller already synced the workspace lockfile before installing. */\n skipWorkspacePrepare?: boolean;\n}\n\n/**\n * Install a single asset package by its id (e.g. \"icons-lucide\").\n */\nexport async function installAssetPackage(\n packageId: string,\n opts: AssetInstallOptions,\n): Promise<{ previousVersion: string | null; version: string }> {\n const cwd = opts.cwd ?? process.cwd();\n const forceLatest = opts.forceLatest === true;\n const source =\n (opts.source ?? (process.env.IUI_INSTALL_SOURCE as AssetInstallOptions[\"source\"]) ?? \"api\") ===\n \"registry\"\n ? \"registry\"\n : \"api\";\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) throw new CLIError(`Unknown asset package: \"${packageId}\"`);\n\n const spinner = ora({ text: `Installing ${def.displayName}…`, prefixText: \" \" }).start();\n\n try {\n const manifestBefore = readPackageManifest(cwd);\n const previousVersion = manifestBefore[packageId]?.version ?? null;\n const { version: installedVersion, method } = await installPackageWithFallback(\n { packageShortName: packageId, npmName: def.npm },\n {\n token: opts.token,\n source,\n cwd,\n forceLatest,\n targetVersion: opts.targetVersion,\n skipIfInstalled: !forceLatest,\n skipWorkspacePrepare: opts.skipWorkspacePrepare,\n },\n );\n if (method === \"already-installed\") {\n spinner.stop();\n await notifyIfUpdateAvailable(opts.token, packageId, installedVersion, def.displayName);\n spinner.start();\n }\n\n // 2. Local manifest\n const wasAlreadyInManifest = Boolean(manifestBefore[packageId]);\n const manifest = { ...manifestBefore };\n manifest[packageId] = {\n version: installedVersion,\n installedAt: new Date().toISOString(),\n };\n writePackageManifest(manifest, cwd);\n\n // 2b. Default icon library: after manifest includes the new package, resolve\n // among *all* installed icon sets (prompt if >1 and this id was newly added).\n const installingLibrary = (ASSET_PACKAGE_TO_SLOT_CONFIG[packageId] as { library?: string })\n ?.library;\n if (def.slotType === \"icon\" && installingLibrary) {\n const iconLibs = collectInstalledIconLibraries(cwd);\n if (iconLibs.length === 0) {\n persistPreferredIconLibrary(installingLibrary, cwd);\n } else if (wasAlreadyInManifest) {\n // Reinstall / bump same asset — do not change stored default\n } else if (iconLibs.length === 1) {\n persistPreferredIconLibrary(iconLibs[0], cwd);\n } else {\n spinner.stop();\n try {\n const currentDefault = readAssetsConfigIconLibrary(cwd) ?? null;\n const chosen = await promptChooseDefaultIconLibrary(\n iconLibs,\n currentDefault,\n installingLibrary,\n );\n persistPreferredIconLibrary(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n if (packageId === \"illustrations\" && def.slotType === \"illustration\") {\n if (wasAlreadyInManifest) {\n // Reinstall / bump — keep stored style\n } else {\n spinner.stop();\n try {\n const currentStyle = readAssetsConfigIllustrationStyle(cwd);\n const chosen = await promptChooseIllustrationStyle(currentStyle);\n persistPreferredIllustrationStyle(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n if (packageId === \"emoji\" && def.slotType === \"emoji\") {\n if (wasAlreadyInManifest) {\n // Reinstall / bump — keep stored family and skin tone\n } else {\n spinner.stop();\n try {\n const currentFamily = readAssetsConfigEmojiFamily(cwd);\n const chosen = await promptChooseEmojiFamily(currentFamily);\n persistPreferredEmojiFamily(chosen, cwd);\n } finally {\n spinner.text = `Finishing ${def.displayName}…`;\n spinner.start();\n }\n }\n }\n\n // 3. Reconcile slot manifest, helper, and assets config\n await ensureSlotRegistry({ cwd, quiet: true, mode: \"repair\" });\n writeAssetsConfig(cwd);\n\n const versionMessage =\n forceLatest && previousVersion\n ? `${def.displayName} ${ui.dim(`v${previousVersion} → v${installedVersion}`)}`\n : `${def.displayName} installed`;\n spinner.succeed(versionMessage);\n return { previousVersion, version: installedVersion };\n } catch (error) {\n if (!(error instanceof CLIError)) spinner.fail(`Failed to install ${def.displayName}`);\n throw error;\n }\n}\n\n/**\n * Install multiple asset packages.\n */\nexport async function installAssetPackages(\n ids: string[],\n opts: AssetInstallOptions,\n): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n let skipWorkspacePrepare = opts.skipWorkspacePrepare === true;\n if (!skipWorkspacePrepare && isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n skipWorkspacePrepare = true;\n }\n\n for (const id of ids) {\n await installAssetPackage(id, { ...opts, cwd, skipWorkspacePrepare });\n }\n}\n\n/**\n * Remove an asset package.\n */\nexport async function removeAssetPackage(\n packageId: string,\n opts: AssetInstallOptions,\n): Promise<void> {\n const cwd = opts.cwd ?? process.cwd();\n const def = ASSET_PACKAGES_MAP[packageId];\n if (!def) throw new CLIError(`Unknown asset package: \"${packageId}\"`);\n\n const manifest = readPackageManifest(cwd);\n if (!manifest[packageId]) throw new CLIError(`${def.displayName} is not installed.`);\n\n // npm uninstall\n const pm = detectPackageManager(cwd);\n try {\n uninstallPackage(pm, def.npm, cwd);\n } catch {\n ui.warn(`npm remove failed for ${def.npm}; removed local manifest entry.`);\n }\n\n delete manifest[packageId];\n writePackageManifest(manifest, cwd);\n await ensureSlotRegistry({ cwd, quiet: true, mode: \"repair\" });\n writeAssetsConfig(cwd);\n\n ui.ok(`${def.displayName} removed`);\n}\n\n","// ─── iui assets ──────────────────────────────────────────────────────────────\n//\n// Subcommands: remove | list (install via `iui install assets`)\n\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n installAssetPackages,\n removeAssetPackage,\n} from \"../services/assets.js\";\nimport {\n readPackageManifest,\n isInsideProject,\n} from \"../utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"../utils/workspace.js\";\nimport { confirm, promptAssetSelection } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport {\n ASSET_PACKAGES,\n ASSET_PACKAGES_MAP,\n ASSET_CATEGORY_LABELS,\n type AssetCategory,\n} from \"../constants.js\";\n\nexport async function assetsAddCommand(\n names: string[],\n opts?: { source?: string },\n): Promise<void> {\n try {\n ui.heading(\"Add Asset Packages\");\n\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n\n const auth = await ensureAuthSession();\n ui.step(\"Validating license…\");\n await ensureLicenseSession();\n ui.ok(\"License valid\");\n\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n const installed = readPackageManifest(installCwd);\n\n let selected: string[];\n\n if (names.length > 0) {\n // Validate provided names\n const invalid = names.filter((n) => !ASSET_PACKAGES_MAP[n]);\n if (invalid.length > 0) {\n throw new CLIError(\n `Unknown asset package(s): ${invalid.join(\", \")}`,\n \"iui assets list\",\n );\n }\n const alreadyInstalled = names.filter((n) => installed[n]);\n if (alreadyInstalled.length > 0) {\n ui.warn(\n `Already installed: ${alreadyInstalled.map((n) => ASSET_PACKAGES_MAP[n]?.displayName ?? n).join(\", \")}`,\n );\n }\n selected = names.filter((n) => !installed[n]);\n } else {\n selected = await promptAssetSelection(Object.keys(installed));\n }\n\n if (selected.length === 0) {\n ui.info(\"No new asset packages to install.\");\n return;\n }\n\n ui.newline();\n ui.subheading(\n `Installing ${selected.length} asset package${selected.length > 1 ? \"s\" : \"\"}…`,\n );\n ui.newline();\n\n const source =\n (opts?.source ?? process.env.IUI_INSTALL_SOURCE ?? \"api\").toLowerCase() ===\n \"registry\"\n ? \"registry\"\n : \"api\";\n\n await installAssetPackages(selected, {\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n\n ui.done(\n `${selected.length} asset package${selected.length > 1 ? \"s\" : \"\"} installed!`,\n );\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui assets remove <package> ─────────────────────────────────────────────\n\nexport async function assetsRemoveCommand(name: string): Promise<void> {\n try {\n ui.heading(\"Remove Asset Package\");\n if (!isInsideProject()) {\n throw new CLIError(\n \"Not an Inventive UI project.\",\n \"iui init\",\n );\n }\n\n const def = ASSET_PACKAGES_MAP[name];\n const displayName = def?.displayName ?? name;\n const shouldRemove = await confirm(\n `Remove ${displayName} from this project?`,\n false,\n );\n if (!shouldRemove) {\n ui.info(\"Cancelled.\");\n return;\n }\n\n const auth = await ensureAuthSession();\n\n await removeAssetPackage(name, {\n token: auth.token,\n });\n\n ui.done(\"Asset package removed.\");\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui assets list ─────────────────────────────────────────────────────────\n\nexport async function assetsListCommand(): Promise<void> {\n try {\n ui.heading(\"Asset Packages\");\n\n const installed = isInsideProject() ? readPackageManifest() : {};\n\n const categories = [\n ...new Set(ASSET_PACKAGES.map((p) => p.category)),\n ] as AssetCategory[];\n\n for (const cat of categories) {\n ui.subheading(ASSET_CATEGORY_LABELS[cat]);\n ui.newline();\n\n const pkgs = ASSET_PACKAGES.filter((p) => p.category === cat);\n for (const pkg of pkgs) {\n const status = installed[pkg.id]\n ? ui.success(\"✔ installed\")\n : ui.dim(\"not installed\");\n ui.bulletItem(`${pkg.displayName.padEnd(24)} ${status} ${ui.dim(`[${pkg.id}] · ${pkg.slotType}`)}`);\n }\n ui.newline();\n }\n\n ui.info(\n `${ASSET_PACKAGES.length} packages available · ${Object.keys(installed).length} installed`,\n );\n ui.hint(\"Run: iui install assets\");\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui logout ──────────────────────────────────────────────────────────────\n\nimport { logout } from \"../services/auth.js\";\nimport { clearSession } from \"../services/session.js\";\nimport * as ui from \"../utils/ui.js\";\n\nexport async function logoutCommand(): Promise<void> {\n ui.heading(\"Logout\");\n logout();\n clearSession();\n ui.ok(\"Credentials removed (including npm registry auth)\");\n ui.newline();\n}\n","// ─── iui whoami ──────────────────────────────────────────────────────────────\n\nimport { ensureAuthSession } from \"../services/session.js\";\nimport {\n validateLicense,\n formatSeatUsage,\n formatPlanLabel,\n} from \"../services/license.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nexport async function whoamiCommand(): Promise<void> {\n try {\n ui.heading(\"Signed In As\");\n\n const auth = await ensureAuthSession();\n\n ui.kv(\"GitHub\", auth.github_id || \"—\");\n ui.kv(\"Email\", auth.email || \"—\");\n ui.kv(\"Role\", (auth.role ?? \"user\").toUpperCase());\n if (auth.plan_type) {\n ui.kv(\"Plan\", auth.plan_type === \"team\" ? \"Team\" : \"Individual\");\n }\n\n try {\n const license = await validateLicense(auth.token);\n\n ui.newline();\n ui.subheading(\"License\");\n ui.kv(\"Plan\", formatPlanLabel(license.plan));\n ui.kv(\"Status\", license.valid ? ui.success(\"Active\") : ui.danger(\"Inactive\"));\n ui.kv(\"Issued\", formatNaturalDateTime(license.issued_at));\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats\", seatUsage);\n }\n\n const expiresDate = new Date(license.updates_expire_at);\n const now = new Date();\n ui.newline();\n\n if (expiresDate > now) {\n const days = Math.ceil(\n (expiresDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24),\n );\n ui.ok(\n `Update window active — ${ui.chalk.white.bold(`${days}`)} day${days !== 1 ? \"s\" : \"\"} remaining`,\n );\n } else {\n ui.warn(\"Update window expired. Installed components still work.\");\n ui.hint(\"Renew at inventiveui.com\");\n }\n } catch {\n ui.newline();\n ui.hint(\"Full license details unavailable right now.\");\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui devices ─────────────────────────────────────────────────────────────\n\nimport inquirer from \"inquirer\";\nimport { requireAuth } from \"../services/auth.js\";\nimport { listDevices, revokeDevice } from \"../services/auth.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport type { DeviceInfo } from \"../types.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\nimport { sanitizeTerminalOutput } from \"../utils/security/terminal.js\";\nimport chalk from \"chalk\";\n\nconst PROMPT_PREFIX = ` ${ui.brand.bold(\"◆\")}`;\n\n// ── iui devices list ──────────────────────────────────────────────────────────\n\nexport async function devicesListCommand(): Promise<void> {\n try {\n ui.heading(\"Authorized Devices\");\n\n const auth = requireAuth();\n\n ui.step(\"Fetching devices…\");\n const devices = await listDevices(auth.token);\n\n if (devices.length === 0) {\n ui.warn(\"No authorized devices found\");\n ui.hint(\"Run iui login to register this device\");\n ui.newline();\n return;\n }\n\n ui.newline();\n\n for (let i = 0; i < devices.length; i++) {\n const device = devices[i];\n const lastUsed = device.lastUsedAt ? formatNaturalDateTime(device.lastUsedAt) : \"never\";\n const registered = formatNaturalDateTime(device.createdAt);\n const isLast = i === devices.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n\n console.log(` ${connector} ${ui.chalk.white.bold(sanitizeTerminalOutput(device.name))}`);\n console.log(` ${pipe} ${ui.dim(\"registered\")} ${registered}`);\n console.log(` ${pipe} ${ui.dim(\"last used \")} ${lastUsed}`);\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n ui.hint(\n `${devices.length} device${devices.length !== 1 ? \"s\" : \"\"} registered — use iui devices revoke to remove one`,\n );\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui devices revoke ────────────────────────────────────────────────────────\n\nexport async function devicesRevokeCommand(deviceId?: string): Promise<void> {\n try {\n ui.heading(\"Revoke Device\");\n\n const auth = requireAuth();\n\n let targetId = deviceId?.trim();\n let targetName = targetId ?? \"\";\n\n if (!targetId) {\n ui.step(\"Fetching devices…\");\n const devices = await listDevices(auth.token);\n\n if (devices.length === 0) {\n ui.warn(\"No devices to revoke\");\n ui.newline();\n return;\n }\n\n console.log();\n console.log(` ${ui.brand.bold(\"◆\")} ${chalk.white.bold(\"Choose a device to revoke\")}`);\n console.log(` ${ui.dim(\"The device will need to run iui login again.\")}`);\n console.log();\n\n const { chosen } = await inquirer.prompt<{ chosen: string }>([\n {\n type: \"list\",\n name: \"chosen\",\n message: chalk.dim(\"Select device\"),\n prefix: PROMPT_PREFIX,\n choices: devices.map((d: DeviceInfo) => ({\n name: `${sanitizeTerminalOutput(d.name).padEnd(28)} ${ui.dim(\"last: \" + (d.lastUsedAt ? formatNaturalDateTime(d.lastUsedAt) : \"never\"))}`,\n value: d.id,\n short: sanitizeTerminalOutput(d.name),\n })),\n },\n ]);\n\n targetId = chosen;\n targetName = devices.find((d) => d.id === chosen)?.name ?? chosen;\n }\n\n if (!targetId) {\n throw new CLIError(\"No device selected.\");\n }\n\n const { confirmed } = await inquirer.prompt<{ confirmed: boolean }>([\n {\n type: \"confirm\",\n name: \"confirmed\",\n message: chalk.white(`Revoke \"${sanitizeTerminalOutput(targetName)}\"?`),\n prefix: PROMPT_PREFIX,\n default: false,\n },\n ]);\n\n if (!confirmed) {\n ui.hint(\"Cancelled.\");\n ui.newline();\n return;\n }\n\n ui.step(\"Revoking device…\");\n await revokeDevice(auth.token, targetId);\n\n ui.ok(`\"${sanitizeTerminalOutput(targetName)}\" has been revoked`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui team ────────────────────────────────────────────────────────────────\n\nimport {\n addLicenseUser,\n listLicenseUsers,\n removeLicenseUser,\n} from \"../services/license.js\";\nimport { ensureAuthSession } from \"../services/session.js\";\nimport { promptText, confirm } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError, handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nfunction assertTeamPlan(planType: string | undefined): void {\n if (planType === \"individual\") {\n throw new CLIError(\"This license is an Individual plan. Team seat management is unavailable.\");\n }\n}\n\nasync function resolveEmailInput(prompt: string, hint: string, provided?: string): Promise<string> {\n const normalized = provided?.trim().toLowerCase();\n if (normalized) return normalized;\n return promptText(prompt, hint, \"user@example.com\", (v) =>\n v.trim().length > 3 && v.includes(\"@\") ? true : \"Please enter a valid email address.\",\n );\n}\n\nexport async function teamListCommand(includeInactive = false): Promise<void> {\n try {\n ui.heading(\"Team Seats\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n const seats = await listLicenseUsers(auth.token, includeInactive);\n\n ui.kv(\"Seats used\", `${seats.active_seats} of ${seats.seat_limit}`);\n ui.kv(\"Your role\", (auth.role ?? \"user\").toUpperCase());\n ui.newline();\n\n if (seats.users.length === 0) {\n ui.warn(\"No seats found.\");\n ui.hint(\"Add a seat with: iui team add <email>\");\n ui.newline();\n return;\n }\n\n for (let i = 0; i < seats.users.length; i++) {\n const seat = seats.users[i];\n const isLast = i === seats.users.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n const status = seat.isActive ? ui.success(\"active\") : ui.danger(\"inactive\");\n const added = formatNaturalDateTime(seat.addedAt);\n\n console.log(` ${connector} ${ui.chalk.white(seat.email)} ${status}`);\n console.log(` ${pipe} ${ui.dim(\"added\")} ${added}`);\n if (seat.removedAt) {\n const removed = formatNaturalDateTime(seat.removedAt);\n console.log(` ${pipe} ${ui.dim(\"removed\")} ${removed}`);\n }\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\nexport async function teamAddCommand(emailArg?: string): Promise<void> {\n try {\n ui.heading(\"Add Team Seat\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n if (auth.role !== \"admin\") {\n throw new CLIError(\"Only the license admin can add seats.\");\n }\n\n const email = await resolveEmailInput(\n \"Add team member\",\n \"Enter the GitHub-linked email of the person you want to grant access.\",\n emailArg,\n );\n\n ui.step(`Adding seat for ${ui.accent(email)}…`);\n const result = await addLicenseUser(auth.token, email);\n\n ui.ok(`Seat granted to ${email}`);\n ui.kv(\"Seats used\", `${result.active_seats} of ${result.seat_limit}`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\nexport async function teamRemoveCommand(emailArg?: string): Promise<void> {\n try {\n ui.heading(\"Remove Team Seat\");\n\n const auth = await ensureAuthSession();\n assertTeamPlan(auth.plan_type);\n if (auth.role !== \"admin\") {\n throw new CLIError(\"Only the license admin can remove seats.\");\n }\n\n const email = await resolveEmailInput(\n \"Remove team member\",\n \"This will revoke the person's access to Inventive UI packages.\",\n emailArg,\n );\n\n const ok = await confirm(`Remove seat for ${email}?`, false);\n if (!ok) {\n ui.hint(\"Cancelled.\");\n ui.newline();\n return;\n }\n\n ui.step(`Removing seat for ${ui.accent(email)}…`);\n const result = await removeLicenseUser(auth.token, email);\n\n ui.ok(`Seat removed for ${email}`);\n ui.kv(\"Seats used\", `${result.active_seats} of ${result.seat_limit}`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui deploy-token ────────────────────────────────────────────────────────\n\nimport { requireAuth, listDeployTokens, createDeployToken, revokeDeployToken } from \"../services/auth.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { CLIError, handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\nimport { sanitizeTerminalOutput, isInteractiveSession } from \"../utils/security/terminal.js\";\n\nfunction normalizePackagesArg(value?: string): string | string[] {\n if (!value || value.trim() === \"\" || value.trim() === \"*\") return \"*\";\n const items = value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (items.length === 0) return \"*\";\n return Array.from(new Set(items));\n}\n\nfunction parseDays(input?: string): number {\n if (!input) return 7;\n const days = Number(input);\n if (!Number.isInteger(days) || days < 1 || days > 30) {\n throw new CLIError(\"--days must be an integer between 1 and 30.\");\n }\n return days;\n}\n\nfunction formatPackages(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(\", \");\n return value;\n}\n\nfunction statusBadge(status: string): string {\n if (status === \"active\") return ui.success(\"active\");\n if (status === \"revoked\") return ui.danger(\"revoked\");\n return ui.warning(status);\n}\n\n// ── iui deploy-token list ─────────────────────────────────────────────────────\n\nexport async function deployTokenListCommand(): Promise<void> {\n try {\n ui.heading(\"Deploy Tokens\");\n\n const auth = requireAuth();\n ui.step(\"Fetching deploy tokens…\");\n\n const tokens = await listDeployTokens(auth.token);\n if (tokens.length === 0) {\n ui.warn(\"No deploy tokens found\");\n ui.hint(\"Create one with: iui deploy-token create\");\n ui.newline();\n return;\n }\n\n ui.newline();\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const isLast = i === tokens.length - 1;\n const connector = isLast ? ui.dim(\"└\") : ui.dim(\"├\");\n const pipe = isLast ? \" \" : `${ui.dim(\"│\")} `;\n\n console.log(\n ` ${connector} ${ui.chalk.white.bold(sanitizeTerminalOutput(token.name))} ${statusBadge(token.status)}`,\n );\n console.log(` ${pipe} ${ui.dim(\"scope \")} ${token.scope}`);\n console.log(` ${pipe} ${ui.dim(\"packages \")} ${formatPackages(token.packages)}`);\n console.log(` ${pipe} ${ui.dim(\"expires \")} ${formatNaturalDateTime(token.expires_at)}`);\n console.log(\n ` ${pipe} ${ui.dim(\"last used \")} ${token.last_used_at ? formatNaturalDateTime(token.last_used_at) : \"never\"}`,\n );\n if (!isLast) console.log(` ${ui.dim(\"│\")}`);\n }\n\n ui.newline();\n ui.hint(`To revoke: iui deploy-token revoke <token-id>`);\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui deploy-token create ───────────────────────────────────────────────────\n\nexport async function deployTokenCreateCommand(\n name?: string,\n opts?: { days?: string; packages?: string },\n): Promise<void> {\n try {\n ui.heading(\"Create Deploy Token\");\n\n const auth = requireAuth();\n const expiresInDays = parseDays(opts?.days);\n const packages = normalizePackagesArg(opts?.packages);\n\n if (packages === \"*\" && isInteractiveSession() && process.env.IUI_CI !== \"1\") {\n ui.warn(\"Token will allow access to all registry packages (*).\");\n ui.hint(\"Prefer a comma-separated package list for CI when possible.\");\n }\n\n ui.step(`Creating token — expires in ${expiresInDays} day${expiresInDays !== 1 ? \"s\" : \"\"}…`);\n const token = await createDeployToken(auth.token, {\n name: name?.trim() || undefined,\n expiresInDays,\n packages,\n });\n\n ui.ok(\"Deploy token created\");\n ui.kv(\"Name\", token.name);\n ui.kv(\"Scope\", token.scope);\n ui.kv(\"Packages\", formatPackages(token.packages));\n ui.kv(\"Expires\", formatNaturalDateTime(token.expires_at));\n\n ui.newline();\n ui.warn(\"This token is shown once only. Copy it to your secret manager now.\");\n ui.boxMessage(\"IUI_DEPLOY_TOKEN\", [token.token]);\n\n ui.nextSteps([\n \"Set IUI_DEPLOY_TOKEN in your CI environment or deploy platform\",\n \"Ensure project .npmrc has @inventive-ui scope pointing to the API\",\n \"Run iui deploy-token list to audit active tokens\",\n ]);\n } catch (error) {\n handleError(error);\n }\n}\n\n// ── iui deploy-token revoke ───────────────────────────────────────────────────\n\nexport async function deployTokenRevokeCommand(tokenId?: string): Promise<void> {\n try {\n ui.heading(\"Revoke Deploy Token\");\n\n const auth = requireAuth();\n const id = tokenId?.trim();\n if (!id) {\n throw new CLIError(\"Missing token id.\", \"iui deploy-token revoke <token-id>\");\n }\n\n ui.step(\"Revoking token…\");\n await revokeDeployToken(auth.token, id);\n\n ui.ok(\"Deploy token revoked\");\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui setup ───────────────────────────────────────────────────────────────\n//\n// Clone-to-green for teammates: configure registry, install deps, run doctor.\n\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport {\n detectPackageManagerWithMeta,\n ensureGitignoreHasNpmrc,\n ensureGitignoreHasIuiBuildCache,\n ensureProjectNpmrc,\n findWorkspaceRoot,\n hasPackageJson,\n isInsideProject,\n listIuiInitializedPackages,\n resolveDependencyInstallRoot,\n resolveSetupDoctorTargets,\n runSyncInstall,\n syncInstallCommand,\n writeGlobalNpmrcAuth,\n} from \"../utils/filesystem.js\";\nimport { ensureAuthSession } from \"../services/session.js\";\nimport { doctorCommand } from \"./doctor.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError, formatExecSyncError } from \"../utils/errors.js\";\n\nexport type SetupOptions = {\n fix?: boolean;\n yes?: boolean;\n};\n\nfunction detectDevScript(cwd: string): string | null {\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkg = fs.readJsonSync(pkgPath) as { scripts?: Record<string, string> };\n if (pkg.scripts?.dev) return \"npm run dev\";\n if (pkg.scripts?.start) return \"npm run start\";\n } catch {\n return null;\n }\n return null;\n}\n\nfunction relativePackageLabel(installRoot: string, packageDir: string): string {\n const rel = path.relative(installRoot, packageDir);\n return rel && rel !== \".\" ? rel : path.basename(packageDir);\n}\n\nexport async function setupCommand(opts?: SetupOptions): Promise<void> {\n try {\n ui.heading(\"Project Setup\");\n\n const cwd = process.cwd();\n const installRoot = resolveDependencyInstallRoot(cwd);\n const workspaceRoot = findWorkspaceRoot(cwd);\n const inMonorepo = workspaceRoot !== null;\n const installFromChild =\n inMonorepo && path.resolve(installRoot) !== path.resolve(cwd);\n\n if (!hasPackageJson(cwd) && !hasPackageJson(installRoot)) {\n throw new CLIError(\n \"No package.json found in the current directory.\",\n \"cd into your project root or use -C <dir>\",\n );\n }\n\n const initialized =\n isInsideProject(cwd) || listIuiInitializedPackages(cwd).length > 0;\n if (!initialized) {\n ui.warn(\"This directory is not initialized with Inventive UI (.iui missing).\");\n ui.hint(\n \"If this is a new project, run iui init. If joining a team repo, ask the admin to commit .iui/ from init.\",\n );\n } else if (inMonorepo && !isInsideProject(cwd)) {\n const apps = listIuiInitializedPackages(cwd).map((dir) =>\n relativePackageLabel(installRoot, dir),\n );\n ui.hint(\n `Monorepo detected — IUI apps: ${apps.join(\", \")}. Dependencies install at the workspace root.`,\n );\n }\n\n ui.step(\"Authenticating…\");\n const auth = await ensureAuthSession();\n writeGlobalNpmrcAuth(auth.token);\n ui.ok(`Signed in as ${ui.accent(auth.github_id ?? \"authenticated user\")}`);\n\n ui.step(\"Configuring npm registry…\");\n ensureProjectNpmrc(installRoot);\n ensureGitignoreHasNpmrc(installRoot);\n ensureGitignoreHasIuiBuildCache(installRoot);\n ui.ok(\"Project .npmrc configured for @inventive-ui (scope only — no secrets in repo)\");\n\n const { pm, warnings, source } = detectPackageManagerWithMeta(cwd);\n for (const w of warnings) ui.warn(w);\n ui.kv(\"Package manager\", `${pm} (${source})`);\n if (installFromChild) {\n const rel = path.relative(cwd, installRoot) || \".\";\n ui.kv(\"Install directory\", rel === \"..\" || rel.includes(\"..\") ? installRoot : rel);\n }\n\n const installCmd = syncInstallCommand(pm);\n const installSpinner = ora({\n text: `Installing dependencies (${installCmd})…`,\n prefixText: \" \",\n }).start();\n\n try {\n runSyncInstall(pm, installRoot);\n installSpinner.succeed(\"Dependencies installed\");\n } catch (err) {\n installSpinner.fail(\"Dependency install failed\");\n const detail = formatExecSyncError(err);\n const manual =\n path.resolve(installRoot) === path.resolve(cwd)\n ? installCmd\n : `cd ${JSON.stringify(installRoot)} && ${installCmd}`;\n throw new CLIError(\n detail\n ? `Could not install project dependencies.\\n${detail}`\n : \"Could not install project dependencies.\",\n `Run manually: ${manual}`,\n );\n }\n\n ui.newline();\n ui.step(\"Running diagnostics…\");\n await doctorCommand({ fix: opts?.fix === true });\n\n const doctorTargets = resolveSetupDoctorTargets(cwd);\n const devCmd = detectDevScript(\n isInsideProject(cwd) ? cwd : (doctorTargets[0] ?? cwd),\n );\n const steps: string[] = [];\n if (!initialized) {\n steps.push(\"iui init — Initialize if this repo is missing .iui/\");\n }\n if (inMonorepo) {\n steps.push(\"cd apps/docs && npm run dev — Docs app\");\n steps.push(\"cd apps/landing && npm run dev — Landing app\");\n } else if (devCmd) {\n steps.push(`${devCmd} — Start the dev server`);\n }\n steps.push(\"iui doctor — Re-check project health\");\n\n ui.nextSteps(steps);\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui doctor ──────────────────────────────────────────────────────────────\n//\n// Multi-point health check for the current project (monorepo-aware).\n\nimport path from \"node:path\";\nimport { getAuthConfig } from \"../services/auth.js\";\nimport { formatSeatUsage, validateLicense, formatPlanLabel } from \"../services/license.js\";\nimport { pingRegistry } from \"../services/registry.js\";\nimport {\n checkFrameworkInstalled,\n getFrameworkInstallStatus,\n getFrameworkUpdateBaselineVersion,\n getReactStatus,\n getReactDomStatus,\n getViteStatus,\n} from \"../services/framework.js\";\nimport {\n checkPackageCompatibility,\n checkGeneratedSlotValidity,\n checkComponentConfigValidity,\n checkCompileFirstReadiness,\n checkAssetBoundBindings,\n checkIuiConfigTierBleed,\n checkAssetsConfigValidity,\n checkComponentConfigTierBleed,\n checkBootstrapSync,\n} from \"../services/health.js\";\nimport {\n isInsideProject,\n hasPackageJson,\n readComponentManifest,\n readPackageManifest,\n readSlotManifest,\n getInstalledPackageVersion,\n resolveDependencyInstallRoot,\n resolveSetupDoctorTargets,\n ensureProjectConfig,\n ensureInventiveUiViteConfig,\n ensureComponentConfig,\n readComponentPackageManifest,\n projectHasViteTooling,\n} from \"../utils/filesystem.js\";\nimport { COMPONENTS_PACKAGE } from \"../constants.js\";\nimport { getLatestVersionSafe } from \"../services/version-check.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\nimport { syncInventiveUiDeclaredDependencies } from \"../utils/declared-deps.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError } from \"../utils/errors.js\";\nimport { formatNaturalDateTime } from \"../utils/datetime.js\";\n\nexport type DoctorOptions = {\n fix?: boolean;\n /** When set, diagnose only this package (used by iui setup). */\n cwd?: string;\n /** Config-tier checks only (no auth/registry) — for CI/pre-commit. */\n configOnly?: boolean;\n};\n\nfunction runConfigTierDiagnostics(\n targetCwd: string,\n opts: DoctorOptions | undefined,\n counters: { passed: number; failed: number },\n options: { includePackageJson?: boolean; includeSlotCheck?: boolean } = {},\n): void {\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n const includePackageJson = options.includePackageJson !== false;\n const includeSlotCheck = options.includeSlotCheck === true;\n\n if (includePackageJson) {\n if (hasPackageJson(targetCwd)) pass(\"package.json found\");\n else fail(\"package.json missing\");\n }\n\n if (opts?.fix === true && includePackageJson) {\n ensureProjectConfig(targetCwd);\n if (projectHasViteTooling(targetCwd)) {\n ensureInventiveUiViteConfig(targetCwd);\n }\n ensureComponentConfig(readComponentPackageManifest(targetCwd), targetCwd);\n }\n\n // Managed-slot import checks need a consumer install of @inventive-ui/components.\n // Skip in component-library / uninitialized packages (pre-commit / CI).\n if (\n includeSlotCheck &&\n isInsideProject(targetCwd) &&\n getInstalledPackageVersion(COMPONENTS_PACKAGE, targetCwd)\n ) {\n const slotValidity = checkGeneratedSlotValidity(targetCwd);\n if (slotValidity.ok) {\n pass(slotValidity.summary);\n } else {\n fail(slotValidity.summary);\n if (slotValidity.details) {\n for (const line of slotValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n ui.hint(\"Fix: reinstall @inventive-ui/components and rerun iui doctor\");\n }\n }\n\n const configValidity = checkComponentConfigValidity(targetCwd, {\n autoFix: opts?.fix === true,\n });\n if (configValidity.ok) {\n pass(configValidity.summary);\n } else {\n fail(configValidity.summary);\n if (configValidity.details) {\n for (const line of configValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const iuiTier = checkIuiConfigTierBleed(targetCwd, { autoFix: opts?.fix === true });\n if (iuiTier.ok) {\n pass(iuiTier.summary);\n } else {\n fail(iuiTier.summary);\n if (iuiTier.details) {\n for (const line of iuiTier.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const assetsValidity = checkAssetsConfigValidity(targetCwd);\n if (assetsValidity.ok) {\n pass(assetsValidity.summary);\n } else {\n fail(assetsValidity.summary);\n if (assetsValidity.details) ui.hint(assetsValidity.details);\n }\n\n const componentTier = checkComponentConfigTierBleed(targetCwd);\n if (componentTier.ok) {\n pass(componentTier.summary);\n } else {\n fail(componentTier.summary);\n if (componentTier.details) {\n for (const line of componentTier.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n }\n\n const compileFirst = checkCompileFirstReadiness(targetCwd, {\n strict: process.env.IUI_DOCTOR_STRICT === \"1\",\n });\n if (compileFirst.warnings.length === 0) {\n pass(\"Compile-first configuration looks ready\");\n } else {\n const strict = process.env.IUI_DOCTOR_STRICT === \"1\";\n for (const warning of compileFirst.warnings) {\n if (strict) fail(warning);\n else ui.warn(warning);\n }\n for (const hint of compileFirst.hints) {\n ui.hint(hint);\n }\n }\n\n const assetBound = checkAssetBoundBindings(targetCwd);\n if (assetBound.ok) {\n pass(assetBound.summary);\n } else {\n ui.warn(assetBound.summary);\n if (assetBound.details) ui.hint(assetBound.details);\n }\n}\n\nasync function runPackageDiagnostics(\n targetCwd: string,\n opts: DoctorOptions | undefined,\n counters: { passed: number; failed: number },\n): Promise<void> {\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n // CI / pre-commit: config tiers + compile-first (+ slots when applicable) only.\n if (opts?.configOnly) {\n runConfigTierDiagnostics(targetCwd, opts, counters, {\n includePackageJson: true,\n includeSlotCheck: true,\n });\n return;\n }\n\n if (hasPackageJson(targetCwd)) pass(\"package.json found\");\n else fail(\"package.json missing\");\n\n if (opts?.fix === true) {\n ensureProjectConfig(targetCwd);\n if (projectHasViteTooling(targetCwd)) {\n ensureInventiveUiViteConfig(targetCwd);\n }\n ensureComponentConfig(readComponentPackageManifest(targetCwd), targetCwd);\n }\n\n if (isInsideProject(targetCwd)) {\n pass(\"Inventive UI project initialized\");\n } else {\n fail(\"Not initialized\");\n }\n\n const framework = getFrameworkInstallStatus(targetCwd);\n if (checkFrameworkInstalled(targetCwd)) {\n pass(`Framework installed ${ui.dim(`v${framework.version ?? \"?\"}`)}`);\n if (framework.source === \"yarn-pnp\") {\n ui.kv(\"Framework resolver\", \"Yarn PnP\");\n }\n } else if (framework.source === \"declared\") {\n fail(\"Framework declared but not installed\");\n } else {\n fail(\"Framework not installed\");\n }\n\n const react = getReactStatus(targetCwd);\n const reactDom = getReactDomStatus(targetCwd);\n const vite = getViteStatus(targetCwd);\n\n if (react.status === \"ok\") {\n pass(`React installed ${ui.dim(`v${react.version}`)}`);\n } else if (react.status === \"wrong-version\") {\n fail(`React ${react.version} found — requires 19.x`);\n }\n\n if (vite.status === \"ok\") {\n pass(`Vite installed ${ui.dim(`v${vite.version}`)}`);\n } else if (vite.status === \"wrong-version\") {\n fail(`Vite ${vite.version} found — requires 6.x or newer`);\n }\n\n if (reactDom.status === \"ok\") {\n pass(`react-dom installed ${ui.dim(`v${reactDom.version}`)}`);\n } else if (reactDom.status === \"wrong-version\") {\n fail(`react-dom ${reactDom.version} found — requires 19.x`);\n }\n\n if (react.status === \"ok\" && reactDom.status === \"not-installed\") {\n fail(\"react-dom missing (required with React 19.x)\");\n }\n\n if (react.status === \"not-installed\" && vite.status === \"not-installed\") {\n fail(\"Neither React nor Vite installed (requires React 19.x or Vite 6.x+)\");\n }\n\n const components = readComponentManifest(targetCwd);\n const compCount = Object.keys(components).length;\n pass(`${compCount} component${compCount !== 1 ? \"s\" : \"\"} installed`);\n\n const packages = readPackageManifest(targetCwd);\n const pkgCount = Object.keys(packages).length;\n pass(`${pkgCount} asset package${pkgCount !== 1 ? \"s\" : \"\"} installed`);\n\n const slots = readSlotManifest(targetCwd);\n const slotCount = Object.keys(slots).length;\n pass(`${slotCount} slot${slotCount !== 1 ? \"s\" : \"\"} registered`);\n\n const compatibility = checkPackageCompatibility(targetCwd);\n if (compatibility.ok) {\n pass(compatibility.summary);\n } else {\n ui.warn(compatibility.summary);\n if (compatibility.details) ui.hint(compatibility.details);\n }\n\n const syncedDeps = syncInventiveUiDeclaredDependencies(targetCwd);\n if (syncedDeps.length > 0) {\n pass(\n `Synced package.json with installed versions (${syncedDeps.length} @inventive-ui package${syncedDeps.length === 1 ? \"\" : \"s\"})`,\n );\n for (const name of syncedDeps) {\n const version = getInstalledPackageVersion(name, targetCwd);\n if (version) ui.kv(name, `^${version}`);\n }\n }\n\n const auth = getAuthConfig();\n if (auth?.token) {\n const fwBaseline = getFrameworkUpdateBaselineVersion(targetCwd);\n const compInstalled = getInstalledPackageVersion(COMPONENTS_PACKAGE, targetCwd);\n const [latestFw, latestComp] = await Promise.all([\n fwBaseline ? getLatestVersionSafe(auth.token, \"framework\") : Promise.resolve(null),\n compInstalled ? getLatestVersionSafe(auth.token, \"components\") : Promise.resolve(null),\n ]);\n\n let behind = false;\n if (fwBaseline && latestFw && isVersionGreater(latestFw, fwBaseline)) {\n behind = true;\n ui.warn(`Framework v${fwBaseline} is behind the latest v${latestFw}`);\n }\n if (compInstalled && latestComp && isVersionGreater(latestComp, compInstalled)) {\n behind = true;\n ui.warn(`Components v${compInstalled} is behind the latest v${latestComp}`);\n }\n if (behind) {\n ui.hint(\"Run iui update to move to the latest versions.\");\n } else if ((fwBaseline && latestFw) || (compInstalled && latestComp)) {\n pass(\"Inventive UI packages are on the latest version\");\n }\n }\n\n const slotValidity = checkGeneratedSlotValidity(targetCwd);\n if (slotValidity.ok) {\n pass(slotValidity.summary);\n } else {\n fail(slotValidity.summary);\n if (slotValidity.details) {\n for (const line of slotValidity.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n ui.hint(\"Fix: reinstall @inventive-ui/components and rerun iui doctor\");\n }\n\n const bootstrapSync = checkBootstrapSync(targetCwd, {\n autoFix: opts?.fix === true,\n });\n if (bootstrapSync.ok) {\n pass(bootstrapSync.summary);\n } else {\n fail(bootstrapSync.summary);\n if (bootstrapSync.details) {\n for (const line of bootstrapSync.details.split(\"\\n\")) {\n ui.hint(line);\n }\n }\n if (!opts?.fix) {\n ui.hint(\"Fix: run iui doctor --fix to regenerate bootstrap artifacts\");\n }\n }\n\n runConfigTierDiagnostics(targetCwd, opts, counters, {\n includePackageJson: false,\n includeSlotCheck: false,\n });\n}\n\nexport async function doctorCommand(opts?: DoctorOptions): Promise<void> {\n try {\n const invocationCwd = process.cwd();\n const targets = opts?.cwd\n ? [path.resolve(opts.cwd)]\n : resolveSetupDoctorTargets(invocationCwd);\n const installRoot = resolveDependencyInstallRoot(invocationCwd);\n const multiPackage = targets.length > 1;\n\n ui.heading(\"Diagnostics\");\n\n const counters = { passed: 0, failed: 0 };\n const pass = (label: string) => {\n ui.checkPass(label);\n counters.passed++;\n };\n const fail = (label: string) => {\n ui.checkFail(label);\n counters.failed++;\n };\n\n if (!opts?.configOnly) {\n const auth = getAuthConfig();\n if (auth?.token) {\n pass(\"Authenticated\");\n ui.kv(\"GitHub\", auth.github_id || \"—\");\n } else {\n fail(\"Not authenticated\");\n }\n\n if (auth?.token) {\n try {\n const license = await validateLicense(auth.token);\n pass(`License valid — ${formatPlanLabel(license.plan)}`);\n ui.kv(\"Updates until\", formatNaturalDateTime(license.updates_expire_at));\n const seatUsage = formatSeatUsage(license);\n if (seatUsage) {\n ui.kv(\"Seats (users)\", seatUsage);\n }\n } catch {\n fail(\"License validation failed\");\n }\n } else {\n fail(\"License check skipped (not authenticated)\");\n }\n\n const reachable = await pingRegistry();\n if (reachable) pass(\"Registry reachable\");\n else fail(\"Cannot reach the Inventive UI registry\");\n }\n\n for (const targetCwd of targets) {\n if (multiPackage) {\n ui.newline();\n const label = path.relative(installRoot, targetCwd) || path.basename(targetCwd);\n ui.kv(\"Package\", label);\n }\n await runPackageDiagnostics(targetCwd, opts, counters);\n }\n\n ui.newline();\n ui.separator();\n ui.newline();\n\n if (counters.failed === 0) {\n ui.done(`All ${counters.passed} checks passed`);\n } else {\n ui.fail(`${counters.failed} issue${counters.failed > 1 ? \"s\" : \"\"} found`);\n ui.hint(\"Resolve the issues above and re-run iui doctor\");\n ui.hint(\"Checklist: compatibility, managed slots, config validity, required types\");\n if (!opts?.fix) {\n ui.hint(\"Use iui doctor --fix to apply safe automatic repairs\");\n }\n ui.newline();\n process.exitCode = 1;\n }\n } catch (error) {\n handleError(error);\n process.exitCode = 1;\n }\n}\n","import { execFileSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { COMPONENT_CONFIG_FILE, COMPONENTS_PACKAGE, FRAMEWORK_PACKAGE, PROJECT_CONFIG_FILE, ASSETS_CONFIG_FILE, COMPILE_FIRST_MIN_FRAMEWORK_VERSION } from \"../constants.js\";\nimport {\n detectPackageManager,\n getInstalledPackageVersion,\n prepareWorkspaceForDependencyInstall,\n projectHasViteTooling,\n projectHasWebpackTooling,\n projectHasNextTooling,\n} from \"../utils/filesystem.js\";\nimport { isMonorepoInstallContext, resolvePackageDir, resolveIuiProjectRoot } from \"../utils/workspace.js\";\nimport { validateGeneratedSlotImports } from \"./slots.js\";\nimport {\n bootstrapGeneratedPath,\n expectedBootstrapImportPaths,\n resolveProjectConfigPaths,\n writeProjectBootstrapArtifacts,\n} from \"./bootstrap.js\";\nimport { installDevPackages } from \"../utils/security/process.js\";\nimport { compareVersions } from \"../utils/version.js\";\nimport { generatedAssetsDir } from \"./generated-paths.js\";\n\nexport interface CompatibilityCheckResult {\n ok: boolean;\n summary: string;\n details?: string;\n}\n\nfunction installDevTypeScript(cwd: string): boolean {\n const pm = detectPackageManager(cwd);\n try {\n if (isMonorepoInstallContext(cwd)) {\n prepareWorkspaceForDependencyInstall(cwd);\n }\n installDevPackages(pm, \"typescript\", cwd);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function checkPackageCompatibility(cwd: string = process.cwd()): CompatibilityCheckResult {\n const frameworkVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n const componentsVersion = getInstalledPackageVersion(COMPONENTS_PACKAGE, cwd);\n\n if (!frameworkVersion || !componentsVersion) {\n return {\n ok: false,\n summary: \"Core packages could not be verified\",\n details: \"Install @inventive-ui/framework and @inventive-ui/components, then re-run health checks.\",\n };\n }\n\n return {\n ok: true,\n summary: `Core packages installed (framework ${frameworkVersion}, components ${componentsVersion})`,\n };\n}\n\nexport function checkGeneratedSlotValidity(cwd: string = process.cwd()): CompatibilityCheckResult {\n const issues = validateGeneratedSlotImports(cwd);\n if (issues.length > 0) {\n return {\n ok: false,\n summary: \"Managed slot imports are invalid\",\n details: issues.map((i) => `- ${i}`).join(\"\\n\"),\n };\n }\n\n return {\n ok: true,\n summary: \"Managed slot imports are valid\",\n };\n}\n\nexport function checkComponentConfigValidity(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): CompatibilityCheckResult {\n const configPath = path.join(cwd, COMPONENT_CONFIG_FILE);\n if (!fs.existsSync(configPath)) {\n return {\n ok: false,\n summary: \"component.config.ts not found\",\n details: \"Create it with `iui init` or rebuild it from your manifest.\",\n };\n }\n\n const tsPkgDir = resolvePackageDir(\"typescript\", cwd);\n const tscPath = tsPkgDir ? path.join(tsPkgDir, \"bin\", \"tsc\") : path.join(cwd, \"node_modules\", \"typescript\", \"bin\", \"tsc\");\n if (!fs.existsSync(tscPath)) {\n if (!options.autoFix) {\n return {\n ok: false,\n summary: \"TypeScript is not installed in this project\",\n details: \"Run iui doctor --fix to install TypeScript, or install it manually.\",\n };\n }\n const installed = installDevTypeScript(cwd);\n if (!installed) {\n return {\n ok: false,\n summary: \"TypeScript is not installed in this project\",\n details: \"Automatic install failed. Install TypeScript and re-run health checks.\",\n };\n }\n }\n\n const baseArgs = [\n tscPath,\n \"--noEmit\",\n \"--pretty\",\n \"false\",\n \"--skipLibCheck\",\n \"--moduleResolution\",\n \"bundler\",\n \"--module\",\n \"esnext\",\n \"--target\",\n \"es2022\",\n ];\n\n const runTypeCheck = (args: string[]): { ok: true } | { ok: false; output: string } => {\n try {\n execFileSync(\n process.execPath,\n args,\n {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n return { ok: true };\n } catch (err) {\n const e = err as { stdout?: Buffer | string; stderr?: Buffer | string };\n const stdout = typeof e.stdout === \"string\" ? e.stdout : e.stdout?.toString(\"utf-8\") ?? \"\";\n const stderr = typeof e.stderr === \"string\" ? e.stderr : e.stderr?.toString(\"utf-8\") ?? \"\";\n return { ok: false, output: `${stdout}\\n${stderr}`.trim() };\n }\n };\n\n // Prefer --ignoreConfig so TypeScript 5.7+ does not emit TS5112 when a file argument is passed.\n const firstAttempt = runTypeCheck([...baseArgs, \"--ignoreConfig\", COMPONENT_CONFIG_FILE]);\n const result =\n firstAttempt.ok\n ? firstAttempt\n : /unknown compiler option.+--ignoreConfig/i.test(firstAttempt.output)\n ? runTypeCheck([...baseArgs, COMPONENT_CONFIG_FILE])\n : firstAttempt;\n\n if (result.ok) {\n\n return {\n ok: true,\n summary: \"component.config.ts values are type-valid\",\n };\n }\n\n const output = result.output;\n\n const configLines = output\n .split(\"\\n\")\n .filter((line) => line.includes(COMPONENT_CONFIG_FILE))\n .slice(0, 8);\n\n return {\n ok: false,\n summary: \"component.config.ts contains invalid values for installed component types\",\n details:\n configLines.length > 0\n ? configLines.join(\"\\n\")\n : output || \"Type validation failed for component.config.ts.\",\n };\n}\n\nexport interface CompileFirstCheckResult {\n warnings: string[];\n hints: string[];\n}\n\n/**\n * Compile-first readiness warnings (non-fatal). Does not block doctor success.\n */\nexport function checkCompileFirstReadiness(\n cwd: string = process.cwd(),\n _options: { strict?: boolean } = {},\n): CompileFirstCheckResult {\n const warnings: string[] = [];\n const hints: string[] = [];\n\n const configPath = path.join(cwd, PROJECT_CONFIG_FILE);\n if (fs.existsSync(configPath)) {\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n if (!/\\bbuild\\s*:\\s*\\{/.test(configContent)) {\n warnings.push(\"iui.config.ts is missing a compile-first `build` block\");\n hints.push(\n \"Framework applies default scanDirs/scanPackages — merge other build flags from docs/01-compile-first-guide.md or run a fresh iui init\",\n );\n } else {\n if (!/packageSafelist\\s*:\\s*false/.test(configContent)) {\n warnings.push(\"iui.config.ts build.packageSafelist should be false (scan-first)\");\n }\n if (!/includeShadeMatrix\\s*:\\s*false/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeShadeMatrix should be false unless you need the full compose() matrix\");\n }\n if (!/includeThemePresets\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeThemePresets should be true\");\n }\n if (!/includeThemeGrayScale\\s*:\\s*true/.test(configContent)) {\n warnings.push(\n \"iui.config.ts build.includeThemeGrayScale should be true (pre-expand theme gray gray-2…98 utilities)\",\n );\n }\n if (!/resolvePalettePatterns\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.resolvePalettePatterns should be true\");\n }\n if (!/includeArbitraryScan\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.includeArbitraryScan should be true\");\n }\n if (!/useAst\\s*:\\s*true/.test(configContent)) {\n warnings.push(\"iui.config.ts build.useAst should be true\");\n }\n }\n }\n\n if (projectHasViteTooling(cwd)) {\n const viteCandidates = [\"vite.config.ts\", \"vite.config.mjs\", \"vite.config.js\"];\n const vitePath = viteCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!vitePath) {\n warnings.push(\"Vite tooling detected but no vite.config.* found\");\n } else {\n const viteContent = fs.readFileSync(vitePath, \"utf-8\");\n if (!/inventiveUiVite\\s*\\(/.test(viteContent)) {\n warnings.push(\"vite.config is missing inventiveUiVite() — compile-first CSS will not generate\");\n hints.push(\"Wire plugins: [...inventiveUiVite({ root: import.meta.dirname }), react()]\");\n }\n }\n }\n\n if (projectHasWebpackTooling(cwd) && !projectHasNextTooling(cwd)) {\n const webpackCandidates = [\n \"webpack.config.js\",\n \"webpack.config.cjs\",\n \"webpack.config.mjs\",\n \"webpack.config.ts\",\n ];\n const webpackPath = webpackCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!webpackPath) {\n warnings.push(\"Webpack tooling detected but no webpack.config.* found\");\n } else {\n const webpackContent = fs.readFileSync(webpackPath, \"utf-8\");\n if (!/inventiveUiWebpack\\s*\\(/.test(webpackContent)) {\n warnings.push(\"webpack.config is missing inventiveUiWebpack() — compile-first CSS will not generate\");\n hints.push('Wire plugins: [...inventiveUiWebpack()] from \"@inventive-ui/framework/webpack\"');\n hints.push(\"Ensure html-webpack-plugin is installed in the app (required for head theme/CSS inject)\");\n }\n }\n }\n\n if (projectHasNextTooling(cwd)) {\n const nextCandidates = [\"next.config.ts\", \"next.config.mjs\", \"next.config.js\", \"next.config.cjs\"];\n const nextPath = nextCandidates\n .map((name) => path.join(cwd, name))\n .find((p) => fs.existsSync(p));\n if (!nextPath) {\n warnings.push(\"Next.js detected but no next.config.* found\");\n } else {\n const nextContent = fs.readFileSync(nextPath, \"utf-8\");\n if (!/withIUI\\s*\\(/.test(nextContent)) {\n warnings.push(\"next.config is missing withIUI() — compile-first CSS will not generate\");\n hints.push('Wrap config: export default withIUI({ ... }) from \"@inventive-ui/framework/next\"');\n }\n }\n const layoutCandidates = [\n \"app/layout.tsx\",\n \"app/layout.jsx\",\n \"src/app/layout.tsx\",\n \"src/app/layout.jsx\",\n \"app/providers.tsx\",\n \"src/app/providers.tsx\",\n ].map((rel) => path.join(cwd, rel));\n const readableLayouts = layoutCandidates.filter((file) => fs.existsSync(file));\n const hasRegistry = readableLayouts.some((file) => {\n try {\n return /\\bIUIRegistry\\b/.test(fs.readFileSync(file, \"utf-8\"));\n } catch {\n return false;\n }\n });\n const hasBootstrapImport = readableLayouts.some((file) => {\n try {\n const content = fs.readFileSync(file, \"utf-8\");\n return (\n /next\\/bootstrap/.test(content) ||\n /[\"']iui-bootstrap[\"']/.test(content) ||\n /iui\\/bootstrap/.test(content)\n );\n } catch {\n return false;\n }\n });\n const hasProvider = readableLayouts.some((file) => {\n try {\n return /\\bIUIProvider\\b/.test(fs.readFileSync(file, \"utf-8\"));\n } catch {\n return false;\n }\n });\n if (!hasRegistry) {\n warnings.push(\"Next.js app should wrap the root layout with <IUIRegistry>\");\n hints.push('Import IUIRegistry from \"@inventive-ui/framework/next/registry\" in the root layout');\n }\n if (!hasBootstrapImport) {\n warnings.push(\"Next.js root layout should import bootstrap before render\");\n hints.push(\n 'Add `import \"@inventive-ui/framework/next/bootstrap\"` to the root layout (server) and client providers',\n );\n }\n if (!hasProvider) {\n warnings.push(\"Next.js app should use <IUIProvider> for bootstrap-state runtime\");\n hints.push('Wrap children with <IUIProvider> from \"@inventive-ui/framework\" inside IUIRegistry');\n }\n }\n\n // Flag accidental browser-graph imports of style maps (compile-first anti-pattern).\n const entryCandidates = [\n \"src/main.tsx\",\n \"src/main.jsx\",\n \"src/main.ts\",\n \"src/index.tsx\",\n \"src/index.jsx\",\n \"src/App.tsx\",\n \"app/providers.tsx\",\n \"src/app/providers.tsx\",\n \"app/layout.tsx\",\n \"src/app/layout.tsx\",\n ].map((rel) => path.join(cwd, rel));\n for (const file of entryCandidates) {\n if (!fs.existsSync(file)) continue;\n try {\n const content = fs.readFileSync(file, \"utf-8\");\n if (\n /from\\s+['\"][^'\"]*\\.generated['\"]/.test(content) ||\n /import\\s+['\"][^'\"]*\\.generated['\"]/.test(content)\n ) {\n warnings.push(\n `Do not import .generated style-map files into the browser (${path.relative(cwd, file)})`,\n );\n hints.push(\n \"Keep style maps on the scanner path (default src/.iui, or override build.scanDirs) — see Framework compile-first docs\",\n );\n break;\n }\n } catch {\n /* ignore */\n }\n }\n\n const fwVersion = getInstalledPackageVersion(FRAMEWORK_PACKAGE, cwd);\n if (fwVersion && compareVersions(fwVersion, COMPILE_FIRST_MIN_FRAMEWORK_VERSION) < 0) {\n warnings.push(\n `Framework v${fwVersion} is below compile-first minimum v${COMPILE_FIRST_MIN_FRAMEWORK_VERSION}`,\n );\n hints.push(\"Run iui update to upgrade @inventive-ui/framework\");\n }\n\n hints.push(\n \"Compile-first: avoid dynamic utility templates like `p-${n}` — use static strings, style maps, or safelist (ESLint: customPlugin/no-dynamic-utility-class)\",\n );\n\n const giPath = path.join(cwd, \".gitignore\");\n if (fs.existsSync(giPath)) {\n const gi = fs.readFileSync(giPath, \"utf-8\");\n if (!gi.includes(\".iui/cache/\")) {\n warnings.push(\".gitignore missing IUI cache directory (.iui/cache/)\");\n hints.push(\"Run iui init or append .iui/cache/ from the IUI docs\");\n }\n }\n\n return { warnings, hints };\n}\n\n/**\n * Warn when assets.config.json requests scanned bindings but bound files are missing.\n */\nexport function checkAssetBoundBindings(cwd: string = process.cwd()): CompatibilityCheckResult {\n const assetsPath = path.join(cwd, ASSETS_CONFIG_FILE);\n if (!fs.existsSync(assetsPath)) {\n return { ok: true, summary: \"Asset binding check skipped (no assets.config.json)\" };\n }\n\n let assets: Record<string, unknown>;\n try {\n assets = fs.readJsonSync(assetsPath) as Record<string, unknown>;\n } catch {\n return { ok: false, summary: \"assets.config.json is not valid JSON\" };\n }\n\n if (assets.binding !== \"scanned\") {\n return { ok: true, summary: \"Asset slots use lazy binding (default)\" };\n }\n\n const registerBound = path.join(generatedAssetsDir(cwd), \"register-bound.ts\");\n if (!fs.existsSync(registerBound)) {\n return {\n ok: false,\n summary: 'binding is \"scanned\" but .iui/generated/assets/register-bound.ts is missing',\n details: \"Run any iui command to refresh the slot registry, or reinstall asset packages.\",\n };\n }\n\n return { ok: true, summary: \"Scanned asset bindings present\" };\n}\n\nexport function checkBootstrapSync(\n cwd: string = process.cwd(),\n options: { autoFix?: boolean } = {},\n): CompatibilityCheckResult {\n const iuiRoot = resolveIuiProjectRoot(cwd);\n const generatedPath = bootstrapGeneratedPath(iuiRoot);\n const bridgePath = path.join(cwd, \"src\", \"iui\", \"bootstrap.ts\");\n\n if (!fs.existsSync(generatedPath)) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n if (fs.existsSync(generatedPath)) {\n return { ok: true, summary: \"Generated bootstrap artifacts repaired\" };\n }\n }\n return {\n ok: false,\n summary: \"Generated bootstrap missing\",\n details: \"Expected .iui/generated/bootstrap.generated.tsx — run iui doctor --fix.\",\n };\n }\n\n if (!fs.existsSync(bridgePath)) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n if (fs.existsSync(bridgePath)) {\n return { ok: true, summary: \"Bootstrap bridge repaired\" };\n }\n }\n return {\n ok: false,\n summary: \"Bootstrap bridge missing\",\n details: \"Expected src/iui/bootstrap.ts — run iui doctor --fix.\",\n };\n }\n\n const configs = resolveProjectConfigPaths(iuiRoot);\n const missing: string[] = [];\n for (const [key, rel] of Object.entries(configs)) {\n const abs = path.resolve(iuiRoot, rel.replace(/^\\.\\//, \"\"));\n if (!fs.existsSync(abs)) missing.push(`${key}: ${rel}`);\n }\n if (missing.length > 0) {\n return {\n ok: false,\n summary: \"Bootstrap config paths from project.json are missing\",\n details: missing.map((line) => `- ${line}`).join(\"\\n\"),\n };\n }\n\n const expected = expectedBootstrapImportPaths(iuiRoot);\n const generated = fs.readFileSync(generatedPath, \"utf8\");\n const stale: string[] = [];\n for (const [key, importPath] of Object.entries(expected)) {\n if (!generated.includes(`\"${importPath}\"`)) {\n stale.push(`${key} import should be \"${importPath}\"`);\n }\n }\n\n if (stale.length > 0) {\n if (options.autoFix) {\n writeProjectBootstrapArtifacts(cwd, iuiRoot);\n const refreshed = fs.readFileSync(bootstrapGeneratedPath(iuiRoot), \"utf8\");\n const stillStale = Object.entries(expected).filter(\n ([, importPath]) => !refreshed.includes(`\"${importPath}\"`),\n );\n if (stillStale.length === 0) {\n return { ok: true, summary: \"Generated bootstrap refreshed from project.json\" };\n }\n }\n return {\n ok: false,\n summary: \"Generated bootstrap is stale\",\n details: stale.map((line) => `- ${line}`).join(\"\\n\"),\n };\n }\n\n return { ok: true, summary: \"Generated bootstrap matches project.json config paths\" };\n}\n\nexport {\n checkIuiConfigTierBleed,\n checkAssetsConfigValidity,\n checkComponentConfigTierBleed,\n} from \"../validation/configTierChecks.js\";\n","// ─── iui list ────────────────────────────────────────────────────────────────\n//\n// Display installed components, asset packages, and framework status.\n// With --available, show all components from the remote registry.\n\nimport {\n readComponentManifest,\n readComponentPackageManifest,\n readPackageManifest,\n readSlotManifest,\n isInsideProject,\n registryItemsMap,\n getInstalledPackageVersion,\n} from \"../utils/filesystem.js\";\nimport { fetchComponentRegistry } from \"../services/registry.js\";\nimport { getAuthConfig } from \"../services/auth.js\";\nimport { checkFrameworkInstalled, getFrameworkInstallStatus } from \"../services/framework.js\";\nimport { getLatestVersionSafe } from \"../services/version-check.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport {\n ASSET_PACKAGES_MAP,\n ASSET_CATEGORY_LABELS,\n COMPONENTS_PACKAGE,\n} from \"../constants.js\";\n\nexport async function listCommand(opts: { available?: boolean }): Promise<void> {\n try {\n if (opts.available) {\n ui.heading(\"Available Components\");\n\n const auth = getAuthConfig();\n const fetched = await fetchComponentRegistry(auth?.token);\n const registry = fetched.registry;\n if (!registry || registry.items.length === 0) {\n ui.info(\"Could not fetch component registry.\");\n if (fetched.apiFailure) ui.hint(fetched.apiFailure);\n ui.hint(\"Check your network connection or run: iui doctor\");\n return;\n }\n\n const installed = isInsideProject() ? readComponentManifest() : {};\n const items = registry.items;\n\n let idx = 0;\n for (const item of items) {\n idx++;\n const installedTag = installed[item.name]\n ? ui.success(`\\u2714 v${installed[item.name]}`)\n : \"\";\n const suffix = installedTag ? ` ${installedTag}` : \"\";\n ui.numberedItem(idx, `${item.title}${suffix}`);\n ui.treeLine();\n }\n\n ui.newline();\n ui.info(`${items.length} components available`);\n ui.newline();\n return;\n }\n\n // ── Project required for installed view ──────────────────────────\n if (!isInsideProject()) {\n throw new CLIError(\n \"Not an Inventive UI project.\",\n \"iui init\",\n );\n }\n\n // Resolve display names from local manifest (no API call needed)\n const pkgManifest = readComponentPackageManifest();\n const itemsLookup = registryItemsMap(pkgManifest);\n\n // Best-effort latest-version lookups for drift annotations (auth optional).\n const auth = getAuthConfig();\n const componentsVersion = getInstalledPackageVersion(COMPONENTS_PACKAGE);\n const frameworkStatus = getFrameworkInstallStatus();\n const [latestFramework, latestComponents] = await Promise.all([\n frameworkStatus.version\n ? getLatestVersionSafe(auth?.token, \"framework\")\n : Promise.resolve(null),\n componentsVersion\n ? getLatestVersionSafe(auth?.token, \"components\")\n : Promise.resolve(null),\n ]);\n\n const updateTag = (current: string | null, latest: string | null): string =>\n current && latest && isVersionGreater(latest, current)\n ? ` ${ui.warning(`(update available → v${latest})`)}`\n : \"\";\n\n // ── Framework ────────────────────────────────────────────────────\n ui.heading(\"Framework\");\n if (checkFrameworkInstalled()) {\n const version = frameworkStatus.version ?? \"?\";\n ui.checkPass(\n `Inventive UI Framework ${ui.dim(`v${version}`)}${updateTag(frameworkStatus.version, latestFramework)}`,\n );\n if (frameworkStatus.source === \"yarn-pnp\") {\n ui.kv(\"Resolver\", \"Yarn PnP\");\n }\n } else if (frameworkStatus.source === \"declared\") {\n const declared = frameworkStatus.declaredVersion ?? \"?\";\n ui.checkFail(`Framework declared ${ui.dim(`v${declared}`)} but not installed`);\n ui.hint(\"Run your package manager install command or: iui install framework\");\n } else {\n ui.checkFail(\"Framework not installed\");\n ui.hint(\"Run: iui install framework\");\n }\n\n // ── Components ───────────────────────────────────────────────────\n ui.heading(\"Installed Components\");\n const components = readComponentManifest();\n const componentKeys = Object.keys(components);\n\n if (componentKeys.length === 0) {\n ui.info(\"Component library is not installed yet.\");\n ui.hint(\"Run: iui install components\");\n } else {\n let idx = 0;\n for (const [slug, version] of Object.entries(components)) {\n idx++;\n const name = itemsLookup[slug]?.title ?? slug;\n ui.numberedItem(idx, `${name.padEnd(22)} ${ui.dim(`v${version}`)}`);\n }\n ui.newline();\n ui.info(\n `${componentKeys.length} component${componentKeys.length !== 1 ? \"s\" : \"\"} installed${updateTag(componentsVersion, latestComponents)}`,\n );\n }\n\n // ── Asset Packages ───────────────────────────────────────────────\n ui.heading(\"Asset Packages\");\n const packages = readPackageManifest();\n const pkgKeys = Object.keys(packages);\n\n if (pkgKeys.length === 0) {\n ui.info(\"No asset packages installed.\");\n ui.hint(\"Run: iui install assets\");\n } else {\n for (const [pkgId, meta] of Object.entries(packages)) {\n const def = ASSET_PACKAGES_MAP[pkgId];\n const label = def?.displayName ?? pkgId;\n const cat = def ? ui.dim(`[${ASSET_CATEGORY_LABELS[def.category]}]`) : \"\";\n ui.bulletItem(`${label} ${cat}`, meta.installedAt);\n }\n ui.newline();\n ui.info(`${pkgKeys.length} asset package${pkgKeys.length !== 1 ? \"s\" : \"\"} installed`);\n }\n\n // ── Slots ────────────────────────────────────────────────────────\n ui.heading(\"Slot Registry\");\n const slots = readSlotManifest();\n const slotKeys = Object.keys(slots);\n\n if (slotKeys.length === 0) {\n ui.info(\"No component slots available yet.\");\n } else {\n for (const [key, record] of Object.entries(slots)) {\n const displayName = itemsLookup[key]?.title ?? key;\n const slotInfo = record.supportedSlots?.length\n ? `${record.slotType} · slots: ${record.supportedSlots.join(\", \")}`\n : `${record.slotType}`;\n ui.bulletItem(\n displayName.padEnd(26),\n `${slotInfo} · v${record.version}`,\n );\n }\n ui.newline();\n ui.info(`${slotKeys.length} slot${slotKeys.length !== 1 ? \"s\" : \"\"} registered`);\n }\n\n ui.newline();\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── iui update ──────────────────────────────────────────────────────────────\n//\n// Check the registry for component updates and apply eligible ones.\n\nimport ora from \"ora\";\nimport { ensureAuthSession, ensureLicenseSession } from \"../services/session.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n fetchComponentUpdates,\n fetchLatestScopedPackageVersion,\n fetchLatestCliVersion,\n} from \"../services/registry.js\";\nimport { installComponentsPackage } from \"../services/installer.js\";\nimport { installAssetPackage } from \"../services/assets.js\";\nimport {\n installFramework,\n getFrameworkInstallStatus,\n getFrameworkUpdateBaselineVersion,\n} from \"../services/framework.js\";\nimport { syncInventiveUiDeclaredDependencies } from \"../utils/declared-deps.js\";\nimport {\n readProjectMeta,\n readComponentManifest,\n readPackageManifest,\n readComponentPackageManifest,\n isInsideProject,\n registryItemsMap,\n} from \"../utils/filesystem.js\";\nimport { promptUpdateSelection, confirm } from \"../utils/prompts.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\nimport { ASSET_PACKAGES_MAP } from \"../constants.js\";\nimport { isVersionGreater } from \"../utils/version.js\";\n\ndeclare const __CLI_VERSION__: string;\n\ntype UpdateOptions = {\n yes?: boolean;\n check?: boolean;\n source?: string;\n};\n\nexport async function updateCommand(opts: UpdateOptions = {}): Promise<void> {\n try {\n ui.heading(\"Update\");\n\n const auth = await ensureAuthSession();\n await ensureLicenseSession();\n const inProject = isInsideProject();\n\n const currentCliVersion =\n typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"unknown\";\n const latestCliVersion = await fetchLatestCliVersion(auth.token);\n const cliUpdateAvailable =\n latestCliVersion !== null && isVersionGreater(latestCliVersion, currentCliVersion);\n if (latestCliVersion && cliUpdateAvailable) {\n ui.warn(`CLI update available: ${currentCliVersion} ${ui.dim(\"→\")} ${latestCliVersion}`);\n ui.hint(\"Use the latest CLI immediately with: npx inventive-ui@latest\");\n } else if (latestCliVersion) {\n ui.ok(`CLI is up to date ${ui.dim(`v${currentCliVersion}`)}`);\n }\n\n if (!inProject) {\n ui.info(\"Not in an initialized project. Skipping component/asset updates.\");\n ui.hint(\"Run iui init in your project directory to enable full updates.\");\n return;\n }\n\n const project = readProjectMeta();\n if (!project) {\n throw new CLIError(\"Project metadata missing.\", \"Run iui init to repair project setup.\");\n }\n\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n\n const installedComponents = readComponentManifest(installCwd);\n const installedAssets = readPackageManifest(installCwd);\n const pkgManifest = readComponentPackageManifest(installCwd);\n const itemsLookup = registryItemsMap(pkgManifest);\n\n // ── Fetch updates ══════════════════════════════════════════════════\n const spinner = ora({ text: \"Checking registry…\", prefixText: \" \" }).start();\n const updates = await fetchComponentUpdates(auth.token, project.projectId, installedComponents);\n spinner.stop();\n\n const available = updates.filter(\n (u) => isVersionGreater(u.latest_version, u.current_version),\n );\n const eligibleAvailable = available.filter((u) => u.eligible);\n\n if (available.length === 0) {\n ui.info(\"No component updates available.\");\n } else if (eligibleAvailable.length === 0) {\n ui.warn(\"Updates available but your update window has expired.\");\n ui.hint(\"Renew at inventiveui.com to access newer versions.\");\n }\n\n const nonInteractive = opts.check === true || opts.yes === true;\n const shouldAutoApply = opts.yes === true;\n const source = opts.source === \"registry\" ? \"registry\" : \"api\";\n let selectedComponents: string[] = [];\n let selectedAssets: string[] = [];\n\n if (available.length > 0) {\n ui.subheading(\"Component updates\");\n ui.newline();\n for (const u of available) {\n const name = itemsLookup[u.name]?.title ?? u.name;\n ui.updateRow(name, u.current_version, u.latest_version, u.eligible);\n }\n ui.newline();\n\n if (shouldAutoApply) {\n selectedComponents = eligibleAvailable.map((u) => u.name);\n } else if (!nonInteractive) {\n selectedComponents = await promptUpdateSelection(\n available.map((u) => ({\n name: u.name,\n displayName: itemsLookup[u.name]?.title ?? u.name,\n current: u.current_version,\n latest: u.latest_version,\n eligible: u.eligible,\n })),\n \"Select components to update\",\n );\n }\n }\n\n const frameworkStatus = getFrameworkInstallStatus(installCwd);\n const frameworkBaselineVersion = getFrameworkUpdateBaselineVersion(installCwd);\n const latestFrameworkVersion = await fetchLatestScopedPackageVersion(auth.token, \"framework\");\n const frameworkUpdateAvailable =\n frameworkStatus.installed\n && frameworkBaselineVersion\n && latestFrameworkVersion\n && isVersionGreater(latestFrameworkVersion, frameworkBaselineVersion);\n\n let shouldUpdateFramework = false;\n if (frameworkUpdateAvailable) {\n ui.subheading(\"Framework update\");\n ui.newline();\n ui.updateRow(\n \"Inventive UI Framework\",\n frameworkBaselineVersion ?? \"unknown\",\n latestFrameworkVersion ?? \"unknown\",\n true,\n );\n ui.newline();\n if (shouldAutoApply) {\n shouldUpdateFramework = true;\n } else if (!nonInteractive) {\n shouldUpdateFramework = await confirm(\"Update Inventive UI Framework now?\", true);\n }\n }\n\n const assetEntries = Object.entries(installedAssets);\n const assetVersionResults = await Promise.all(\n assetEntries.map(async ([assetId, meta]) => {\n const latest = await fetchLatestScopedPackageVersion(auth.token, assetId);\n return { assetId, meta, latest };\n }),\n );\n const assetUpdates: Array<{ id: string; displayName: string; current: string; latest: string }> =\n [];\n for (const { assetId, meta, latest } of assetVersionResults) {\n if (latest && isVersionGreater(latest, meta.version)) {\n assetUpdates.push({\n id: assetId,\n displayName: ASSET_PACKAGES_MAP[assetId]?.displayName ?? assetId,\n current: meta.version,\n latest,\n });\n }\n }\n\n if (assetUpdates.length > 0) {\n ui.subheading(\"Asset package updates\");\n ui.newline();\n for (const asset of assetUpdates) {\n ui.updateRow(asset.displayName, asset.current, asset.latest, true);\n }\n ui.newline();\n\n if (shouldAutoApply) {\n selectedAssets = assetUpdates.map((asset) => asset.id);\n } else if (!nonInteractive) {\n selectedAssets = await promptUpdateSelection(\n assetUpdates.map((asset) => ({\n name: asset.id,\n displayName: asset.displayName,\n current: asset.current,\n latest: asset.latest,\n eligible: true,\n })),\n \"Select asset packages to update\",\n );\n }\n } else {\n ui.info(\"No asset package updates available.\");\n }\n\n const hasAnyUpdates =\n cliUpdateAvailable\n || available.length > 0\n || assetUpdates.length > 0\n || Boolean(frameworkUpdateAvailable);\n\n const alignDeclaredDependencies = (): string[] =>\n syncInventiveUiDeclaredDependencies(installCwd);\n\n if (opts.check === true) {\n if (hasAnyUpdates) {\n ui.done(\"Updates are available.\");\n process.exitCode = 1;\n } else {\n ui.done(\"Everything is up to date.\");\n }\n return;\n }\n\n if (!hasAnyUpdates) {\n const synced = alignDeclaredDependencies();\n if (synced.length > 0) {\n ui.ok(\n `Aligned package.json with hoisted installs (${synced.length} @inventive-ui package${synced.length === 1 ? \"\" : \"s\"})`,\n );\n ui.done(\"Workspace dependency declarations are now in sync.\");\n return;\n }\n ui.done(\"Everything is up to date.\");\n return;\n }\n\n if (\n selectedComponents.length === 0\n && selectedAssets.length === 0\n && !shouldUpdateFramework\n ) {\n if (available.length > 0 && eligibleAvailable.length === 0 && assetUpdates.length === 0 && !frameworkUpdateAvailable) {\n ui.done(\"No eligible updates available.\");\n } else {\n ui.done(\"No updates selected.\");\n }\n return;\n }\n\n let updatedComponents = 0;\n let updatedAssets = 0;\n let updatedFramework = 0;\n\n if (shouldUpdateFramework) {\n await installFramework({\n token: auth.token,\n projectId: project.projectId,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: latestFrameworkVersion ?? undefined,\n });\n updatedFramework = 1;\n }\n\n if (selectedComponents.length > 0) {\n const componentsTargetVersion =\n (await fetchLatestScopedPackageVersion(auth.token, \"components\"))\n ?? eligibleAvailable[0]?.latest_version\n ?? undefined;\n\n const result = await installComponentsPackage({\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: componentsTargetVersion,\n });\n updatedComponents =\n result.previousVersion && result.previousVersion === result.version\n ? 0\n : selectedComponents.length;\n }\n\n for (const assetId of selectedAssets) {\n const assetTarget = assetUpdates.find((asset) => asset.id === assetId);\n const result = await installAssetPackage(assetId, {\n token: auth.token,\n source,\n cwd: installCwd,\n skipWorkspacePrepare,\n forceLatest: true,\n targetVersion: assetTarget?.latest,\n });\n if (!result.previousVersion || result.previousVersion !== result.version) {\n updatedAssets += 1;\n }\n }\n\n const synced = alignDeclaredDependencies();\n if (synced.length > 0) {\n ui.ok(\n `Aligned package.json with installed versions (${synced.length} @inventive-ui package${synced.length === 1 ? \"\" : \"s\"})`,\n );\n }\n\n ui.done(\n `Update complete: ${updatedFramework} framework, ${updatedComponents} component${updatedComponents === 1 ? \"\" : \"s\"}, ${updatedAssets} asset package${updatedAssets === 1 ? \"\" : \"s\"}.`,\n );\n } catch (error) {\n handleError(error);\n }\n}\n","// ─── Framework install (via `iui install framework`) ───────────────────────\n\nimport { requireAuth } from \"../services/auth.js\";\nimport { prepareInstallContext } from \"../services/install-context.js\";\nimport {\n installFramework,\n checkFrameworkInstalled,\n getFrameworkInstallStatus,\n} from \"../services/framework.js\";\nimport {\n isInsideProject,\n readProjectMeta,\n} from \"../utils/filesystem.js\";\nimport { listIuiInitializedPackages } from \"../utils/workspace.js\";\nimport * as ui from \"../utils/ui.js\";\nimport { handleError, CLIError } from \"../utils/errors.js\";\n\nexport async function frameworkInstallCommand(opts?: { source?: string }): Promise<void> {\n try {\n ui.heading(\"Install Framework\");\n\n if (!isInsideProject()) {\n const initialized = listIuiInitializedPackages(process.cwd());\n if (initialized.length > 1) {\n throw new CLIError(\n \"Multiple Inventive UI apps in this monorepo.\",\n \"cd into one app (e.g. apps/docs) or use -C apps/docs\",\n );\n }\n throw new CLIError(\n \"Not an Inventive UI project.\",\n initialized.length === 0 ? \"iui init\" : \"cd into an initialized app or use -C <app-dir>\",\n );\n }\n\n const auth = requireAuth();\n const project = readProjectMeta()!;\n const { cwd: installCwd, skipWorkspacePrepare } = prepareInstallContext(auth.token);\n\n await installFramework({\n token: auth.token,\n projectId: project.projectId,\n source: opts?.source === \"registry\" ? \"registry\" : \"api\",\n cwd: installCwd,\n skipWorkspacePrepare,\n });\n\n if (checkFrameworkInstalled(installCwd)) {\n const status = getFrameworkInstallStatus(installCwd);\n if (status.version) {\n ui.kv(\"Version\", status.version);\n }\n }\n\n ui.done(\"Framework is ready.\");\n ui.nextSteps([\n \"iui install components — Install component library\",\n \"iui install assets — Install asset packages\",\n ]);\n } catch (error) {\n handleError(error);\n }\n}\n","export type SlotRegistryRunMode = \"validate\" | \"repair\";\n\nexport interface SlotRegistryRunPolicy {\n mode: SlotRegistryRunMode;\n repairInstall: boolean;\n}\n\nconst REPAIR_COMMANDS = new Set([\n \"install\",\n \"update\",\n \"assets\",\n]);\n\nexport function resolveSlotRegistryRunPolicy(\n commandName: string,\n options?: { fix?: boolean },\n): SlotRegistryRunPolicy {\n if (commandName === \"doctor\" && options?.fix === true) {\n return { mode: \"repair\", repairInstall: true };\n }\n if (REPAIR_COMMANDS.has(commandName)) {\n return { mode: \"repair\", repairInstall: true };\n }\n return { mode: \"validate\", repairInstall: false };\n}\n\n"],"mappings":"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","names":["path","boxen","hint","boxen","hint","ora","path","path","fileURLToPath","os","fs","fs","path","fs","path","os","now","fs","path","path","path","fs","path","path","fs","fs","path","dir","iuiRoot","at","fs","path","__dirname","newArr","newPluginsProp","newProps","dedupeProp","resolveObj","newResolveProp","newResolveProps","newResolveObj","newConfigProps","excludeProp","optimizeObj","newOptimizeProp","newOptimizeProps","newOptimizeObj","ts","path","fs","path","fs","ts","path","fs","z","path","fs","assets","path","path","path","path","os","fs","fileURLToPath","assets","path","fs","path","fs","runSyncInstall","os","separator","path","devices","chalk","hint","chalk","ok","path","ora","parseApiErrorBody","parseApiErrorBody","hint","hint","path","fs","os","path","hint","path","os","path","fs","path","fs","path","fs","runSyncInstall","step","FRAMEWORK_PACKAGE","fs","path","runSyncInstall","ora","fs","path","fs","path","fs","path","fs","path","path","fs","path","fs","fs","path","fs","path","fs","path","path","iuiProjectRoot","path","path","iuiProjectRoot","fs","hint","path","fs","fs","existingSlots","path","iuiProjectRoot","iuiRoot","path","fs","fs","path","path","fs","iuiRoot","iuiRoot","path","fs","fs","runSyncInstall","iuiRoot","path","ora","result","now","path","ora","ora","ora","ora","now","inquirer","chalk","PROMPT_PREFIX","devices","inquirer","hint","ok","path","fs","ora","path","execFileSync","path","fs","path","fs","execFileSync","assets","iuiRoot","fail","warning","hint","path","path","fs","installCmd","ora","runSyncInstall","auth","ora","ora","synced","path"]}
|