{"version":3,"file":"upgrade.mjs","names":[],"sources":["../../src/cli/upgrade.ts"],"sourcesContent":["import { existsSync, readFileSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { PhaseTiming, UpgradeOptions, UpgradeResult } from \"../contract\";\nimport { resolveExtendsRef } from \"../merge\";\nimport { syncResolvedSharedDeps } from \"../shared-deps\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { readInstalledFrameworkVersion } from \"./framework-version\";\nimport {\n  buildChildRootScripts,\n  fetchParentConfig,\n  resolveCatalogChainSource,\n  runBunInstallForUpgrade,\n  runTypesGen,\n} from \"./init\";\nimport { syncTemplate } from \"./sync\";\nimport { timePhase } from \"./timing\";\n\nconst FRAMEWORK_PACKAGES = [\"everything-dev\", \"every-plugin\"];\nconst AUTH_CORE_PACKAGE = \"@better-auth/core\";\nconst AUTH_CORE_TRIGGER_PACKAGES = [\n  \"better-auth\",\n  \"better-near-auth\",\n  \"@better-auth/api-key\",\n  \"@better-auth/passkey\",\n] as const;\nconst LEGACY_UI_IMPORT_REWRITES = [\n  ['from \"@/auth\"', 'from \"@/app\"'],\n  [\"from '@/auth'\", \"from '@/app'\"],\n  ['from \"@/lib/auth-utils\"', 'from \"@/lib/auth\"'],\n  [\"from '@/lib/auth-utils'\", \"from '@/lib/auth'\"],\n  ['from \"@/lib/use-api-client\"', 'from \"@/app\"'],\n  [\"from '@/lib/use-api-client'\", \"from '@/app'\"],\n  ['from \"@/lib/api-client\"', 'from \"@/app\"'],\n  [\"from '@/lib/api-client'\", \"from '@/app'\"],\n] as const;\nconst OBSOLETE_FILES = [\n  \"api/src/lib/plugins.ts\",\n  \"ui/src/auth.ts\",\n  \"ui/src/auth-types.gen.ts\",\n  \"ui/src/lib/api-client.ts\",\n  \"ui/src/lib/use-api-client.ts\",\n  \"ui/src/lib/auth-utils.ts\",\n  \"ui/src/api-contract.ts\",\n  \"ui/src/api-contract.gen.ts\",\n  \"ui/src/lib/auth-client.ts\",\n  \"ui/src/lib/session.ts\",\n  \"ui/scripts/generate-metadata.ts\",\n  \".github/dependabot.yml\",\n  \".github/templates/dependabot.yml\",\n  \".github/renovate.json\",\n  \".github/workflows/packages-release.yml\",\n  \".github/workflows/publish.yml\",\n  \".github/workflows/release-sync.yml\",\n  \"api/src/db/migrator.ts\",\n  \"api/src/db/load-migrations.ts\",\n  \"packages/everything-dev/cli.js\",\n  \".templatekeep\",\n  \".templatesync-exclude\",\n];\n\ninterface ExtendedRootSource {\n  catalog: Record<string, string>;\n  repository?: string;\n  extendsChain: string[];\n}\n\nfunction extractSemver(value: string | undefined): string | null {\n  if (!value) return null;\n  const match = value.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n  return match?.[0] ?? null;\n}\n\nfunction readJsonFile<T>(filePath: string): T {\n  return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nfunction readRootPackageJson(projectDir: string): Record<string, unknown> {\n  return readJsonFile<Record<string, unknown>>(join(projectDir, \"package.json\"));\n}\n\nfunction readRootCatalogEntry(projectDir: string, packageName: string): string | undefined {\n  const pkg = readRootPackageJson(projectDir) as {\n    workspaces?: { catalog?: Record<string, string> };\n  };\n  return pkg.workspaces?.catalog?.[packageName];\n}\n\nfunction readCurrentPackageSpecifier(projectDir: string, packageName: string): string | undefined {\n  const pkg = readRootPackageJson(projectDir);\n\n  for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n    const field = pkg[fieldName] as Record<string, string> | undefined;\n    const value = field?.[packageName];\n    if (!value) continue;\n\n    if (value === \"catalog:\") {\n      return (\n        readRootCatalogEntry(projectDir, packageName) ??\n        readInstalledVersion(projectDir, packageName)\n      );\n    }\n\n    if (value.startsWith(\"workspace:\") || value.startsWith(\"file:\") || value.startsWith(\"link:\")) {\n      return readInstalledVersion(projectDir, packageName);\n    }\n\n    return value;\n  }\n\n  return (\n    readRootCatalogEntry(projectDir, packageName) ?? readInstalledVersion(projectDir, packageName)\n  );\n}\n\nfunction setCatalogRefs(\n  field: Record<string, string> | undefined,\n  packageNames: ReadonlyArray<string>,\n): boolean {\n  if (!field) return false;\n\n  let modified = false;\n  for (const packageName of packageNames) {\n    if (setCatalogRef(field, packageName)) {\n      modified = true;\n    }\n  }\n\n  return modified;\n}\n\nfunction syncPackageObjectCatalogRefs(\n  pkg: Record<string, unknown>,\n  packageNames: ReadonlyArray<string>,\n): boolean {\n  let modified = false;\n\n  for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n    const field = pkg[fieldName] as Record<string, string> | undefined;\n    if (setCatalogRefs(field, packageNames)) {\n      modified = true;\n    }\n  }\n\n  return modified;\n}\n\nfunction findPackageFieldWithAnyDependency(\n  pkg: Record<string, unknown>,\n  packageNames: ReadonlyArray<string>,\n): Record<string, string> | undefined {\n  for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n    const field = pkg[fieldName] as Record<string, string> | undefined;\n    if (!field) continue;\n    if (packageNames.some((packageName) => typeof field[packageName] === \"string\")) {\n      return field;\n    }\n  }\n\n  return undefined;\n}\n\nfunction packageObjectNeedsAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n  const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n  if (!targetField) return false;\n\n  for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n    const field = pkg[fieldName] as Record<string, string> | undefined;\n    if (field?.[AUTH_CORE_PACKAGE]) return false;\n  }\n\n  return true;\n}\n\nfunction ensureAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n  if (!packageObjectNeedsAuthCoreCatalogRef(pkg)) return false;\n\n  const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n  if (!targetField) return false;\n\n  targetField[AUTH_CORE_PACKAGE] = \"catalog:\";\n  return true;\n}\n\nfunction packageObjectNeedsCatalogRefs(\n  pkg: Record<string, unknown>,\n  packageNames: ReadonlyArray<string>,\n): boolean {\n  for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n    const field = pkg[fieldName] as Record<string, string> | undefined;\n    if (!field) continue;\n\n    for (const packageName of packageNames) {\n      const value = field[packageName];\n      if (!value) continue;\n      if (value !== \"catalog:\" && !value.startsWith(\"file:\") && !value.startsWith(\"link:\")) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction packageFileNeedsCatalogRefs(\n  filePath: string,\n  packageNames: ReadonlyArray<string>,\n): boolean {\n  return packageObjectNeedsCatalogRefs(\n    readJsonFile<Record<string, unknown>>(filePath),\n    packageNames,\n  );\n}\n\nfunction updatePackageFileCatalogRefs(\n  filePath: string,\n  packageNames: ReadonlyArray<string>,\n): boolean {\n  const pkg = readJsonFile<Record<string, unknown>>(filePath);\n  const modified = syncPackageObjectCatalogRefs(pkg, packageNames);\n\n  if (modified) {\n    writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n  }\n\n  return modified;\n}\n\nfunction updatePackageFileAuthCoreRef(filePath: string): boolean {\n  const pkg = readJsonFile<Record<string, unknown>>(filePath);\n  const modified = ensureAuthCoreCatalogRef(pkg);\n\n  if (modified) {\n    writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n  }\n\n  return modified;\n}\n\nfunction syncRootCatalogWithParent(\n  projectDir: string,\n  parentCatalog: Record<string, string>,\n): boolean {\n  const pkgPath = join(projectDir, \"package.json\");\n  const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n  let modified = syncPackageObjectCatalogRefs(pkg, Object.keys(parentCatalog));\n\n  if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n    pkg.workspaces = { packages: [], catalog: {} };\n    modified = true;\n  }\n\n  const workspaces = pkg.workspaces as { packages?: string[]; catalog?: Record<string, string> };\n  if (!workspaces.catalog || typeof workspaces.catalog !== \"object\") {\n    workspaces.catalog = {};\n    modified = true;\n  }\n\n  for (const [packageName, version] of Object.entries(parentCatalog)) {\n    if (workspaces.catalog[packageName] !== version) {\n      workspaces.catalog[packageName] = version;\n      modified = true;\n    }\n  }\n\n  if (modified) {\n    writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n  }\n\n  return modified;\n}\n\nasync function readExtendedRootSource(projectDir: string): Promise<ExtendedRootSource> {\n  const configPath = join(projectDir, \"bos.config.json\");\n  if (!existsSync(configPath)) {\n    return { catalog: {}, extendsChain: [] };\n  }\n\n  const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n  let extendsRef = getExtendsRef(localConfig);\n  if (!extendsRef?.startsWith(\"bos://\")) {\n    return {\n      catalog: {},\n      repository: typeof localConfig.repository === \"string\" ? localConfig.repository : undefined,\n      extendsChain: [],\n    };\n  }\n\n  const extendsChain: string[] = [];\n  const visited = new Set<string>();\n  let repository = typeof localConfig.repository === \"string\" ? localConfig.repository : undefined;\n  let rootRef = extendsRef;\n\n  while (extendsRef?.startsWith(\"bos://\")) {\n    if (visited.has(extendsRef)) {\n      throw new Error(`Circular extends detected while resolving upgrade source: ${extendsRef}`);\n    }\n    visited.add(extendsRef);\n    extendsChain.push(extendsRef);\n\n    const parsed = parseBosRef(extendsRef);\n    if (!parsed) {\n      break;\n    }\n\n    rootRef = extendsRef;\n\n    let parentConfig: Record<string, unknown>;\n    try {\n      parentConfig = (await fetchParentConfig(parsed.account, parsed.gateway)) as Record<\n        string,\n        unknown\n      >;\n    } catch {\n      break;\n    }\n\n    if (typeof parentConfig.repository === \"string\") {\n      repository = parentConfig.repository;\n    }\n\n    const nextExtendsRef = getExtendsRef(parentConfig);\n    if (!nextExtendsRef?.startsWith(\"bos://\")) {\n      break;\n    }\n\n    extendsRef = nextExtendsRef;\n  }\n\n  const parsed = parseBosRef(rootRef);\n  if (!parsed) {\n    return { catalog: {}, repository, extendsChain };\n  }\n\n  const source = await resolveCatalogChainSource({\n    extendsAccount: parsed.account,\n    extendsGateway: parsed.gateway,\n  });\n\n  return {\n    catalog: source.catalog,\n    repository: source.repository ?? repository,\n    extendsChain: source.extendsChain.length > 0 ? source.extendsChain : extendsChain,\n  };\n}\n\nfunction getExtendsRef(config: Record<string, unknown>): string | undefined {\n  if (typeof config.extends === \"string\") {\n    return config.extends;\n  }\n\n  if (config.extends && typeof config.extends === \"object\") {\n    return resolveExtendsRef(config.extends as Record<string, string>, \"production\");\n  }\n\n  return undefined;\n}\n\nfunction parseBosRef(ref: string): { account: string; gateway: string } | null {\n  const match = ref.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n  if (!match?.[1] || !match[2]) return null;\n  return { account: match[1], gateway: match[2] };\n}\n\nfunction parseTargetedRef(ref: string): { configRef: string; targetPath?: string } {\n  const hashIndex = ref.indexOf(\"#\");\n  if (hashIndex === -1) {\n    return { configRef: ref };\n  }\n  return {\n    configRef: ref.slice(0, hashIndex),\n    targetPath: ref.slice(hashIndex + 1) || undefined,\n  };\n}\n\nfunction ensureTargetedRef(ref: string, targetPath: string): string {\n  const parsed = parseTargetedRef(ref);\n  if (parsed.targetPath) return ref;\n  return `${parsed.configRef}#${targetPath}`;\n}\n\nfunction rewriteExtendsTarget(\n  entry: Record<string, unknown> | undefined,\n  targetPath: string,\n): boolean {\n  if (!entry?.extends) return false;\n\n  if (typeof entry.extends === \"string\") {\n    const next = ensureTargetedRef(entry.extends, targetPath);\n    if (next === entry.extends) return false;\n    entry.extends = next;\n    return true;\n  }\n\n  if (typeof entry.extends === \"object\") {\n    let changed = false;\n    for (const [key, value] of Object.entries(entry.extends as Record<string, unknown>)) {\n      if (typeof value !== \"string\") continue;\n      const next = ensureTargetedRef(value, targetPath);\n      if (next !== value) {\n        (entry.extends as Record<string, unknown>)[key] = next;\n        changed = true;\n      }\n    }\n    return changed;\n  }\n\n  return false;\n}\n\nfunction migrateRootConfigTargets(config: Record<string, unknown>): boolean {\n  let changed = false;\n  const app =\n    config.app && typeof config.app === \"object\"\n      ? (config.app as Record<string, unknown>)\n      : undefined;\n\n  if (app?.api && typeof app.api === \"object\") {\n    changed = rewriteExtendsTarget(app.api as Record<string, unknown>, \"app.api\") || changed;\n  }\n  if (app?.auth && typeof app.auth === \"object\") {\n    changed = rewriteExtendsTarget(app.auth as Record<string, unknown>, \"app.auth\") || changed;\n  }\n\n  if (config.plugins && typeof config.plugins === \"object\") {\n    for (const [pluginKey, pluginValue] of Object.entries(\n      config.plugins as Record<string, unknown>,\n    )) {\n      if (typeof pluginValue === \"string\") {\n        const next = ensureTargetedRef(pluginValue, `plugins.${pluginKey}`);\n        if (next !== pluginValue) {\n          (config.plugins as Record<string, unknown>)[pluginKey] = next;\n          changed = true;\n        }\n        continue;\n      }\n      if (!pluginValue || typeof pluginValue !== \"object\") continue;\n      changed =\n        rewriteExtendsTarget(pluginValue as Record<string, unknown>, `plugins.${pluginKey}`) ||\n        changed;\n    }\n  }\n\n  return changed;\n}\n\nfunction migratePluginProviderConfig(config: Record<string, unknown>, pluginKey: string): boolean {\n  let changed = false;\n  if (!config.plugins || typeof config.plugins !== \"object\") {\n    return false;\n  }\n\n  const plugins = config.plugins as Record<string, unknown>;\n  const entry = plugins[pluginKey];\n  if (!entry || typeof entry !== \"object\") return false;\n\n  const pluginEntry = entry as Record<string, unknown>;\n\n  if (\"name\" in pluginEntry) {\n    delete pluginEntry.name;\n    changed = true;\n  }\n\n  if (typeof pluginEntry.development === \"string\" && pluginEntry.development.startsWith(\"local:\")) {\n    if (\"extends\" in pluginEntry) {\n      delete pluginEntry.extends;\n      changed = true;\n    }\n  }\n\n  changed = rewriteExtendsTarget(pluginEntry, `plugins.${pluginKey}`) || changed;\n\n  return changed;\n}\n\nfunction mergePluginConfigIntoRoot(\n  rootConfig: Record<string, unknown>,\n  pluginKey: string,\n  pluginConfig: Record<string, unknown>,\n): boolean {\n  let changed = false;\n\n  if (!rootConfig.plugins || typeof rootConfig.plugins !== \"object\") {\n    rootConfig.plugins = {};\n    changed = true;\n  }\n  const plugins = rootConfig.plugins as Record<string, unknown>;\n  if (!plugins[pluginKey] || typeof plugins[pluginKey] !== \"object\") {\n    plugins[pluginKey] = {};\n    changed = true;\n  }\n\n  const entry = plugins[pluginKey] as Record<string, unknown>;\n\n  const pluginData = extractPluginEntry(pluginConfig, pluginKey);\n\n  const apiData = getApiEntry(pluginConfig);\n\n  if (pluginData) {\n    for (const key of [\n      \"secrets\",\n      \"variables\",\n      \"routes\",\n      \"production\",\n      \"integrity\",\n      \"proxy\",\n    ] as const) {\n      if (pluginData[key] !== undefined && entry[key] === undefined) {\n        entry[key] = pluginData[key];\n        changed = true;\n      }\n    }\n\n    if (typeof pluginData.development === \"string\" && pluginData.development.startsWith(\"local:\")) {\n      pluginData.development = `local:plugins/${pluginKey}`;\n    }\n    if (entry.development === undefined && pluginData.development !== undefined) {\n      entry.development = pluginData.development;\n      changed = true;\n    }\n  }\n\n  if (apiData) {\n    for (const key of [\n      \"production\",\n      \"integrity\",\n      \"proxy\",\n      \"variables\",\n      \"secrets\",\n      \"routes\",\n    ] as const) {\n      if (apiData[key] !== undefined && entry[key] === undefined) {\n        entry[key] = apiData[key];\n        changed = true;\n      }\n    }\n  }\n\n  if (\"extends\" in entry) {\n    const extendsStr = typeof entry.extends === \"string\" ? entry.extends : undefined;\n    if (!extendsStr || extendsStr.includes(`#plugins.${pluginKey}`)) {\n      delete entry.extends;\n      changed = true;\n    }\n  }\n\n  if (\"name\" in entry) {\n    delete entry.name;\n    changed = true;\n  }\n\n  if (configHasTopLevelFields(pluginConfig, pluginKey)) {\n    if (entry.routes === undefined && Array.isArray(pluginConfig.routes)) {\n      entry.routes = pluginConfig.routes;\n      changed = true;\n    }\n    const api = getApiEntry(pluginConfig);\n    if (api) {\n      if (entry.routes === undefined && Array.isArray(api.routes)) {\n        entry.routes = api.routes;\n        changed = true;\n      }\n    }\n  }\n\n  return changed;\n}\n\nfunction extractPluginEntry(\n  pluginConfig: Record<string, unknown>,\n  pluginKey: string,\n): Record<string, unknown> | null {\n  if (\n    pluginConfig.plugins &&\n    typeof pluginConfig.plugins === \"object\" &&\n    (pluginConfig.plugins as Record<string, unknown>)[pluginKey] &&\n    typeof (pluginConfig.plugins as Record<string, unknown>)[pluginKey] === \"object\"\n  ) {\n    return (pluginConfig.plugins as Record<string, unknown>)[pluginKey] as Record<string, unknown>;\n  }\n\n  if (pluginConfig.routes !== undefined) {\n    return { routes: pluginConfig.routes };\n  }\n\n  return null;\n}\n\nfunction configHasTopLevelFields(\n  pluginConfig: Record<string, unknown>,\n  _pluginKey: string,\n): boolean {\n  return (\n    (pluginConfig.routes !== undefined && Array.isArray(pluginConfig.routes)) ||\n    getApiEntry(pluginConfig) !== null\n  );\n}\n\nfunction getApiEntry(pluginConfig: Record<string, unknown>): Record<string, unknown> | null {\n  if (!pluginConfig.app || typeof pluginConfig.app !== \"object\") return null;\n  const app = pluginConfig.app as Record<string, unknown>;\n  if (!app.api || typeof app.api !== \"object\") return null;\n  return app.api as Record<string, unknown>;\n}\n\nexport async function migrateBosConfigFiles(projectDir: string): Promise<string[]> {\n  const migrated: string[] = [];\n  const rootConfigPath = join(projectDir, \"bos.config.json\");\n\n  if (existsSync(rootConfigPath)) {\n    const rootConfig = JSON.parse(readFileSync(rootConfigPath, \"utf-8\")) as Record<string, unknown>;\n    let rootChanged = migrateRootConfigTargets(rootConfig);\n\n    const pluginConfigPaths = await glob(\"plugins/*/bos.config.json\", {\n      cwd: projectDir,\n      nodir: true,\n      dot: false,\n      absolute: false,\n    });\n\n    for (const relativePath of pluginConfigPaths) {\n      const match = relativePath.match(/^plugins\\/([^/]+)\\/bos\\.config\\.json$/);\n      const pluginKey = match?.[1];\n      if (!pluginKey) continue;\n\n      const filePath = join(projectDir, relativePath);\n      try {\n        const pluginConfig = JSON.parse(readFileSync(filePath, \"utf-8\")) as Record<string, unknown>;\n        rootChanged = mergePluginConfigIntoRoot(rootConfig, pluginKey, pluginConfig) || rootChanged;\n      } catch (e) {\n        console.warn(`[Upgrade] Failed to parse plugin config at ${filePath}: ${e}`);\n      }\n\n      try {\n        rmSync(filePath);\n        migrated.push(relativePath);\n      } catch (e) {\n        console.warn(`[Upgrade] Failed to remove migrated plugin config at ${filePath}: ${e}`);\n      }\n    }\n\n    if (rootConfig.plugins && typeof rootConfig.plugins === \"object\") {\n      for (const pluginKey of Object.keys(rootConfig.plugins as Record<string, unknown>)) {\n        rootChanged = migratePluginProviderConfig(rootConfig, pluginKey) || rootChanged;\n      }\n    }\n\n    if (rootChanged || migrated.length > 0) {\n      await saveBosConfig(projectDir, rootConfig);\n      if (!migrated.includes(\"bos.config.json\")) {\n        migrated.push(\"bos.config.json\");\n      }\n    }\n  }\n\n  return migrated;\n}\n\nasync function loadParentPluginOptions(projectDir: string): Promise<{\n  localConfig: Record<string, unknown>;\n  parentPlugins: Record<string, unknown>;\n  newPluginKeys: string[];\n} | null> {\n  const configPath = join(projectDir, \"bos.config.json\");\n  if (!existsSync(configPath)) {\n    return null;\n  }\n\n  const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n  const extendsRef = getExtendsRef(localConfig);\n  if (!extendsRef?.startsWith(\"bos://\")) {\n    return null;\n  }\n\n  const parsed = parseBosRef(extendsRef);\n  if (!parsed) {\n    return null;\n  }\n\n  let parentConfig: Record<string, unknown>;\n  try {\n    parentConfig = await fetchParentConfig(parsed.account, parsed.gateway);\n  } catch {\n    return null;\n  }\n\n  const parentPlugins =\n    parentConfig.plugins && typeof parentConfig.plugins === \"object\"\n      ? (parentConfig.plugins as Record<string, unknown>)\n      : {};\n  const localPlugins =\n    localConfig.plugins && typeof localConfig.plugins === \"object\"\n      ? (localConfig.plugins as Record<string, unknown>)\n      : {};\n\n  const newPluginKeys = Object.keys(parentPlugins).filter((key) => !(key in localPlugins));\n  return { localConfig, parentPlugins, newPluginKeys };\n}\n\nasync function addSelectedParentPlugins(projectDir: string): Promise<string[]> {\n  if (!process.stdin.isTTY || !process.stdout.isTTY) {\n    return [];\n  }\n\n  const pluginOptions = await loadParentPluginOptions(projectDir);\n  if (!pluginOptions || pluginOptions.newPluginKeys.length === 0) {\n    return [];\n  }\n\n  const selectedValue = await p.multiselect({\n    message: \"Select new plugins from parent:\",\n    options: pluginOptions.newPluginKeys.map((key) => ({ value: key, label: key })),\n    required: false,\n  });\n\n  if (p.isCancel(selectedValue)) {\n    process.exit(0);\n  }\n\n  const selected = selectedValue as string[];\n  if (selected.length === 0) {\n    return [];\n  }\n\n  const localPlugins =\n    pluginOptions.localConfig.plugins && typeof pluginOptions.localConfig.plugins === \"object\"\n      ? (pluginOptions.localConfig.plugins as Record<string, unknown>)\n      : {};\n  const nextPlugins = { ...localPlugins };\n  for (const key of selected) {\n    const parentPlugin = pluginOptions.parentPlugins[key];\n    if (parentPlugin && typeof parentPlugin === \"object\") {\n      const nextPlugin = structuredClone(parentPlugin as Record<string, unknown>);\n      rewriteExtendsTarget(nextPlugin, `plugins.${key}`);\n      nextPlugins[key] = nextPlugin;\n    } else if (typeof parentPlugin === \"string\") {\n      nextPlugins[key] = ensureTargetedRef(parentPlugin, `plugins.${key}`);\n    } else {\n      nextPlugins[key] = parentPlugin;\n    }\n  }\n\n  pluginOptions.localConfig.plugins = nextPlugins;\n  await saveBosConfig(projectDir, pluginOptions.localConfig);\n\n  return selected;\n}\n\nfunction readInstalledVersion(projectDir: string, packageName: string): string | undefined {\n  return readInstalledFrameworkVersion(projectDir, packageName);\n}\n\nfunction setCatalogRef(field: Record<string, string> | undefined, packageName: string): boolean {\n  if (!field || !(packageName in field)) return false;\n  if (field[packageName] === \"catalog:\" || field[packageName].startsWith(\"file:\")) return false;\n  field[packageName] = \"catalog:\";\n  return true;\n}\n\nasync function findWorkspacePackageJsons(projectDir: string): Promise<string[]> {\n  const rootPkgPath = join(projectDir, \"package.json\");\n  if (!existsSync(rootPkgPath)) return [];\n\n  const rootPkg = JSON.parse(readFileSync(rootPkgPath, \"utf-8\")) as Record<string, unknown>;\n  const workspaceConfig = rootPkg.workspaces as { packages?: string[] } | string[] | undefined;\n\n  const patterns: string[] = [];\n  if (Array.isArray(workspaceConfig)) {\n    patterns.push(...workspaceConfig);\n  } else if (workspaceConfig?.packages && Array.isArray(workspaceConfig.packages)) {\n    patterns.push(...workspaceConfig.packages);\n  }\n\n  if (patterns.length === 0) return [];\n\n  const pkgPaths: string[] = [];\n  for (const pattern of patterns) {\n    const matches = await glob(pattern, { cwd: projectDir, dot: false, absolute: false });\n    for (const match of matches) {\n      const pkgPath = join(projectDir, match, \"package.json\");\n      if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {\n        pkgPaths.push(pkgPath);\n      }\n    }\n  }\n\n  return [...new Set(pkgPaths)];\n}\n\nexport async function migrateChildRootPackageJson(projectDir: string): Promise<boolean> {\n  const configPath = join(projectDir, \"bos.config.json\");\n  const pkgPath = join(projectDir, \"package.json\");\n  if (!existsSync(configPath) || !existsSync(pkgPath)) {\n    return false;\n  }\n\n  const config = readJsonFile<Record<string, unknown>>(configPath);\n  const extendsRef = getExtendsRef(config);\n  if (!extendsRef?.startsWith(\"bos://\")) {\n    return false;\n  }\n\n  const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n  let changed = false;\n\n  if (pkg.private !== true) {\n    pkg.private = true;\n    changed = true;\n  }\n  if (pkg.type !== \"module\") {\n    pkg.type = \"module\";\n    changed = true;\n  }\n  if (\"module\" in pkg) {\n    delete pkg.module;\n    changed = true;\n  }\n\n  const pluginPackageJsons = await glob(\"plugins/*/package.json\", {\n    cwd: projectDir,\n    nodir: true,\n    dot: false,\n    absolute: false,\n  });\n  const childScripts = buildChildRootScripts({\n    ui: existsSync(join(projectDir, \"ui\", \"package.json\")),\n    api: existsSync(join(projectDir, \"api\", \"package.json\")),\n    host: existsSync(join(projectDir, \"host\", \"package.json\")),\n    plugins: pluginPackageJsons.length > 0,\n  });\n\n  if (!pkg.scripts || typeof pkg.scripts !== \"object\") {\n    pkg.scripts = {};\n    changed = true;\n  }\n  const scripts = pkg.scripts as Record<string, string>;\n  for (const [key, value] of Object.entries(childScripts)) {\n    if (scripts[key] !== value) {\n      scripts[key] = value;\n      changed = true;\n    }\n  }\n  for (const obsoleteScript of [\"sync-catalog\", \"init\"]) {\n    if (obsoleteScript in scripts) {\n      delete scripts[obsoleteScript];\n      changed = true;\n    }\n  }\n\n  const workspaces = pkg.workspaces;\n  if (workspaces && typeof workspaces === \"object\") {\n    const workspaceConfig = workspaces as { packages?: string[] };\n    if (Array.isArray(workspaceConfig.packages)) {\n      const nextPackages = workspaceConfig.packages.filter(\n        (entry) => entry !== \"packages/everything-dev\" && entry !== \"packages/every-plugin\",\n      );\n      if (nextPackages.length !== workspaceConfig.packages.length) {\n        workspaceConfig.packages = nextPackages;\n        changed = true;\n      }\n    }\n  }\n\n  if (pkg.overrides && typeof pkg.overrides === \"object\") {\n    const overrides = pkg.overrides as Record<string, string>;\n    for (const packageName of FRAMEWORK_PACKAGES) {\n      const value = overrides[packageName];\n      if (typeof value === \"string\" && value.startsWith(\"file:packages/\")) {\n        delete overrides[packageName];\n        changed = true;\n      }\n    }\n    if (Object.keys(overrides).length === 0) {\n      delete pkg.overrides;\n      changed = true;\n    }\n  }\n\n  if (ensureAuthCoreCatalogRef(pkg)) {\n    changed = true;\n  }\n\n  const workspacePackageJsons = await findWorkspacePackageJsons(projectDir);\n  for (const workspacePkgPath of workspacePackageJsons) {\n    if (updatePackageFileAuthCoreRef(workspacePkgPath)) {\n      changed = true;\n    }\n  }\n\n  if (changed) {\n    writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n  }\n\n  return changed;\n}\n\nfunction buildChangelogUrl(\n  oldVersion: string | undefined,\n  newVersion: string,\n  repository: string | undefined,\n): string | undefined {\n  const fromVersion = extractSemver(oldVersion);\n  const toVersion = extractSemver(newVersion);\n  if (!fromVersion || !toVersion || fromVersion === toVersion) return undefined;\n\n  const repoUrl = repository;\n  if (!repoUrl) return undefined;\n\n  const githubMatch = repoUrl.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n  if (!githubMatch) return undefined;\n\n  const [, owner, repo] = githubMatch;\n  return `https://github.com/${owner}/${repo}/compare/v${fromVersion}...v${toVersion}`;\n}\n\nasync function rewriteLegacyUiImports(projectDir: string): Promise<string[]> {\n  const files = await glob(\"ui/src/**/*.{ts,tsx}\", {\n    cwd: projectDir,\n    nodir: true,\n    dot: false,\n    absolute: false,\n  });\n  const migrated: string[] = [];\n\n  for (const file of files) {\n    const filePath = join(projectDir, file);\n    const original = readFileSync(filePath, \"utf-8\");\n    let next = original;\n\n    for (const [from, to] of LEGACY_UI_IMPORT_REWRITES) {\n      next = next.replaceAll(from, to);\n    }\n\n    if (next !== original) {\n      writeFileSync(filePath, next);\n      migrated.push(file);\n    }\n  }\n\n  return migrated;\n}\n\nconst LEGACY_DIST_IMPORT_REWRITES = [\n  ['from \"everything-dev/dist/', 'from \"everything-dev/'],\n  [\"from 'everything-dev/dist/\", \"from 'everything-dev/\"],\n] as const;\n\nfunction escapeRegex(s: string): string {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction balancedParenEnd(source: string, openIdx: number): number {\n  let depth = 1;\n  let i = openIdx;\n  while (i < source.length) {\n    const ch = source[i];\n    if (ch === \"(\") depth++;\n    else if (ch === \")\") {\n      depth--;\n      if (depth === 0) return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\nfunction deriveTagFromLayerExpr(layerExpr: string): string | null {\n  const m = layerExpr.match(/^\\s*([A-Z]\\w*)/);\n  if (!m) return null;\n  const name = m[1];\n  if (name.endsWith(\"Live\")) return `${name.slice(0, -4)}Tag`;\n  if (name.endsWith(\"Layer\")) return `${name.slice(0, -5)}Tag`;\n  return null;\n}\n\ntype PipeProvideCall = {\n  argStart: number;\n  endIdx: number;\n  dotIdx: number;\n  pipeCloseEnd: number;\n};\n\nfunction findAllPipeEffectProvideCalls(source: string): PipeProvideCall[] {\n  const out: PipeProvideCall[] = [];\n  const needle = \"Effect.provide(\";\n  let searchFrom = 0;\n  while (true) {\n    const provideIdx = source.indexOf(needle, searchFrom);\n    if (provideIdx === -1) break;\n    const argStart = provideIdx + needle.length;\n    const endIdx = balancedParenEnd(source, argStart);\n    if (endIdx === -1) {\n      searchFrom = argStart;\n      continue;\n    }\n    let p = provideIdx - 1;\n    while (p >= 0 && /\\s/.test(source[p])) p--;\n    if (p < 0 || source[p] !== \"(\") {\n      searchFrom = endIdx + 1;\n      continue;\n    }\n    p--;\n    const pipeWord = \".pipe\";\n    if (p - pipeWord.length + 1 < 0 || source.slice(p - pipeWord.length + 1, p + 1) !== pipeWord) {\n      searchFrom = endIdx + 1;\n      continue;\n    }\n    const dotIdx = p - pipeWord.length + 1;\n    let q = endIdx + 1;\n    while (q < source.length && /\\s/.test(source[q])) q++;\n    if (q < source.length && source[q] === \",\") q++;\n    while (q < source.length && /\\s/.test(source[q])) q++;\n    if (q >= source.length || source[q] !== \")\") {\n      searchFrom = endIdx + 1;\n      continue;\n    }\n    out.push({ argStart, endIdx, dotIdx, pipeCloseEnd: q + 1 });\n    searchFrom = q + 1;\n  }\n  return out;\n}\n\nfunction rewritePipeEffectProvideForm(source: string, relPath: string): string {\n  const calls = findAllPipeEffectProvideCalls(source);\n  if (calls.length === 0) return source;\n\n  let result = source;\n\n  for (let k = calls.length - 1; k >= 0; k--) {\n    const call = calls[k];\n    const layerExpr = result.slice(call.argStart, call.endIdx).trim();\n    const tagName = deriveTagFromLayerExpr(layerExpr);\n    if (!tagName) {\n      console.warn(\n        `[Upgrade] ${relPath}: found .pipe(Effect.provide(${layerExpr})) but could not derive a tag name — skipping. Migrate manually to tools.buildService(<Tag>, ${layerExpr}).`,\n      );\n      continue;\n    }\n    const tagUseRe = new RegExp(`(yield\\\\*\\\\s+)${escapeRegex(tagName)}(\\\\s*;?)`, \"g\");\n    const tagMatches = [...result.matchAll(tagUseRe)];\n    if (tagMatches.length !== 1) {\n      console.warn(\n        `[Upgrade] ${relPath}: found .pipe(Effect.provide(${layerExpr})) expecting a single \\`yield* ${tagName}\\`, but found ${tagMatches.length} — skipping. Migrate manually.`,\n      );\n      continue;\n    }\n    const tm = tagMatches[0];\n    const tagStart = tm.index ?? -1;\n    if (tagStart < 0) continue;\n    const tagLen = tm[0].length;\n    const replacement = `${tm[1]}tools.buildService(${tagName}, ${layerExpr})${tm[2]}`;\n    if (tagStart < call.dotIdx) {\n      result =\n        result.slice(0, tagStart) +\n        replacement +\n        result.slice(tagStart + tagLen, call.dotIdx) +\n        result.slice(call.pipeCloseEnd);\n    } else {\n      result =\n        result.slice(0, call.dotIdx) +\n        result.slice(call.pipeCloseEnd, tagStart) +\n        replacement +\n        result.slice(tagStart + tagLen);\n    }\n  }\n\n  return result;\n}\n\nexport async function rewriteLegacyPluginScopedLayerPatterns(\n  projectDir: string,\n): Promise<string[]> {\n  const files = await glob([\"plugins/*/src/index.ts\", \"api/src/index.ts\"], {\n    cwd: projectDir,\n    nodir: true,\n    dot: false,\n    absolute: false,\n  });\n\n  if (files.length === 0) return [];\n\n  const migrated: string[] = [];\n  const effectProvidePattern = /\\byield\\*\\s*Effect\\.provide\\(/g;\n\n  for (const file of files) {\n    const filePath = join(projectDir, file);\n    const original = readFileSync(filePath, \"utf-8\");\n    let next = original;\n\n    // Rewrite yield* Effect.provide(Tag, LayerExpr) → yield* tools.buildService(Tag, LayerExpr)\n    next = next.replaceAll(effectProvidePattern, \"yield* tools.buildService(\");\n\n    // Rewrite the .pipe(Effect.provide(<LayerExpr>)) form: move <LayerExpr> into a\n    // tools.buildService(<Tag>, <LayerExpr>) call replacing the bare `yield* <Tag>`\n    // inside the generator, and drop the trailing .pipe(Effect.provide(...)).\n    next = rewritePipeEffectProvideForm(next, file);\n\n    // Add tools as third argument to initialize if it only has (config) or (config, plugins)\n    const hasEffectProvideOrServiceBuild = next.includes(\"tools.buildService(\");\n\n    if (hasEffectProvideOrServiceBuild) {\n      // Rewrite initialize: (config, plugins) => or initialize: (config) =>\n      // to include tools\n      next = next.replace(\n        /(initialize:\\s*)\\((\\w+)(?:,\\s*(\\w+))?\\s*\\)\\s*=>/g,\n        (_match, prefix: string, p1: string, p2: string | undefined) => {\n          if (p2) {\n            return `${prefix}(${p1}, ${p2}, tools) =>`;\n          }\n          return `${prefix}(${p1}, _plugins, tools) =>`;\n        },\n      );\n    }\n\n    if (next !== original) {\n      writeFileSync(filePath, next);\n      migrated.push(file);\n    }\n  }\n\n  return migrated;\n}\n\nasync function rewriteLegacyDistImports(projectDir: string): Promise<string[]> {\n  const files = await glob(\"**/*.{ts,tsx,js,jsx,mjs,cjs}\", {\n    cwd: projectDir,\n    nodir: true,\n    dot: false,\n    absolute: false,\n    ignore: [\"node_modules/**\", \"dist/**\"],\n  });\n\n  const migrated: string[] = [];\n\n  for (const file of files) {\n    const filePath = join(projectDir, file);\n    const original = readFileSync(filePath, \"utf-8\");\n    let next = original;\n\n    for (const [from, to] of LEGACY_DIST_IMPORT_REWRITES) {\n      next = next.replaceAll(from, to);\n    }\n\n    if (next !== original) {\n      writeFileSync(filePath, next);\n      migrated.push(file);\n    }\n  }\n\n  return migrated;\n}\n\nexport async function upgradeTemplate(\n  projectDir: string,\n  options: UpgradeOptions,\n): Promise<UpgradeResult> {\n  const timings: PhaseTiming[] = [];\n  const pkgPath = join(projectDir, \"package.json\");\n  if (!existsSync(pkgPath)) {\n    return {\n      status: \"error\",\n      packages: [],\n      timings,\n      error: \"No package.json found in current directory\",\n    };\n  }\n\n  const parentSource = await readExtendedRootSource(projectDir);\n  const sourceRootCatalog = parentSource.catalog;\n  const inheritedCatalogPackageNames = Object.keys(sourceRootCatalog);\n  const currentRootCatalog = readRootPackageJson(projectDir) as {\n    workspaces?: { catalog?: Record<string, string> };\n  };\n  const currentCatalogEntries = currentRootCatalog.workspaces?.catalog ?? {};\n  const workspacePkgPaths = await findWorkspacePackageJsons(projectDir);\n  const hasCatalogRefRewrites =\n    inheritedCatalogPackageNames.length > 0 &&\n    (packageObjectNeedsCatalogRefs(readRootPackageJson(projectDir), inheritedCatalogPackageNames) ||\n      workspacePkgPaths.some((pkgPath) =>\n        packageFileNeedsCatalogRefs(pkgPath, inheritedCatalogPackageNames),\n      ));\n  const hasAuthCoreRefRewrites =\n    packageObjectNeedsAuthCoreCatalogRef(readRootPackageJson(projectDir)) ||\n    workspacePkgPaths.some((pkgPath) =>\n      packageObjectNeedsAuthCoreCatalogRef(readJsonFile<Record<string, unknown>>(pkgPath)),\n    );\n\n  const { packages, catalogVersionUpdates } = await timePhase(\n    timings,\n    \"check package versions\",\n    async () => {\n      const nextPackages: UpgradeResult[\"packages\"] = [];\n\n      for (const name of FRAMEWORK_PACKAGES) {\n        const current = readCurrentPackageSpecifier(projectDir, name);\n        const target = sourceRootCatalog[name] ?? current ?? \"unknown\";\n\n        nextPackages.push({ name, from: current, to: target });\n      }\n\n      const nextCatalogVersionUpdates: Array<{\n        name: string;\n        from: string | undefined;\n        to: string;\n      }> = [];\n      for (const [name, targetVersion] of Object.entries(sourceRootCatalog)) {\n        if (FRAMEWORK_PACKAGES.includes(name)) continue;\n\n        const currentVersion = currentCatalogEntries[name];\n        if (currentVersion === targetVersion) continue;\n        nextCatalogVersionUpdates.push({ name, from: currentVersion, to: targetVersion });\n      }\n\n      return { packages: nextPackages, catalogVersionUpdates: nextCatalogVersionUpdates };\n    },\n  );\n\n  const hasFrameworkUpdates = packages.some((p) => p.from !== p.to && p.from !== undefined);\n  const hasCatalogUpdates = catalogVersionUpdates.length > 0;\n  const hasUpdates =\n    hasFrameworkUpdates || hasCatalogUpdates || hasCatalogRefRewrites || hasAuthCoreRefRewrites;\n\n  if (options.dryRun) {\n    let changelogUrl: string | undefined;\n    const pluginOptions = options.noSync\n      ? null\n      : await timePhase(timings, \"discover parent plugins\", () =>\n          loadParentPluginOptions(projectDir),\n        );\n    if (hasUpdates) {\n      const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n      if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n        changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n      }\n    }\n\n    return {\n      status: \"dry-run\",\n      packages: [\n        ...packages,\n        ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n      ],\n      availablePlugins: pluginOptions?.newPluginKeys,\n      timings,\n      changelogUrl,\n    };\n  }\n\n  await timePhase(timings, \"apply package updates\", async () => {\n    if (inheritedCatalogPackageNames.length > 0) {\n      syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n    }\n\n    if (inheritedCatalogPackageNames.length > 0) {\n      for (const pkgPath of workspacePkgPaths) {\n        updatePackageFileCatalogRefs(pkgPath, inheritedCatalogPackageNames);\n      }\n    }\n  });\n\n  const migratedBosConfigs = await timePhase(timings, \"migrate bos configs\", () =>\n    migrateBosConfigFiles(projectDir),\n  );\n  const migratedRootPackageJson = await timePhase(timings, \"migrate root package\", () =>\n    migrateChildRootPackageJson(projectDir),\n  );\n\n  let syncResult: UpgradeResult[\"sync\"];\n  let addedPlugins: string[] = [];\n  if (!options.noSync) {\n    addedPlugins = await timePhase(timings, \"discover parent plugins\", async () => {\n      if (options.dryRun) return [];\n      return addSelectedParentPlugins(projectDir);\n    });\n\n    syncResult = await timePhase(timings, \"sync template\", () =>\n      syncTemplate(projectDir, {\n        dryRun: false,\n        noInstall: true,\n      }),\n    );\n\n    if (inheritedCatalogPackageNames.length > 0) {\n      syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n    }\n  }\n\n  const sharedSync = await timePhase(timings, \"sync shared deps\", async () => {\n    const configResult = await loadResolvedConfig({ cwd: projectDir });\n    if (!configResult) {\n      throw new Error(\"No bos.config.json found in current directory\");\n    }\n\n    return syncResolvedSharedDeps({\n      configDir: projectDir,\n      hostMode: \"local\",\n      bosConfig: configResult.config,\n    });\n  });\n\n  if ((hasUpdates || addedPlugins.length > 0 || sharedSync.catalogChanged) && !options.noInstall) {\n    await timePhase(timings, \"install dependencies\", () => runBunInstallForUpgrade(projectDir));\n    await timePhase(timings, \"generate types\", () => runTypesGen(projectDir));\n  }\n\n  const migratedFiles = await timePhase(timings, \"clean obsolete files\", async () => {\n    const nextMigratedFiles = [\n      ...migratedBosConfigs,\n      ...(migratedRootPackageJson ? [\"package.json\"] : []),\n      ...(await rewriteLegacyUiImports(projectDir)),\n      ...(await rewriteLegacyPluginScopedLayerPatterns(projectDir)),\n      ...(await rewriteLegacyDistImports(projectDir)),\n    ];\n    for (const file of OBSOLETE_FILES) {\n      const filePath = join(projectDir, file);\n      if (existsSync(filePath)) {\n        rmSync(filePath);\n        nextMigratedFiles.push(file);\n      }\n    }\n\n    const legacyPluginDbFiles = await glob(\"plugins/*/src/db/{migrator,load-migrations}.ts\", {\n      cwd: projectDir,\n      nodir: true,\n      dot: false,\n      absolute: false,\n    });\n    for (const file of legacyPluginDbFiles) {\n      rmSync(join(projectDir, file));\n      nextMigratedFiles.push(file);\n    }\n\n    return nextMigratedFiles;\n  });\n\n  let changelogUrl: string | undefined;\n  const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n  if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n    changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n  }\n\n  return {\n    status: \"upgraded\",\n    packages: [\n      ...packages,\n      ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n    ],\n    sync: syncResult,\n    migrated: migratedFiles.length > 0 ? migratedFiles : undefined,\n    selectedPlugins: addedPlugins.length > 0 ? addedPlugins : undefined,\n    timings,\n    changelogUrl,\n  };\n}\n"],"mappings":"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"}