{"version":3,"file":"init.cjs","names":["require","fetchBosConfigFromFastKv","saveBosConfig","loadManifestNormalizationSpec","normalizePackageManifestsInTree","writeSnapshot"],"sources":["../../src/cli/init.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n  createWriteStream,\n  existsSync,\n  lstatSync,\n  mkdirSync,\n  mkdtempSync,\n  readFileSync,\n  rmSync,\n  writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { execa } from \"execa\";\nimport { glob } from \"glob\";\nimport type { OverrideSection } from \"../contract\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport {\n  loadManifestNormalizationSpec,\n  normalizePackageManifestsInTree,\n} from \"../internal/manifest-normalizer\";\nimport type { BosConfig, BosConfigInput } from \"../types\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst require = createRequire(import.meta.url);\n\nexport const INIT_ROOT_PATTERNS = [\n  \"bos.config.json\",\n  \"package.json\",\n  \".env.example\",\n  \".gitignore\",\n  \"biome.json\",\n  \"bunfig.toml\",\n  \"Dockerfile\",\n  \"railway.json\",\n  \".agent/**\",\n  \"AGENTS.md\",\n  \".opencode/skills/everything-dev/**\",\n  \".changeset/config.json\",\n  \".changeset/README.md\",\n  \"README.md\",\n  \"CONTRIBUTING.md\",\n  \".github/templates/**\",\n] as const;\n\nconst FRAMEWORK_PACKAGES = [\"every-plugin\", \"everything-dev\"] as const;\n\nconst OVERRIDE_WORKSPACE_MAP: Record<OverrideSection, string[]> = {\n  ui: [\"ui\"],\n  api: [\"api\"],\n  host: [\"host\"],\n  plugins: [],\n};\n\ninterface SourceResult {\n  sourceDir: string;\n  parentConfig: BosConfig;\n  cleanup: () => Promise<void>;\n}\n\nexport async function resolveSourceDir(opts: {\n  extendsAccount: string;\n  extendsGateway: string;\n  source?: string;\n}): Promise<SourceResult> {\n  if (opts.source) {\n    const sourceDir = resolve(opts.source);\n    if (!existsSync(join(sourceDir, \"bos.config.json\"))) {\n      throw new Error(`No bos.config.json found in source directory: ${sourceDir}`);\n    }\n    const parentConfig = JSON.parse(\n      readFileSync(join(sourceDir, \"bos.config.json\"), \"utf-8\"),\n    ) as BosConfig;\n    return { sourceDir, parentConfig, cleanup: async () => {} };\n  }\n\n  const parentConfig = await fetchParentConfig(opts.extendsAccount, opts.extendsGateway);\n\n  if (parentConfig.repository) {\n    const { dir: sourceDir, cleanup } = await downloadTarball(parentConfig.repository);\n    return { sourceDir, parentConfig, cleanup };\n  }\n\n  const chainResult = await resolveRepositoryViaExtendsChain(\n    opts.extendsAccount,\n    opts.extendsGateway,\n  );\n  if (chainResult?.repository) {\n    const { dir: sourceDir, cleanup } = await downloadTarball(chainResult.repository);\n    return { sourceDir, parentConfig: chainResult.config, cleanup };\n  }\n\n  return {\n    sourceDir: \"\",\n    parentConfig,\n    cleanup: async () => {},\n  };\n}\n\nexport function buildInitPatterns(overrides: OverrideSection[], plugins?: string[]): string[] {\n  const has = (section: OverrideSection) => overrides.includes(section);\n  const patterns: string[] = [...INIT_ROOT_PATTERNS];\n\n  if (has(\"ui\")) patterns.push(\"ui/**\");\n  if (has(\"api\")) patterns.push(\"api/**\");\n  if (has(\"host\")) patterns.push(\"host/**\");\n  if (has(\"plugins\")) {\n    for (const plugin of plugins ?? []) {\n      patterns.push(`plugins/${plugin}/**`);\n    }\n  }\n\n  return patterns;\n}\n\nexport function sourcePathToDestinationPath(filePath: string): string {\n  return filePath.startsWith(\".github/templates/\")\n    ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n    : filePath;\n}\n\nexport async function fetchParentConfig(\n  extendsAccount: string,\n  extendsGateway: string,\n): Promise<BosConfig> {\n  const bosUrl = `bos://${extendsAccount}/${extendsGateway}`;\n  return fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n}\n\nexport async function resolveRepositoryViaExtendsChain(\n  extendsAccount: string,\n  extendsGateway: string,\n  visited = new Set<string>(),\n): Promise<{ repository: string; config: BosConfig } | null> {\n  const key = `bos://${extendsAccount}/${extendsGateway}`;\n  if (visited.has(key)) return null;\n  visited.add(key);\n\n  try {\n    const config = await fetchParentConfig(extendsAccount, extendsGateway);\n    if (config.repository) {\n      return { repository: config.repository, config };\n    }\n\n    const extendsRef = config.extends;\n    if (extendsRef && typeof extendsRef === \"string\") {\n      const normalized = extendsRef.startsWith(\"bos://\") ? extendsRef : `bos://${extendsRef}`;\n      const match = normalized.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n      if (match) {\n        const result = await resolveRepositoryViaExtendsChain(match[1], match[2], visited);\n        if (result) return result;\n      }\n    }\n\n    return null;\n  } catch {\n    return null;\n  }\n}\n\nexport async function detectGitRemoteUrl(directory: string): Promise<string | undefined> {\n  try {\n    const { stdout } = await execa(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n      cwd: directory,\n      stdio: \"pipe\",\n    });\n    const url = stdout.trim();\n    if (!url) return undefined;\n    return normalizeGitUrl(url);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction normalizeGitUrl(url: string): string | undefined {\n  const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n  if (sshMatch) {\n    return `https://github.com/${sshMatch[1]}/${sshMatch[2]}`;\n  }\n  const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n  if (httpsMatch) {\n    return `https://github.com/${httpsMatch[1]}/${httpsMatch[2]}`;\n  }\n  return url.endsWith(\".git\") ? url.slice(0, -4) : url;\n}\n\nexport async function downloadTarball(\n  repoUrl: string,\n): Promise<{ dir: string; cleanup: () => Promise<void> }> {\n  const parsed = parseGitHubUrl(repoUrl);\n  if (!parsed) {\n    throw new Error(`Cannot parse repository URL: ${repoUrl}`);\n  }\n\n  const { owner, repo, branch } = parsed;\n  const tarballUrl = `https://api.github.com/repos/${owner}/${repo}/tarball/${branch}`;\n\n  const tmpDir = mkTmpDir(\"bos-init-tarball-\");\n  const tarballPath = join(tmpDir, \"source.tar.gz\");\n\n  const response = await fetch(tarballUrl, {\n    headers: { \"User-Agent\": \"everything-dev\" },\n    redirect: \"follow\",\n  });\n\n  if (!response.ok) {\n    rmSync(tmpDir, { recursive: true, force: true });\n    throw new Error(`GitHub tarball download failed: ${response.status} ${response.statusText}`);\n  }\n\n  if (!response.body) {\n    rmSync(tmpDir, { recursive: true, force: true });\n    throw new Error(\"GitHub tarball download returned empty body\");\n  }\n\n  const fileStream = createWriteStream(tarballPath);\n  const reader = response.body as unknown as NodeJS.ReadableStream;\n  await pipeline(reader, fileStream);\n\n  const extractDir = mkTmpDir(\"bos-init-extract-\");\n  try {\n    const tar = require(\"tar\") as {\n      extract: (opts: { cwd: string; file: string; strip: number }) => Promise<void>;\n    };\n    await tar.extract({ cwd: extractDir, file: tarballPath, strip: 1 });\n  } catch {\n    await execCommand(\"tar\", [\"-xzf\", tarballPath, \"--strip-components=1\", \"-C\", extractDir]);\n  }\n\n  rmSync(tmpDir, { recursive: true, force: true });\n\n  return {\n    dir: extractDir,\n    cleanup: async () => {\n      rmSync(extractDir, { recursive: true, force: true });\n    },\n  };\n}\n\nfunction parseGitHubUrl(url: string): { owner: string; repo: string; branch: string } | null {\n  const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n  if (httpsMatch) {\n    return { owner: httpsMatch[1], repo: httpsMatch[2], branch: \"main\" };\n  }\n\n  const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n  if (sshMatch) {\n    return { owner: sshMatch[1], repo: sshMatch[2], branch: \"main\" };\n  }\n\n  return null;\n}\n\nexport async function copyFilteredFiles(\n  sourceDir: string,\n  destination: string,\n  patterns: string[],\n  _options: {\n    overrides: OverrideSection[];\n    plugins?: string[];\n  },\n): Promise<number> {\n  if (patterns.length === 0) {\n    return 0;\n  }\n\n  const allFiles = new Set<string>();\n  for (const pattern of patterns) {\n    const matches = await glob(pattern, {\n      cwd: sourceDir,\n      nodir: true,\n      dot: true,\n      absolute: false,\n      ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n    });\n    for (const match of matches) {\n      allFiles.add(match);\n    }\n  }\n\n  mkdirSync(destination, { recursive: true });\n\n  let count = 0;\n  for (const filePath of allFiles) {\n    const src = join(sourceDir, filePath);\n    const stat = lstatSync(src);\n    if (!stat.isFile()) continue;\n\n    const destPath = sourcePathToDestinationPath(filePath);\n    const dest = join(destination, destPath);\n    mkdirSync(dirname(dest), { recursive: true });\n    const content = readFileSync(src);\n    writeFileSync(dest, content);\n    count++;\n  }\n\n  return count;\n}\n\nfunction stripProductionFields(entry: Record<string, unknown>): void {\n  delete entry.production;\n  delete entry.integrity;\n  delete entry.ssr;\n  delete entry.ssrIntegrity;\n}\n\nexport async function personalizeConfig(\n  destination: string,\n  opts: {\n    extendsAccount: string;\n    extendsGateway: string;\n    account?: string;\n    domain?: string;\n    plugins?: string[];\n    overrides: OverrideSection[];\n    pluginRoutes?: Record<string, string[]>;\n    workspaceOpts?: { localOverrides?: boolean; sourceDir?: string };\n    mode?: \"init\" | \"sync\";\n    existingConfig?: Record<string, unknown>;\n    repository?: string;\n    title?: string;\n    description?: string;\n    testnet?: string;\n    staging?: unknown;\n  },\n): Promise<void> {\n  const has = (section: OverrideSection) => opts.overrides.includes(section);\n\n  const explicitRootKeys = new Set(\n    Object.entries(opts)\n      .filter(\n        ([key, value]) =>\n          value !== undefined &&\n          ![\n            \"extendsAccount\",\n            \"extendsGateway\",\n            \"plugins\",\n            \"overrides\",\n            \"pluginRoutes\",\n            \"workspaceOpts\",\n            \"mode\",\n            \"existingConfig\",\n          ].includes(key),\n      )\n      .map(([key]) => key),\n  );\n\n  const configPath = join(destination, \"bos.config.json\");\n  if (existsSync(configPath)) {\n    const config = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\n    config.extends = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n\n    if (opts.account) {\n      config.account = opts.account;\n    }\n    if (opts.domain) {\n      config.domain = opts.domain;\n    }\n    if (opts.repository) {\n      config.repository = opts.repository;\n    } else {\n      delete config.repository;\n    }\n\n    const inheritableFields = [\"title\", \"description\", \"testnet\", \"staging\"] as const;\n    for (const field of inheritableFields) {\n      if (!(field in opts)) {\n        delete config[field];\n      }\n    }\n\n    if (config.app && typeof config.app === \"object\") {\n      const app = config.app as Record<string, unknown>;\n\n      for (const entryKey of Object.keys(app)) {\n        if (\n          !has(entryKey as OverrideSection) &&\n          (entryKey === \"host\" || entryKey === \"ui\" || entryKey === \"api\" || entryKey === \"auth\")\n        ) {\n          delete app[entryKey];\n          continue;\n        }\n        const entry = app[entryKey];\n        if (entry && typeof entry === \"object\") {\n          stripProductionFields(entry as Record<string, unknown>);\n        }\n      }\n    }\n\n    if (has(\"plugins\")) {\n      if (config.plugins && typeof config.plugins === \"object\") {\n        const plugins = config.plugins as Record<string, unknown>;\n\n        if (opts.plugins !== undefined) {\n          for (const pluginKey of Object.keys(plugins)) {\n            if (!opts.plugins.includes(pluginKey)) {\n              delete plugins[pluginKey];\n            }\n          }\n        }\n\n        for (const pluginKey of Object.keys(plugins)) {\n          const plugin = plugins[pluginKey];\n          let pluginObj: Record<string, unknown>;\n\n          if (typeof plugin === \"string\") {\n            pluginObj = { extends: plugin };\n            plugins[pluginKey] = pluginObj;\n          } else if (plugin && typeof plugin === \"object\") {\n            pluginObj = { ...(plugin as Record<string, unknown>) };\n            plugins[pluginKey] = pluginObj;\n          } else {\n            continue;\n          }\n\n          stripProductionFields(pluginObj);\n        }\n\n        if (Object.keys(plugins).length === 0) {\n          delete config.plugins;\n        }\n      }\n    } else {\n      delete config.plugins;\n    }\n\n    if (opts.mode === \"sync\" && opts.existingConfig) {\n      const managedRootKeys = new Set([\"extends\", \"account\", \"domain\", \"app\", \"plugins\", \"shared\"]);\n      const preservedRootKeys = new Set([\n        ...managedRootKeys,\n        ...Object.keys(opts.existingConfig),\n        ...explicitRootKeys,\n      ]);\n\n      for (const key of Object.keys(config)) {\n        if (!preservedRootKeys.has(key)) {\n          delete config[key];\n        }\n      }\n\n      for (const [key, value] of Object.entries(opts.existingConfig)) {\n        if (!(key in config) && !managedRootKeys.has(key) && !explicitRootKeys.has(key)) {\n          config[key] = value;\n        }\n      }\n    }\n\n    await saveBosConfig(destination, config);\n  }\n\n  const pkgPath = join(destination, \"package.json\");\n  if (existsSync(pkgPath)) {\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n\n    if (pkg.workspaces && typeof pkg.workspaces === \"object\") {\n      const ws = pkg.workspaces as { packages?: string[] };\n      if (Array.isArray(ws.packages)) {\n        ws.packages = ws.packages.filter((p: string) => {\n          if (p.startsWith(\"packages/\")) return false;\n          if (p === \"host\") return has(\"host\");\n          if (p.startsWith(\"plugins/\")) return false;\n          return true;\n        });\n\n        if (has(\"plugins\")) {\n          if (!ws.packages.includes(\"plugins/*\")) {\n            ws.packages.push(\"plugins/*\");\n          }\n        }\n      }\n    }\n\n    if (pkg.scripts && typeof pkg.scripts === \"object\") {\n      const scripts = pkg.scripts as Record<string, string>;\n      const FROM = \"bun packages/everything-dev/src/cli.ts\";\n      const TO = \"node_modules/.bin/bos\";\n      const rewrite = (key: string) => {\n        if (scripts[key]?.includes(FROM)) {\n          scripts[key] = scripts[key].replaceAll(FROM, TO);\n        }\n      };\n      rewrite(\"dev\");\n      rewrite(\"dev:ui\");\n      rewrite(\"dev:api\");\n      rewrite(\"dev:proxy\");\n      rewrite(\"build\");\n      rewrite(\"deploy\");\n      rewrite(\"publish\");\n      rewrite(\"start\");\n      rewrite(\"bos\");\n      scripts.postinstall = \"node_modules/.bin/bos types gen || true\";\n      scripts[\"types:gen\"] = \"node_modules/.bin/bos types gen\";\n      if (scripts.typecheck) {\n        scripts.typecheck = scripts.typecheck\n          .replace(\"bun run types:gen && \", \"\")\n          .replace(/bun run --cwd packages\\/everything-dev typecheck & ?/, \"\");\n        if (!has(\"ui\")) {\n          scripts.typecheck = scripts.typecheck.replace(/bun run --cwd ui tsc --noEmit & ?/, \"\");\n        }\n        if (!has(\"api\")) {\n          scripts.typecheck = scripts.typecheck.replace(/bun run --cwd api tsc --noEmit & ?/, \"\");\n        }\n        if (!has(\"host\")) {\n          scripts.typecheck = scripts.typecheck.replace(/bun run --cwd host tsc --noEmit & ?/, \"\");\n        }\n      }\n    }\n\n    if (pkg.devDependencies && typeof pkg.devDependencies === \"object\") {\n      const deps = pkg.devDependencies as Record<string, string>;\n      delete deps[\"every-plugin\"];\n      delete deps[\"everything-dev\"];\n    }\n\n    if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n      pkg.workspaces = { packages: [], catalog: {} };\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    }\n\n    if (!pkg.dependencies) pkg.dependencies = {};\n    const deps = pkg.dependencies as Record<string, string>;\n    const spec = opts.workspaceOpts?.sourceDir\n      ? loadManifestNormalizationSpec(opts.workspaceOpts.sourceDir)\n      : null;\n    if (spec) {\n      workspaces.catalog[\"everything-dev\"] = spec.rootCatalog[\"everything-dev\"];\n      workspaces.catalog[\"every-plugin\"] = spec.rootCatalog[\"every-plugin\"];\n    }\n    const frameworkCatalog = resolveFrameworkCatalog();\n    for (const [name, version] of Object.entries(frameworkCatalog)) {\n      workspaces.catalog[name] = version;\n    }\n    if (!deps[\"everything-dev\"]) deps[\"everything-dev\"] = \"catalog:\";\n    if (!deps[\"every-plugin\"]) deps[\"every-plugin\"] = \"catalog:\";\n\n    writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n  }\n\n  const apiTsConfigPath = join(destination, \"api\", \"tsconfig.json\");\n  if (existsSync(apiTsConfigPath)) {\n    const apiTsConfig = JSON.parse(readFileSync(apiTsConfigPath, \"utf-8\")) as {\n      files?: string[];\n      [key: string]: unknown;\n    };\n    if (apiTsConfig.files) {\n      const validFiles = apiTsConfig.files.filter((f) => existsSync(join(destination, \"api\", f)));\n      if (validFiles.length !== apiTsConfig.files.length) {\n        if (validFiles.length === 0) {\n          delete apiTsConfig.files;\n        } else {\n          apiTsConfig.files = validFiles;\n        }\n        writeFileSync(apiTsConfigPath, `${JSON.stringify(apiTsConfig, null, 2)}\\n`);\n      }\n    }\n  }\n\n  await resolveWorkspaceRefs(destination, opts.workspaceOpts);\n\n  if (has(\"ui\")) {\n    const genContractPath = join(destination, \"ui\", \"src\", \"lib\", \"api-types.gen.ts\");\n    if (!existsSync(genContractPath)) {\n      mkdirSync(dirname(genContractPath), { recursive: true });\n      writeFileSync(genContractPath, `export type ApiContract = Record<string, never>;\\n`);\n    }\n  }\n\n  if (has(\"api\")) {\n    const pluginsClientGenPath = join(destination, \"api\", \"src\", \"lib\", \"plugins-types.gen.ts\");\n    if (!existsSync(pluginsClientGenPath)) {\n      mkdirSync(dirname(pluginsClientGenPath), { recursive: true });\n      writeFileSync(\n        pluginsClientGenPath,\n        `import type { ContractRouterClient, AnyContractRouter } from \"@orpc/contract\";\\ntype ClientFactory<C extends AnyContractRouter> = (context?: Record<string, unknown>) => ContractRouterClient<C>;\\nexport type PluginsClient = Record<string, never>;\\n`,\n      );\n    }\n  }\n\n  const authTypesContent = generateAuthTypesTemplate();\n  const authTypesPaths: string[] = [];\n  if (has(\"ui\")) {\n    authTypesPaths.push(join(destination, \"ui\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n  }\n  if (has(\"api\")) {\n    authTypesPaths.push(join(destination, \"api\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n  }\n  if (has(\"host\") && existsSync(join(destination, \"host\", \"src\"))) {\n    authTypesPaths.push(join(destination, \"host\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n  }\n  for (const authTypesGenPath of authTypesPaths) {\n    if (!existsSync(authTypesGenPath)) {\n      mkdirSync(dirname(authTypesGenPath), { recursive: true });\n      writeFileSync(authTypesGenPath, authTypesContent);\n    }\n  }\n}\n\nfunction generateAuthTypesTemplate(): string {\n  return `import type { Auth } from \"better-auth\";\nexport type { Auth } from \"better-auth\";\nexport type AuthSessionUser = NonNullable<Auth[\"$Infer\"][\"Session\"][\"user\"]> & {\n  role?: string | null;\n  isAnonymous?: boolean | null;\n  walletAddress?: string | null;\n  banned?: boolean | null;\n};\nexport type AuthSessionData = NonNullable<Auth[\"$Infer\"][\"Session\"][\"session\"]> & {\n  activeOrganizationId?: string | null;\n};\nexport type AuthSession = {\n  user: AuthSessionUser | null;\n  session: AuthSessionData | null;\n};\nexport interface AuthOrganizationContext {\n  activeOrganizationId: string | null;\n  organization: { id: string; name: string; slug: string; logo?: string | null; metadata?: Record<string, unknown> } | null;\n  member: { id: string; role: string } | null;\n  isPersonal: boolean;\n  hasOrganization: boolean;\n}\nexport interface AuthRequestContext {\n  user: AuthSessionUser | null;\n  userId: string | null;\n  isAuthenticated: boolean;\n  authMethod: \"session\" | \"apiKey\" | \"anonymous\" | \"none\";\n  near: {\n    primaryAccountId: string | null;\n    linkedAccounts: Array<{ accountId: string; network: string; publicKey: string; isPrimary: boolean }>;\n    hasNearAccount: boolean;\n  };\n  organization: AuthOrganizationContext;\n  organizations?: Array<{ id: string; role: string; name?: string; slug?: string }>;\n}\nexport type AuthActiveMember = { id: string | null; role: string | null; organizationId: string | null };\nexport type AuthOrganization = NonNullable<AuthOrganizationContext[\"organization\"]>;\nexport type AuthOrganizationMember = NonNullable<AuthOrganizationContext[\"member\"]>;\nexport type AuthOrganizationSummary = NonNullable<AuthRequestContext[\"organizations\"]>[number];\nexport type AuthBaseSession = Auth[\"$Infer\"][\"Session\"];\nexport type createAuthInstance = never;\nexport interface AuthServices {\n  auth: Auth;\n  db: unknown;\n  driver: { close(): Promise<void> };\n  handler: (req: Request) => Promise<Response>;\n}\n`;\n}\n\nexport async function runBunInstall(\n  destination: string,\n  spinner?: { message: (msg: string) => void },\n): Promise<void> {\n  await runWithProgress(\n    \"bun\",\n    [\"install\", \"--ignore-scripts\"],\n    destination,\n    spinner,\n    \"Installing dependencies\",\n  );\n}\n\nexport async function runBunInstallForUpgrade(\n  destination: string,\n  spinner?: { message: (msg: string) => void },\n): Promise<void> {\n  await runWithProgress(\n    \"bun\",\n    [\"install\", \"--force\"],\n    destination,\n    spinner,\n    \"Installing dependencies\",\n  );\n}\n\nexport async function runTypesGen(\n  destination: string,\n  spinner?: { message: (msg: string) => void },\n): Promise<void> {\n  const localBosBin = join(destination, \"node_modules\", \".bin\", \"bos\");\n  if (existsSync(localBosBin)) {\n    await runWithProgress(\n      \"node_modules/.bin/bos\",\n      [\"types\", \"gen\"],\n      destination,\n      spinner,\n      \"Generating types\",\n    );\n    return;\n  }\n\n  const localCli = join(destination, \"packages\", \"everything-dev\", \"src\", \"cli.ts\");\n  if (existsSync(localCli)) {\n    await runWithProgress(\n      \"bun\",\n      [\"run\", \"--cwd\", \"packages/everything-dev\", \"src/cli.ts\", \"types\", \"gen\"],\n      destination,\n      spinner,\n      \"Generating types\",\n    );\n    return;\n  }\n\n  throw new Error(\"Unable to locate bos CLI for types generation\");\n}\n\nexport async function runDockerComposeUp(destination: string): Promise<void> {\n  await execCommand(\"docker\", [\"compose\", \"up\", \"-d\", \"--wait\"], destination, { stdio: \"inherit\" });\n}\n\nasync function runWithProgress(\n  command: string,\n  args: string[],\n  cwd: string,\n  spinner: { message: (msg: string) => void } | undefined,\n  label: string,\n): Promise<void> {\n  const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n  const child = execa(command, args, { cwd, stdio: \"inherit\", timeout });\n\n  if (spinner) {\n    const start = Date.now();\n    const interval = setInterval(() => {\n      const elapsed = Math.round((Date.now() - start) / 1000);\n      spinner.message(`${label}... (${elapsed}s)`);\n    }, 2000);\n    try {\n      await child;\n    } finally {\n      clearInterval(interval);\n    }\n  } else {\n    await child;\n  }\n}\n\nexport function stripOrphanedWorkspacesFromLockfile(\n  lockfilePath: string,\n  allowedWorkspaces: string[],\n): void {\n  if (!existsSync(lockfilePath)) return;\n\n  const content = readFileSync(lockfilePath, \"utf-8\");\n  let lockfile: Record<string, unknown>;\n  try {\n    lockfile = JSON.parse(content) as Record<string, unknown>;\n  } catch {\n    return;\n  }\n\n  const workspaces = lockfile.workspaces;\n  if (!workspaces || typeof workspaces !== \"object\") return;\n\n  const workspaceMap = workspaces as Record<string, unknown>;\n  const allowed = new Set([\"\", ...allowedWorkspaces]);\n\n  const keys = Object.keys(workspaceMap);\n  let changed = false;\n  for (const key of keys) {\n    if (allowed.has(key)) continue;\n    if (\n      allowedWorkspaces.some(\n        (pattern) => pattern.endsWith(\"/*\") && key.startsWith(pattern.slice(0, -1)),\n      )\n    )\n      continue;\n    delete workspaceMap[key];\n    changed = true;\n  }\n\n  if (changed) {\n    writeFileSync(lockfilePath, `${JSON.stringify(lockfile, null, 2)}\\n`);\n  }\n}\n\nexport function removeInitLockfile(lockfilePath: string): void {\n  if (!existsSync(lockfilePath)) return;\n  rmSync(lockfilePath, { force: true });\n}\n\nconst WORKSPACE_LOCAL_PATHS: Record<string, string> = {\n  \"everything-dev\": \"packages/everything-dev\",\n  \"every-plugin\": \"packages/every-plugin\",\n};\n\nfunction readJsonFile<T>(filePath: string): T {\n  return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nfunction tryResolvePackageJson(packageName: string): string | null {\n  try {\n    return require.resolve(`${packageName}/package.json`);\n  } catch {\n    return null;\n  }\n}\n\nfunction resolveFrameworkCatalog(): Record<string, string> {\n  const catalog: Record<string, string> = {};\n  const everythingDevPackageJson = tryResolvePackageJson(\"everything-dev\");\n\n  if (everythingDevPackageJson) {\n    try {\n      const selfPkgDir = dirname(everythingDevPackageJson);\n      const monorepoPkgPath = join(selfPkgDir, \"..\", \"..\", \"package.json\");\n      if (existsSync(monorepoPkgPath)) {\n        const monorepoPkg = readJsonFile<{\n          workspaces?: { catalog?: Record<string, string> };\n        }>(monorepoPkgPath);\n        const sourceCatalog = monorepoPkg.workspaces?.catalog;\n        if (sourceCatalog && typeof sourceCatalog === \"object\") {\n          for (const [name, version] of Object.entries(sourceCatalog)) {\n            if (typeof version === \"string\") {\n              catalog[name] = version;\n            }\n          }\n        }\n      }\n    } catch {}\n\n    try {\n      const selfPkg = readJsonFile<{\n        version?: string;\n        workspaces?: { catalog?: Record<string, string> };\n      }>(everythingDevPackageJson);\n      if (selfPkg.version && !catalog[\"everything-dev\"]) {\n        catalog[\"everything-dev\"] = `^${selfPkg.version}`;\n      }\n      const sourceCatalog = selfPkg.workspaces?.catalog;\n      if (sourceCatalog && typeof sourceCatalog === \"object\") {\n        for (const [name, version] of Object.entries(sourceCatalog)) {\n          if (typeof version === \"string\" && !catalog[name]) {\n            catalog[name] = version;\n          }\n        }\n      }\n    } catch {}\n  }\n\n  for (const packageName of FRAMEWORK_PACKAGES) {\n    const resolved = tryResolvePackageJson(packageName);\n    if (!resolved) continue;\n\n    try {\n      const pkg = readJsonFile<{ version?: string }>(resolved);\n      if (pkg.version) {\n        catalog[packageName] = `^${pkg.version}`;\n      }\n    } catch {}\n  }\n\n  return catalog;\n}\n\nexport async function scaffoldMinimalProject(\n  destination: string,\n  parentConfig: BosConfigInput,\n  opts: {\n    extendsAccount: string;\n    extendsGateway: string;\n    account?: string;\n    domain?: string;\n    plugins?: string[];\n    overrides: OverrideSection[];\n    repository?: string;\n    title?: string;\n    description?: string;\n  },\n): Promise<number> {\n  mkdirSync(destination, { recursive: true });\n\n  const has = (section: OverrideSection) => opts.overrides.includes(section);\n\n  const config: Record<string, unknown> = {\n    extends: `bos://${opts.extendsAccount}/${opts.extendsGateway}`,\n    account: opts.account || opts.extendsAccount,\n    ...(opts.domain ? { domain: opts.domain } : {}),\n    ...(opts.repository ? { repository: opts.repository } : {}),\n    ...(opts.title ? { title: opts.title } : {}),\n    ...(opts.description ? { description: opts.description } : {}),\n  };\n\n  if (parentConfig.app && typeof parentConfig.app === \"object\") {\n    const app: Record<string, unknown> = {};\n    const parentApp = parentConfig.app as Record<string, Record<string, unknown>>;\n\n    if (has(\"host\") && parentApp.host) {\n      app.host = { ...parentApp.host };\n      stripProductionFields(app.host as Record<string, unknown>);\n    }\n\n    if (has(\"ui\") && parentApp.ui) {\n      app.ui = { ...parentApp.ui };\n      stripProductionFields(app.ui as Record<string, unknown>);\n    }\n\n    if (has(\"api\") && parentApp.api) {\n      app.api = { ...parentApp.api };\n      stripProductionFields(app.api as Record<string, unknown>);\n    }\n\n    if (has(\"plugins\") && parentApp.auth) {\n      app.auth = { ...parentApp.auth };\n      stripProductionFields(app.auth as Record<string, unknown>);\n    }\n\n    if (Object.keys(app).length > 0) {\n      config.app = app;\n    }\n  }\n\n  if (has(\"plugins\") && opts.plugins && opts.plugins.length > 0 && parentConfig.plugins) {\n    const plugins: Record<string, unknown> = {};\n    for (const key of opts.plugins) {\n      const parentPlugin = (parentConfig.plugins as Record<string, unknown>)?.[key];\n      if (parentPlugin) {\n        if (typeof parentPlugin === \"string\") {\n          plugins[key] = { extends: parentPlugin };\n        } else {\n          const pluginCopy = { ...(parentPlugin as Record<string, unknown>) };\n          stripProductionFields(pluginCopy);\n          plugins[key] = pluginCopy;\n        }\n      }\n    }\n    config.plugins = plugins;\n  }\n\n  await saveBosConfig(destination, config);\n\n  const workspacePackages: string[] = [];\n  for (const section of opts.overrides) {\n    workspacePackages.push(...OVERRIDE_WORKSPACE_MAP[section]);\n  }\n  if (has(\"plugins\")) {\n    workspacePackages.push(\"plugins/*\");\n  }\n\n  const catalog = resolveFrameworkCatalog();\n\n  const pkg: Record<string, unknown> = {\n    name: opts.domain || opts.extendsGateway,\n    private: true,\n    type: \"module\",\n    scripts: {\n      dev: \"node_modules/.bin/bos dev --host remote\",\n      \"dev:ui\": \"node_modules/.bin/bos dev --ui local --api remote\",\n      \"dev:api\": \"node_modules/.bin/bos dev --ui remote --api local\",\n      build: \"node_modules/.bin/bos build\",\n      deploy: \"node_modules/.bin/bos build --deploy\",\n      publish: \"node_modules/.bin/bos publish\",\n      start: \"node_modules/.bin/bos start\",\n      typecheck: \"node_modules/.bin/bos types gen && tsc --noEmit\",\n      postinstall: \"node_modules/.bin/bos types gen || true\",\n      \"types:gen\": \"node_modules/.bin/bos types gen\",\n      bos: \"node_modules/.bin/bos\",\n    },\n    dependencies: {\n      \"everything-dev\": \"catalog:\",\n      \"every-plugin\": \"catalog:\",\n    },\n    devDependencies: {},\n    workspaces: {\n      packages: workspacePackages,\n      catalog,\n    },\n  };\n  writeFileSync(join(destination, \"package.json\"), `${JSON.stringify(pkg, null, 2)}\\n`);\n\n  const envExample = generateEnvExample(parentConfig, opts.overrides);\n  if (envExample) {\n    writeFileSync(join(destination, \".env.example\"), envExample);\n  }\n\n  writeFileSync(join(destination, \".gitignore\"), generateGitignore());\n\n  return 4;\n}\n\nasync function resolveWorkspaceRefs(\n  destination: string,\n  options?: { localOverrides?: boolean; sourceDir?: string },\n): Promise<void> {\n  await normalizePackageManifestsInTree({\n    sourceRootDir: options?.sourceDir ?? destination,\n    targetDir: destination,\n    resolveCatalogRefs: false,\n    preserveCatalogRefs: true,\n    removeWorkspaceDeps: [\"host\"],\n  });\n\n  if (options?.localOverrides && options.sourceDir) {\n    const rootPkgPath = join(destination, \"package.json\");\n    if (existsSync(rootPkgPath)) {\n      const pkg = JSON.parse(readFileSync(rootPkgPath, \"utf-8\")) as Record<string, unknown>;\n      if (!pkg.overrides) pkg.overrides = {};\n      const overrides = pkg.overrides as Record<string, string>;\n\n      const rootWorkspaces = ((pkg.workspaces as Record<string, string[]>)?.packages ?? []).filter(\n        Boolean,\n      );\n\n      for (const [name, relPath] of Object.entries(WORKSPACE_LOCAL_PATHS)) {\n        if (!rootWorkspaces.some((ws) => ws === relPath || ws === `plugins/${name}`)) {\n          const srcPkgPath = join(options.sourceDir, relPath, \"package.json\");\n          if (existsSync(srcPkgPath)) {\n            overrides[name] = `file:${relPath}`;\n            rootWorkspaces.push(relPath);\n          }\n        }\n      }\n\n      if (rootWorkspaces.length > 0) {\n        if (!pkg.workspaces) pkg.workspaces = {};\n        (pkg.workspaces as Record<string, string[]>).packages = rootWorkspaces;\n      }\n\n      writeFileSync(rootPkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n    }\n  }\n}\n\nexport async function writeInitSnapshot(\n  destination: string,\n  extendsAccount: string,\n  extendsGateway: string,\n  sourceDir: string,\n  patterns: string[],\n  _options: {\n    overrides: OverrideSection[];\n    plugins?: string[];\n  },\n): Promise<void> {\n  const allFiles = new Set<string>();\n  for (const pattern of patterns) {\n    const matches = await glob(pattern, {\n      cwd: sourceDir,\n      nodir: true,\n      dot: true,\n      absolute: false,\n      ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n    });\n    for (const match of matches) {\n      allFiles.add(match);\n    }\n  }\n\n  const fileHashes: Record<string, string> = {};\n  for (const filePath of allFiles) {\n    const src = join(sourceDir, filePath);\n    const stat = lstatSync(src);\n    if (!stat.isFile()) continue;\n    const content = readFileSync(src);\n    const destPath = sourcePathToDestinationPath(filePath);\n    fileHashes[destPath] = computeHash(content);\n  }\n\n  await writeSnapshot(destination, {\n    parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n    files: fileHashes,\n  });\n}\n\nfunction computeHash(data: Uint8Array): string {\n  return createHash(\"sha256\").update(data).digest(\"hex\").substring(0, 16);\n}\n\nfunction mkTmpDir(prefix: string): string {\n  return mkdtempSync(join(tmpdir(), `${prefix}-`));\n}\n\nexport async function generateDatabaseMigrations(destination: string): Promise<void> {\n  const drizzleConfigs = await glob(\"**/drizzle.config.ts\", {\n    cwd: destination,\n    nodir: true,\n    dot: false,\n    absolute: false,\n    ignore: [\"**/node_modules/**\"],\n  });\n\n  for (const configPath of drizzleConfigs) {\n    const workspaceDir = dirname(configPath);\n    const pkgPath = join(destination, workspaceDir, \"package.json\");\n    if (!existsSync(pkgPath)) continue;\n\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n    const scripts = pkg.scripts as Record<string, string> | undefined;\n    if (!scripts?.[\"db:generate\"]) continue;\n\n    const cwd = join(destination, workspaceDir);\n    await execCommand(\"bun\", [\"run\", \"db:generate\"], cwd);\n  }\n}\n\nconst COMMAND_TIMEOUTS: Record<string, number> = {\n  bun: 5 * 60_000,\n  docker: 5 * 60_000,\n  node_modules: 2 * 60_000,\n  tar: 60_000,\n};\n\nexport async function execCommand(\n  command: string,\n  args: string[],\n  cwd?: string,\n  options?: { stdio?: \"pipe\" | \"inherit\" },\n): Promise<void> {\n  const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n  await execa(command, args, { cwd, stdio: options?.stdio ?? \"pipe\", timeout });\n}\n\nfunction generateEnvExample(config: BosConfigInput, overrides: OverrideSection[]): string {\n  const has = (section: OverrideSection) => overrides.includes(section);\n\n  const lines: string[] = [\"# Environment variables\"];\n  const collectSecrets = (\n    obj: Record<string, unknown>,\n    includeSection: boolean,\n    prefix = \"\",\n  ): void => {\n    for (const [key, value] of Object.entries(obj)) {\n      if (!includeSection) continue;\n      if (key === \"secrets\" && Array.isArray(value)) {\n        for (const secret of value) {\n          if (typeof secret === \"string\") {\n            lines.push(`${secret}=`);\n          }\n        }\n      } else if (key === \"variables\" && isPlainObject(value)) {\n        for (const [varKey, varVal] of Object.entries(value as Record<string, unknown>)) {\n          if (typeof varVal === \"string\") {\n            lines.push(`${varKey}=${varVal}`);\n          }\n        }\n      } else if (isPlainObject(value) && key !== \"extends\") {\n        collectSecrets(value as Record<string, unknown>, includeSection, `${prefix}${key}.`);\n      }\n    }\n  };\n\n  if (config.app && typeof config.app === \"object\") {\n    const app = config.app as Record<string, unknown>;\n    collectSecrets(app, has(\"host\"), \"host.\");\n    collectSecrets(app, has(\"ui\"), \"ui.\");\n    collectSecrets(app, has(\"api\"), \"api.\");\n    collectSecrets(app, has(\"plugins\"), \"auth.\");\n  }\n  if (has(\"plugins\") && config.plugins && typeof config.plugins === \"object\") {\n    for (const [pluginKey, pluginVal] of Object.entries(\n      config.plugins as Record<string, unknown>,\n    )) {\n      if (isPlainObject(pluginVal)) {\n        collectSecrets(pluginVal as Record<string, unknown>, true);\n      } else if (typeof pluginVal === \"string\") {\n        lines.push(`# Plugin '${pluginKey}' extends ${pluginVal}`);\n      }\n    }\n  }\n\n  lines.push(\"BETTER_AUTH_SECRET=generate-a-secret-here\");\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction generateGitignore(): string {\n  return `node_modules/\ndist/\n.env\n.bos/\n*.gen.ts\n*.gen.tsx\n`;\n}\n"],"mappings":"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"}