{"version":3,"file":"cli.cjs","names":["colors","frames","icons","gradients","formatDuration","sumPhaseDurations","findConfigPath","findCommandDescriptor","bosPlugin","parseCommandInput","p","consumeDevSession","promptInitBasic","fetchParentConfig","promptInitOverrides","runDockerComposeUp"],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport * as p from \"@clack/prompts\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { printHelp } from \"./cli/help\";\nimport { fetchParentConfig, runDockerComposeUp } from \"./cli/init\";\nimport { parseCommandInput } from \"./cli/parse\";\nimport { promptInitBasic, promptInitOverrides } from \"./cli/prompts\";\nimport { formatDuration, sumPhaseDurations } from \"./cli/timing\";\nimport { findConfigPath } from \"./config\";\nimport type {\n  DevOptions,\n  DevResult,\n  InitOptions,\n  InitResult,\n  OverrideSection,\n  StartOptions,\n  StartResult,\n} from \"./contract\";\nimport type { ProgressEvent, StartSummary } from \"./plugin\";\nimport bosPlugin, { consumeDevSession, pluginEvents } from \"./plugin\";\nimport { createPluginRuntime } from \"./sdk\";\nimport { printBanner } from \"./utils/banner\";\nimport { colors, frames, gradients, icons } from \"./utils/theme\";\n\nfunction printConfigView(result: {\n  account: string;\n  domain?: string;\n  staging?: { domain: string };\n  app: {\n    host: { name?: string; development: string; production?: string };\n    ui: { name?: string; development?: string; production?: string; ssr?: string };\n    api: { name?: string; development?: string; production?: string; proxy?: string };\n  };\n}) {\n  console.log();\n  console.log(colors.cyan(frames.top(52)));\n  console.log(`  ${icons.app} ${gradients.cyber(\"CONFIG\")}`);\n  console.log(colors.cyan(frames.bottom(52)));\n  console.log();\n\n  console.log(`  ${colors.dim(\"Account\")}  ${colors.cyan(result.account)}`);\n  console.log(`  ${colors.dim(\"Domain\")}   ${colors.white(result.domain ?? \"not configured\")}`);\n  if (result.staging) {\n    console.log(`  ${colors.dim(\"Staging\")}  ${colors.magenta(result.staging.domain)}`);\n  }\n  console.log();\n}\n\nfunction formatTimeAgo(isoTimestamp: string): string {\n  const now = Date.now();\n  const then = new Date(isoTimestamp).getTime();\n  const diffMs = now - then;\n  const diffMins = Math.floor(diffMs / 60_000);\n  if (diffMins < 1) return \"just now\";\n  if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n  const diffHours = Math.floor(diffMins / 60);\n  if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n  const diffDays = Math.floor(diffHours / 24);\n  if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n  return isoTimestamp.split(\"T\")[0] ?? isoTimestamp;\n}\n\nfunction normalizeVersion(v: string): string {\n  return v.replace(/^[\\^~>=v]+/, \"\").trim();\n}\n\nfunction printTimingSummary(timings: Array<{ name: string; durationMs: number }> | undefined) {\n  if (!timings || timings.length === 0) return;\n\n  console.log(`  ${colors.dim(\"Timings:\")}`);\n  for (const timing of timings) {\n    console.log(`    ${colors.dim(timing.name.padEnd(22))} ${formatDuration(timing.durationMs)}`);\n  }\n  console.log(\n    `    ${colors.dim(\"total\".padEnd(22))} ${formatDuration(sumPhaseDurations(timings))}`,\n  );\n}\n\nfunction printStartSummary(summary: StartSummary) {\n  console.log();\n  console.log(`  ${colors.dim(\"Config Source:\")}  ${summary.configSource}`);\n  if (summary.configSourceHttp) {\n    console.log(`                  ${colors.dim(summary.configSourceHttp)}`);\n  }\n  console.log(`  ${colors.dim(\"Account:\")}        ${summary.account}`);\n  console.log(`  ${colors.dim(\"Domain:\")}         ${summary.domain ?? \"not configured\"}`);\n  console.log();\n  console.log(`  ${colors.dim(\"Modules:\")}`);\n  console.log(`    ${colors.dim(\"HOST\")}  → ${summary.modules.host ?? \"local\"}`);\n  console.log(`    ${colors.dim(\"UI\")}   → ${summary.modules.ui ?? \"local\"}`);\n  console.log(`    ${colors.dim(\"API\")}  → ${summary.modules.api ?? \"local\"}`);\n  if (summary.modules.auth) {\n    console.log(`    ${colors.dim(\"AUTH\")}  → ${summary.modules.auth}`);\n  }\n  if (summary.warnings.length > 0) {\n    console.log();\n    for (const w of summary.warnings) {\n      console.log(`  ${colors.yellow(w)}`);\n    }\n  }\n  console.log();\n}\n\nfunction clearSpinnerStopLine() {\n  if (!process.stdout.isTTY) return;\n  process.stdout.write(\"\\u001B[1A\\u001B[2K\\u001B[1G\");\n}\n\nasync function warnIfOutdated(client: any, command: string): Promise<void> {\n  if (![\"dev\", \"build\", \"start\"].includes(command)) return;\n\n  try {\n    const status = await client.status();\n    if (status.status === \"error\" || !status.packages) return;\n\n    const frameworkPackages = [\"everything-dev\", \"every-plugin\"];\n\n    const outdated = status.packages.filter(\n      (p: { name: string; installed?: string; latest?: string }) =>\n        p.installed &&\n        p.latest &&\n        normalizeVersion(p.installed) !== normalizeVersion(p.latest) &&\n        frameworkPackages.includes(p.name),\n    );\n\n    if (outdated.length === 0) return;\n\n    console.log();\n    console.log(colors.yellow(`  ! Outdated packages detected:`));\n    for (const pkg of outdated) {\n      console.log(colors.dim(`    ${pkg.name}  ${pkg.installed} → ${pkg.latest}`));\n    }\n    console.log(\n      colors.dim(\n        `    Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n      ),\n    );\n    console.log();\n  } catch {\n    // silently ignore if status check fails\n  }\n}\n\nasync function main() {\n  const args = process.argv.slice(2);\n\n  if (args.includes(\"--help\") || args.includes(\"-h\")) {\n    printHelp();\n    return;\n  }\n\n  const invocationArgs = args.length > 0 ? args : [\"dev\"];\n  const command = invocationArgs[0] ?? \"dev\";\n  const configPath = findConfigPath();\n\n  const commandMatch = findCommandDescriptor(invocationArgs);\n  if (!commandMatch) {\n    console.error(`Unknown command: ${command}`);\n    process.exit(1);\n  }\n\n  const { descriptor, consumed } = commandMatch;\n  const commandArgs = invocationArgs.slice(consumed);\n\n  printBanner();\n\n  const runtime = createPluginRuntime({\n    registry: {\n      bos: { module: bosPlugin },\n    },\n    secrets: {},\n  });\n\n  const pluginRuntime: any = runtime;\n  const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n  const plugin = await loadPlugin(\"bos\", {\n    variables: {\n      configPath: configPath ?? undefined,\n    },\n    secrets: {},\n  });\n\n  const client = plugin.createClient();\n\n  await warnIfOutdated(client, command);\n\n  try {\n    const input = parseCommandInput(descriptor, commandArgs);\n\n    if (descriptor.key === \"dev\") {\n      const devSpinner = p.spinner();\n      devSpinner.start(\"Starting dev environment\");\n\n      const devPhaseLabels: Record<string, string> = {\n        config: \"Preparing config...\",\n        install: \"Installing dependencies...\",\n        \"build plugin\": \"Building plugin...\",\n        build: \"Building everything-dev...\",\n      };\n\n      const onDevProgress = (event: ProgressEvent) => {\n        const label = devPhaseLabels[event.phase] ?? event.phase;\n        if (event.status === \"running\") {\n          devSpinner.message(label);\n        }\n      };\n      pluginEvents.on(\"progress\", onDevProgress);\n\n      let result: DevResult;\n      try {\n        result = await client.dev(input as DevOptions);\n      } finally {\n        pluginEvents.off(\"progress\", onDevProgress);\n      }\n\n      if (result.status === \"error\") {\n        devSpinner.stop(\"Failed\");\n        console.error(`[CLI] ${result.description}`);\n        process.exit(1);\n      }\n\n      devSpinner.stop();\n      clearSpinnerStopLine();\n\n      const session = consumeDevSession();\n      if (session) {\n        const { devApp } = await import(\"./dev-session\");\n        devApp(session.orchestrator, session.services, session.runtimeConfig);\n      }\n      return;\n    }\n\n    if (descriptor.key === \"start\") {\n      const startSpinner = p.spinner();\n      startSpinner.start(\"Starting production environment\");\n\n      const startPhaseLabels: Record<string, string> = {\n        config: \"Preparing config...\",\n        \"generate artifacts\": \"Generating code artifacts...\",\n      };\n\n      const onStartProgress = (event: ProgressEvent) => {\n        const label = startPhaseLabels[event.phase] ?? event.phase;\n        if (event.status === \"running\") {\n          startSpinner.message(label);\n        }\n      };\n      pluginEvents.on(\"progress\", onStartProgress);\n\n      let result: StartResult;\n      try {\n        result = await client.start(input as StartOptions);\n      } finally {\n        pluginEvents.off(\"progress\", onStartProgress);\n      }\n\n      if (result.status === \"error\") {\n        startSpinner.stop(\"Failed\");\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n\n      startSpinner.stop(\"Ready\");\n\n      const session = consumeDevSession();\n      if (session) {\n        const summary = session.summary;\n        if (summary) {\n          printStartSummary(summary);\n        }\n        const { startApp } = await import(\"./dev-session\");\n        startApp(session.orchestrator, session.services, session.runtimeConfig);\n      }\n      return;\n    }\n\n    if (descriptor.key === \"init\") {\n      let initInput: InitOptions = { ...(input as InitOptions) };\n\n      if (!initInput.noInteractive) {\n        const basic = await promptInitBasic({\n          extends: initInput.extends,\n          account: initInput.account,\n          domain: initInput.domain,\n        });\n\n        let parentPluginKeys: string[] = [];\n        let parentConfig: {\n          title?: string;\n          description?: string;\n          plugins?: Record<string, unknown>;\n        } | null = null;\n\n        const fetchSpinner = p.spinner();\n        fetchSpinner.start(\"Fetching parent config\");\n        try {\n          parentConfig = await fetchParentConfig(basic.extendsAccount, basic.extendsGateway);\n          if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n            parentPluginKeys = Object.keys(parentConfig.plugins);\n          }\n        } catch {\n          fetchSpinner.stop(\"Config not found\");\n          console.error(\n            `[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n          );\n          process.exit(1);\n        }\n        fetchSpinner.stop(\"Config fetched\");\n\n        if (\n          typeof parentConfig?.title === \"string\" &&\n          parentConfig.title.trim() &&\n          typeof parentConfig?.description === \"string\" &&\n          parentConfig.description.trim()\n        ) {\n          const shouldContinue = await p.confirm({\n            message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,\n            initialValue: true,\n          });\n\n          if (p.isCancel(shouldContinue) || !shouldContinue) {\n            process.exit(0);\n          }\n        }\n\n        const overrides = await promptInitOverrides({\n          parentPluginKeys,\n          plugins: initInput.plugins,\n          overrides: initInput.overrides as OverrideSection[] | undefined,\n        });\n\n        const directory = initInput.directory || basic.domain || basic.extendsGateway;\n\n        initInput = {\n          ...initInput,\n          extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n          directory,\n          account: basic.account,\n          domain: basic.domain || undefined,\n          plugins: overrides.plugins,\n          overrides: overrides.overrides,\n          noInteractive: true,\n        };\n      }\n\n      const initSpinner = p.spinner();\n      initSpinner.start(\"Initializing project\");\n\n      const phaseLabels: Record<string, string> = {\n        \"parent config\": \"Fetching parent config...\",\n        \"template source\": \"Resolving template source...\",\n        \"scaffold project\": \"Creating project scaffold...\",\n        \"copy files\": \"Copying template files...\",\n        \"personalize config\": \"Personalizing config...\",\n        \"write snapshot\": \"Writing snapshot...\",\n        \"resolve config\": \"Resolving config...\",\n        \"generate env/docker\": \"Generating environment config...\",\n        \"create env file\": \"Creating .env file...\",\n        \"install dependencies\": \"Installing dependencies...\",\n        \"generate types\": \"Generating types...\",\n        \"generate migrations\": \"Generating database migrations...\",\n        \"generate code artifacts\": \"Generating code artifacts...\",\n      };\n\n      const onProgress = (event: ProgressEvent) => {\n        const label = phaseLabels[event.phase] ?? event.phase;\n        if (event.status === \"running\") {\n          initSpinner.message(label);\n        }\n      };\n      pluginEvents.on(\"progress\", onProgress);\n\n      let result: InitResult;\n      try {\n        result = await client.init(initInput);\n      } finally {\n        pluginEvents.off(\"progress\", onProgress);\n      }\n\n      if (result.status === \"error\") {\n        initSpinner.stop(\"Failed\");\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n\n      initSpinner.stop(\"Project initialized\");\n\n      console.log(`  ${colors.dim(\"Extends:\")} ${result.extends}`);\n      console.log(`  ${colors.dim(\"Directory:\")} ${result.directory}`);\n      if (result.account) console.log(`  ${colors.dim(\"Account:\")} ${result.account}`);\n      if (result.domain) console.log(`  ${colors.dim(\"Domain:\")} ${result.domain}`);\n      if (result.overrides && result.overrides.length > 0)\n        console.log(`  ${colors.dim(\"Overrides:\")} ${result.overrides.join(\", \")}`);\n      if (result.plugins && result.plugins.length > 0)\n        console.log(`  ${colors.dim(\"Plugins:\")} ${result.plugins.join(\", \")}`);\n      console.log(`  ${colors.dim(\"Files copied:\")} ${result.filesCopied}`);\n      printTimingSummary(result.timings);\n      console.log();\n      console.log(colors.dim(\"  Next steps:\"));\n      console.log(colors.dim(`    cd ${result.directory}`));\n      if (!initInput.noInstall) {\n        console.log(colors.dim(\"    docker compose up -d --wait\"));\n        console.log(colors.dim(\"    bun run dev\"));\n      } else {\n        console.log(colors.dim(\"    bun install\"));\n        console.log(colors.dim(\"    docker compose up -d --wait\"));\n        console.log(colors.dim(\"    bun run dev\"));\n      }\n      console.log();\n\n      if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) {\n        const shouldStartDocker = await p.confirm({\n          message: \"Run docker compose up -d --wait?\",\n          initialValue: true,\n        });\n\n        if (shouldStartDocker === true) {\n          const dockerSpinner = p.spinner();\n          dockerSpinner.start(\"Starting Docker services\");\n          try {\n            await runDockerComposeUp(result.targetDir);\n            dockerSpinner.stop(\"Docker services ready\");\n          } catch (error) {\n            dockerSpinner.stop(\"Docker services not started\");\n            p.log.warn(\n              `docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`,\n            );\n          }\n        }\n      }\n\n      return;\n    }\n\n    const result = await (client as any)[descriptor.key](input);\n\n    if (descriptor.key === \"config\") {\n      if (!result.config) {\n        console.error(\"No bos.config.json found\");\n        process.exit(1);\n      }\n\n      printConfigView(result.config);\n      process.stdout.write(`${JSON.stringify(result.config, null, 2)}\\n`);\n      return;\n    }\n\n    if (descriptor.key === \"sync\") {\n      console.log();\n      if (result.status === \"error\") {\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n      if (result.status === \"dry-run\") {\n        console.log(colors.cyan(`${icons.ok} Dry run — no files written`));\n      } else {\n        console.log(colors.green(`${icons.ok} Template synced`));\n      }\n      if (result.updated.length > 0) {\n        console.log(`  ${colors.dim(\"Updated:\")} ${result.updated.length} file(s)`);\n        for (const f of result.updated) console.log(`    ${colors.dim(f)}`);\n      }\n      if (result.added.length > 0) {\n        console.log(`  ${colors.dim(\"Added:\")} ${result.added.length} file(s)`);\n        for (const f of result.added) console.log(`    ${colors.dim(f)}`);\n      }\n      if (result.skipped.length > 0) {\n        console.log(\n          `  ${colors.yellow(\"Skipped:\")} ${result.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n        );\n        for (const f of result.skipped) console.log(`    ${colors.dim(f)}`);\n      }\n      if (result.updated.length === 0 && result.added.length === 0 && result.skipped.length === 0) {\n        console.log(`  ${colors.dim(\"Already up to date\")}`);\n      }\n      if (result.status !== \"dry-run\" && result.updated.length > 0) {\n        console.log();\n        console.log(colors.dim(\"  Review changes — your customizations take priority:\"));\n        console.log(\n          colors.dim(\n            \"    • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts — never overwritten\",\n          ),\n        );\n        console.log(\n          colors.dim(\"    • ui/src/components/**, ui/src/styles.css — never overwritten\"),\n        );\n        console.log(\n          colors.dim(\n            \"    • Other updated files — accept framework improvements, then restore your changes\",\n          ),\n        );\n        console.log(colors.dim(\"    • Skipped files — yours already, only update with --force\"));\n      }\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"upgrade\") {\n      console.log();\n      if (result.status === \"error\") {\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n      if (result.status === \"dry-run\") {\n        console.log(colors.cyan(`${icons.ok} Dry run — no changes applied`));\n      } else {\n        console.log(colors.green(`${icons.ok} Upgrade successful`));\n      }\n      for (const pkg of result.packages) {\n        if (pkg.from && pkg.from !== pkg.to) {\n          console.log(`  ${colors.dim(`${pkg.name}:`)} ${pkg.from} → ${pkg.to}`);\n        } else if (!pkg.from) {\n          console.log(`  ${colors.dim(`${pkg.name}:`)} ${pkg.to} (new)`);\n        } else {\n          console.log(`  ${colors.dim(`${pkg.name}:`)} ${pkg.to} (up to date)`);\n        }\n      }\n      if (result.changelogUrl) {\n        console.log(`  ${colors.dim(\"Changelog:\")} ${result.changelogUrl}`);\n      }\n      if (result.availablePlugins && result.availablePlugins.length > 0) {\n        console.log(`  ${colors.dim(\"New parent plugins:\")} ${result.availablePlugins.join(\", \")}`);\n      }\n      if (result.selectedPlugins && result.selectedPlugins.length > 0) {\n        console.log(`  ${colors.dim(\"Added plugins:\")} ${result.selectedPlugins.join(\", \")}`);\n      }\n      printTimingSummary(result.timings);\n      if (result.sync) {\n        const sync = result.sync;\n        if (sync.updated.length > 0) {\n          console.log(`  ${colors.dim(\"Updated:\")} ${sync.updated.length} file(s)`);\n          for (const f of sync.updated) console.log(`    ${colors.dim(f)}`);\n        }\n        if (sync.added.length > 0) {\n          console.log(`  ${colors.dim(\"Added:\")} ${sync.added.length} file(s)`);\n          for (const f of sync.added) console.log(`    ${colors.dim(f)}`);\n        }\n        if (sync.skipped.length > 0) {\n          console.log(\n            `  ${colors.yellow(\"Skipped:\")} ${sync.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n          );\n          for (const f of sync.skipped) console.log(`    ${colors.dim(f)}`);\n        }\n        if (\n          result.status !== \"dry-run\" &&\n          (sync.updated.length > 0 || sync.added.length > 0 || sync.skipped.length > 0)\n        ) {\n          console.log();\n          console.log(colors.dim(\"  Resolve differences — your code takes priority:\"));\n          console.log();\n          console.log(colors.dim(\"  Never overwritten (safe):\"));\n          console.log(\n            colors.dim(\"    • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts\"),\n          );\n          console.log(colors.dim(\"    • ui/src/components/**, ui/src/styles.css\"));\n          console.log();\n          console.log(colors.dim(\"  Replaced — review and keep your changes:\"));\n          console.log(\n            colors.dim(\n              \"    • api/drizzle.config.ts, api/tsconfig.json, api/tsconfig.contract.json\",\n            ),\n          );\n          console.log(colors.dim(\"    • api/plugin.dev.ts, api/rspack.config.js\"));\n          console.log(colors.dim(\"    • ui/src/routes/* (core routes only)\"));\n          console.log();\n          console.log(colors.dim(\"  Merged — your deps preserved:\"));\n          console.log(colors.dim(\"    • package.json, api/package.json, ui/package.json\"));\n          console.log();\n          console.log(colors.dim(\"  Skipped — already yours:\"));\n          console.log(colors.dim(\"    • Use --force only if you want framework updates\"));\n        }\n      }\n      if (result.migrated && result.migrated.length > 0) {\n        console.log(`  ${colors.yellow(\"Removed:\")} ${result.migrated.length} obsolete file(s)`);\n        for (const f of result.migrated) console.log(`    ${colors.dim(f)}`);\n      }\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"status\") {\n      console.log();\n      if (result.status === \"error\") {\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n      console.log(colors.cyan(frames.top(52)));\n      console.log(`  ${icons.app} ${gradients.cyber(\"STATUS\")}`);\n      console.log(colors.cyan(frames.bottom(52)));\n      console.log();\n      if (result.extends) console.log(`  ${colors.dim(\"Extends:\")}     ${result.extends}`);\n      if (result.account) console.log(`  ${colors.dim(\"Account:\")}     ${result.account}`);\n      if (result.domain) console.log(`  ${colors.dim(\"Domain:\")}      ${result.domain}`);\n      console.log();\n      console.log(`  ${colors.dim(\"Packages:\")}`);\n      for (const pkg of result.packages) {\n        const hasUpdate =\n          pkg.installed &&\n          pkg.latest &&\n          normalizeVersion(pkg.installed) !== normalizeVersion(pkg.latest);\n        const versionStr = hasUpdate\n          ? `${pkg.installed}  →  ${pkg.latest}`\n          : pkg.installed || \"not installed\";\n        const label = hasUpdate ? colors.yellow(versionStr) : colors.dim(versionStr);\n        console.log(`    ${colors.dim(`${pkg.name}`)}  ${label}`);\n      }\n      console.log();\n      if (result.lastSync) {\n        const ago = formatTimeAgo(result.lastSync);\n        console.log(`  ${colors.dim(\"Last sync:\")}   ${ago}`);\n      } else {\n        console.log(`  ${colors.dim(\"Last sync:\")}   never`);\n      }\n      const envLabel =\n        result.envFile === \"found\"\n          ? colors.green(\"found\")\n          : result.envFile === \"example-only\"\n            ? colors.yellow(\"missing (only .env.example found)\")\n            : colors.error(\"missing\");\n      console.log(`  ${colors.dim(\".env:\")}         ${envLabel}`);\n      if (result.parentReachable !== undefined) {\n        const parentLabel = result.parentReachable\n          ? colors.green(\"reachable\")\n          : colors.error(\"unreachable\");\n        console.log(`  ${colors.dim(\"Parent:\")}      ${parentLabel}`);\n      }\n      const hasUpdates = result.packages.some(\n        (p: { installed?: string; latest?: string }) =>\n          p.installed && p.latest && normalizeVersion(p.installed) !== normalizeVersion(p.latest),\n      );\n      if (hasUpdates) {\n        console.log();\n        console.log(\n          colors.dim(\n            `  Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n          ),\n        );\n      }\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"typesGen\") {\n      console.log();\n      if (result.status === \"error\") {\n        console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n        process.exit(1);\n      }\n      console.log(colors.green(`${icons.ok} Types generated`));\n      if (result.source) {\n        console.log(\n          `  ${colors.dim(\"Mode:\")} ${result.source === \"remote\" ? colors.cyan(\"remote\") : colors.dim(\"local\")}`,\n        );\n      }\n      if (result.generated.length > 0) {\n        console.log(`  ${colors.dim(\"Generated:\")}`);\n        for (const f of result.generated) console.log(`    ${colors.dim(f)}`);\n      }\n      if (result.fetched.length > 0) {\n        console.log(`  ${colors.dim(\"Fetched from remote:\")}`);\n        for (const url of result.fetched) console.log(`    ${colors.dim(url)}`);\n      }\n      if (result.skipped.length > 0) {\n        console.log(`  ${colors.dim(\"Skipped (local):\")}`);\n        for (const s of result.skipped) console.log(`    ${colors.dim(s)}`);\n      }\n      if (result.failed.length > 0) {\n        console.log(`  ${colors.yellow(\"Failed:\")}`);\n        for (const f of result.failed) console.log(`    ${colors.error(f)}`);\n      }\n      console.log();\n      return;\n    }\n\n    if (result?.status === \"error\") {\n      console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n      process.exit(1);\n    }\n\n    if (descriptor.key === \"keyPublish\") {\n      process.stdout.write(`Generated publish key for ${result.account}\\n`);\n      process.stdout.write(`  Network: ${result.network}\\n`);\n      process.stdout.write(`  Contract: ${result.contract}\\n`);\n      process.stdout.write(`  Allowance: ${result.allowance}\\n`);\n      process.stdout.write(`  Functions: ${result.functionNames.join(\", \")}\\n`);\n      process.stdout.write(`  Public key: ${result.publicKey}\\n`);\n      process.stdout.write(`  Private key: ${result.privateKey}\\n`);\n      process.stdout.write(`  Copy: NEAR_PRIVATE_KEY=${result.privateKey}\\n`);\n    }\n\n    if (descriptor.key === \"pluginAdd\") {\n      console.log();\n      console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n      if (result.development) console.log(`  ${colors.dim(\"Development:\")} ${result.development}`);\n      if (result.production) console.log(`  ${colors.dim(\"Production:\")} ${result.production}`);\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"pluginRemove\") {\n      console.log();\n      console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"pluginList\") {\n      console.log();\n      console.log(colors.cyan(frames.top(52)));\n      console.log(`  ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n      console.log(colors.cyan(frames.bottom(52)));\n      console.log();\n      if (result.plugins.length === 0) {\n        console.log(colors.dim(\"  No plugins configured\"));\n      } else {\n        for (const pluginItem of result.plugins) {\n          console.log(`  ${colors.cyan(pluginItem.key)}`);\n          if (pluginItem.development)\n            console.log(`    ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n          if (pluginItem.production)\n            console.log(`    ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n        }\n      }\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"pluginPublish\") {\n      console.log();\n      console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n      if (result.path) console.log(`  ${colors.dim(\"Path:\")} ${result.path}`);\n      if (result.script) console.log(`  ${colors.dim(\"Script:\")} bun run ${result.script}`);\n      if (result.production) console.log(`  ${colors.dim(\"Production:\")} ${result.production}`);\n      console.log();\n      return;\n    }\n\n    if (descriptor.key === \"publish\") {\n      if (result.status === \"dry-run\") {\n        console.log();\n        console.log(colors.cyan(`${icons.ok} Dry run complete`));\n        console.log(`  ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n        console.log();\n        return;\n      }\n\n      if (result.status === \"published\") {\n        console.log();\n        console.log(colors.green(`${icons.ok} Published successfully`));\n        console.log(`  ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n        if (result.txHash) {\n          console.log(`  ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n        }\n        if (result.built && result.built.length > 0) {\n          console.log(`  ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n        }\n        if (result.skipped && result.skipped.length > 0) {\n          console.log(`  ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n        }\n        console.log();\n        return;\n      }\n    }\n  } catch (error) {\n    console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n    process.exit(1);\n  }\n}\n\nmain().catch((error) => {\n  console.error(\"[CLI] Fatal error:\", error);\n  process.exit(1);\n});\n"],"mappings":"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"}