{"version":3,"file":"init.cjs","names":["require","resolveExtendsRef","fetchBosConfigFromFastKv","fetchResponse","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, relative, 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 { fetchResponse } from \"../http-client\";\nimport {\n  loadManifestNormalizationSpec,\n  normalizePackageManifestsInTree,\n} from \"../internal/manifest-normalizer\";\nimport { resolveExtendsRef } from \"../merge\";\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  \"railway.toml\",\n  \"AGENTS.md\",\n  \".changeset/config.json\",\n  \".changeset/README.md\",\n  \"README.md\",\n  \"CONTRIBUTING.md\",\n  \".github/templates/**\",\n] 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 interface CatalogChainSource {\n  catalog: Record<string, string>;\n  repository?: string;\n  extendsChain: string[];\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 readWorkspaceCatalog(sourceDir: string): Record<string, string> {\n  const pkgPath = join(sourceDir, \"package.json\");\n  if (!existsSync(pkgPath)) {\n    return {};\n  }\n\n  const pkg = readJsonFile<{ workspaces?: { catalog?: Record<string, string> } }>(pkgPath);\n  return { ...(pkg.workspaces?.catalog ?? {}) };\n}\n\nexport async function resolveCatalogChainSource(opts: {\n  extendsAccount: string;\n  extendsGateway: string;\n  sourceDir?: string;\n}): Promise<CatalogChainSource> {\n  const catalogs: Record<string, string>[] = [];\n  const cleanups: Array<() => Promise<void>> = [];\n  const extendsChain: string[] = [];\n  const visited = new Set<string>();\n  let repository: string | undefined;\n  let currentRef = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n  let sourceDir = opts.sourceDir ? resolve(opts.sourceDir) : undefined;\n  let configPath = sourceDir ? join(sourceDir, \"bos.config.json\") : undefined;\n\n  try {\n    while (true) {\n      if (visited.has(currentRef)) {\n        throw new Error(`Circular extends detected while resolving catalog source: ${currentRef}`);\n      }\n\n      visited.add(currentRef);\n      extendsChain.push(currentRef);\n\n      let config: Record<string, unknown>;\n      let currentSourceDir = sourceDir;\n      let cleanup: () => Promise<void> = async () => {};\n\n      if (configPath) {\n        config = readJsonFile<Record<string, unknown>>(configPath);\n        currentSourceDir = dirname(configPath);\n      } else {\n        const parsed = parseBosRef(currentRef);\n        if (!parsed) {\n          break;\n        }\n        const sourceResult = await resolveSourceDir({\n          extendsAccount: parsed.account,\n          extendsGateway: parsed.gateway,\n        });\n        config = sourceResult.parentConfig as Record<string, unknown>;\n        currentSourceDir = sourceResult.sourceDir || undefined;\n        cleanup = sourceResult.cleanup;\n      }\n\n      cleanups.push(cleanup);\n      catalogs.push(currentSourceDir ? readWorkspaceCatalog(currentSourceDir) : {});\n\n      if (typeof config.repository === \"string\") {\n        repository = config.repository;\n      }\n\n      const nextExtendsRef = getExtendsRef(config);\n      if (!nextExtendsRef) {\n        break;\n      }\n\n      if (nextExtendsRef.startsWith(\"bos://\")) {\n        currentRef = nextExtendsRef;\n        sourceDir = undefined;\n        configPath = undefined;\n        continue;\n      }\n\n      if (!currentSourceDir) {\n        break;\n      }\n\n      const nextConfigPath = resolve(currentSourceDir, nextExtendsRef);\n      if (!existsSync(nextConfigPath)) {\n        break;\n      }\n\n      currentRef = nextConfigPath;\n      sourceDir = dirname(nextConfigPath);\n      configPath = nextConfigPath;\n    }\n  } finally {\n    for (const cleanup of cleanups.reverse()) {\n      await cleanup();\n    }\n  }\n\n  return {\n    catalog: Object.assign({}, ...catalogs.reverse()),\n    repository,\n    extendsChain,\n  };\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(\n  overrides: OverrideSection[],\n  plugins?: string[],\n  pluginDirMap?: Record<string, string>,\n): 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      const dirName = pluginDirMap?.[plugin] ?? plugin;\n      patterns.push(`plugins/${dirName}/**`);\n    }\n  }\n\n  return patterns;\n}\n\nexport function buildPluginRouteExclusions(\n  parentConfig: { plugins?: Record<string, unknown> } | null | undefined,\n  selectedPlugins: string[],\n): string[] {\n  if (!parentConfig?.plugins) return [];\n\n  const selected = new Set(selectedPlugins);\n  const claimedBySelected = new Set<string>();\n  const claimedByUnselected: string[] = [];\n\n  for (const [pluginKey, entry] of Object.entries(parentConfig.plugins)) {\n    const routes = extractPluginRoutes(entry);\n    if (!routes) continue;\n\n    if (selected.has(pluginKey)) {\n      for (const route of routes) claimedBySelected.add(route);\n    } else {\n      for (const route of routes) claimedByUnselected.push(route);\n    }\n  }\n\n  return claimedByUnselected.filter((route) => !claimedBySelected.has(route));\n}\n\nfunction extractPluginRoutes(entry: unknown): string[] | undefined {\n  if (typeof entry !== \"object\" || entry === null) return undefined;\n  const routes = (entry as { routes?: unknown }).routes;\n  if (!Array.isArray(routes)) return undefined;\n  return routes.filter((r): r is string => typeof r === \"string\");\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 = getExtendsRef(config as Record<string, unknown>);\n    if (extendsRef) {\n      const normalized = extendsRef.startsWith(\"bos://\") ? extendsRef : `bos://${extendsRef}`;\n      const parsed = parseBosRef(normalized);\n      if (parsed) {\n        const result = await resolveRepositoryViaExtendsChain(\n          parsed.account,\n          parsed.gateway,\n          visited,\n        );\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 } = parsed;\n  let response: Response | null = null;\n\n  for (const branch of [\"main\", \"master\"]) {\n    const candidate = await fetchResponse(\n      `https://api.github.com/repos/${owner}/${repo}/tarball/${branch}`,\n      {\n        headers: { \"User-Agent\": \"everything-dev\" },\n        redirect: \"follow\",\n        timeout: \"60 seconds\",\n      },\n    );\n    if (candidate.ok) {\n      response = candidate;\n      break;\n    }\n    if (candidate.status !== 404) {\n      throw new Error(\n        `GitHub tarball download failed: ${candidate.status} ${candidate.statusText}`,\n      );\n    }\n  }\n\n  if (!response) {\n    throw new Error(`GitHub tarball download failed for ${repoUrl}: tried main and master`);\n  }\n\n  if (!response.body) {\n    throw new Error(\"GitHub tarball download returned empty body\");\n  }\n\n  const tmpDir = mkTmpDir(\"bos-init-tarball-\");\n  const tarballPath = join(tmpDir, \"source.tar.gz\");\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 } | null {\n  const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n  if (httpsMatch) {\n    return { owner: httpsMatch[1], repo: httpsMatch[2] };\n  }\n\n  const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n  if (sshMatch) {\n    return { owner: sshMatch[1], repo: sshMatch[2] };\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    ignore?: string[];\n  },\n): Promise<number> {\n  if (patterns.length === 0) {\n    return 0;\n  }\n\n  const baseIgnore = [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"];\n  const ignore = options.ignore ? [...baseIgnore, ...options.ignore] : baseIgnore;\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,\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\nfunction buildRootTypecheckScript(sections: {\n  ui: boolean;\n  api: boolean;\n  host: boolean;\n  plugins: boolean;\n}): string {\n  const commands = [\"bun run types:gen\"];\n\n  if (sections.ui) {\n    commands.push(\"if [ -d ui ]; then bun run --cwd ui typecheck; fi\");\n  }\n  if (sections.api) {\n    commands.push(\"if [ -d api ]; then bun run --cwd api typecheck; fi\");\n  }\n  if (sections.host) {\n    commands.push(\"if [ -d host ]; then bun run --cwd host typecheck; fi\");\n  }\n  if (sections.plugins) {\n    commands.push(\n      'if [ -d plugins ]; then for dir in plugins/*; do if [ -f \"$dir/package.json\" ]; then bun run --cwd \"$dir\" typecheck; fi; done; fi',\n    );\n  }\n\n  return commands.join(\" && \");\n}\n\nexport function buildChildRootScripts(sections: {\n  ui: boolean;\n  api: boolean;\n  host: boolean;\n  plugins: boolean;\n}): Record<string, string> {\n  const scripts: Record<string, string> = {\n    dev: \"node_modules/.bin/bos dev\",\n    \"dev:proxy\": \"node_modules/.bin/bos dev --proxy\",\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: buildRootTypecheckScript(sections),\n    lint: \"biome check .\",\n    \"lint:fix\": \"biome check --write .\",\n    format: \"biome format --write .\",\n    \"format:check\": \"biome format .\",\n    changeset: \"changeset\",\n    version: \"changeset version\",\n    release: \"echo 'Packages versioned - app release handled by workflow'\",\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\n  if (sections.api) {\n    scripts[\"db:push\"] = \"bun run --cwd api drizzle-kit push\";\n    scripts[\"db:studio\"] = \"node_modules/.bin/bos db:studio\";\n    scripts[\"db:doctor\"] = \"node_modules/.bin/bos db:doctor\";\n    scripts[\"db:repair\"] = \"node_modules/.bin/bos db:repair\";\n    scripts[\"db:generate\"] = \"bun run --cwd api drizzle-kit generate\";\n    scripts[\"db:migrate\"] = \"bun run --cwd api drizzle-kit migrate\";\n    scripts[\"test:api\"] = \"cd api && bun run test tests/integration/ tests/unit/\";\n    scripts[\"test:integration\"] = \"cd api && bun run test tests/integration/\";\n  }\n\n  if (sections.host) {\n    scripts[\"test:e2e\"] = \"bun run --cwd host test:e2e\";\n  }\n\n  if (sections.api && sections.host) {\n    scripts.test = \"bun run test:api && bun run test:e2e\";\n  } else if (sections.api) {\n    scripts.test = \"bun run test:api\";\n  } else if (sections.host) {\n    scripts.test = \"bun run test:e2e\";\n  }\n\n  if (sections.api || sections.host) {\n    scripts[\"dev:postgres\"] = \"docker compose up -d --wait && bun run dev\";\n    scripts[\"dev:postgres:down\"] = \"docker compose down\";\n    scripts[\"dev:postgres:reset\"] = \"docker compose down -v && docker compose up -d --wait\";\n  }\n\n  if (sections.ui) {\n    scripts[\"dev:ui\"] = \"node_modules/.bin/bos dev --ui local --api remote\";\n  }\n  if (sections.api) {\n    scripts[\"dev:api\"] = \"node_modules/.bin/bos dev --ui remote --api local\";\n  }\n\n  return scripts;\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  const existingApp =\n    opts.mode === \"sync\" && opts.existingConfig?.app && typeof opts.existingConfig.app === \"object\"\n      ? (opts.existingConfig.app as Record<string, unknown>)\n      : undefined;\n  const preservedAuth = existingApp?.auth;\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\")\n        ) {\n          delete app[entryKey];\n          continue;\n        }\n        if (entryKey === \"auth\") {\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      if (preservedAuth !== undefined) {\n        app.auth = preservedAuth;\n      }\n\n      if (Object.keys(app).length === 0) {\n        delete config.app;\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          config.plugins = {};\n        }\n      }\n    } else {\n      config.plugins = {};\n    }\n\n    if (opts.mode === \"sync\" && opts.existingConfig) {\n      const managedRootKeys = new Set([\"extends\", \"account\", \"domain\", \"app\", \"plugins\"]);\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    const childScripts = buildChildRootScripts({\n      ui: has(\"ui\"),\n      api: has(\"api\"),\n      host: has(\"host\"),\n      plugins: has(\"plugins\"),\n    });\n\n    if (typeof pkg.name !== \"string\" || pkg.name.length === 0) {\n      pkg.name = \"monorepo\";\n    }\n    pkg.private = true;\n    pkg.type = \"module\";\n    delete pkg.module;\n    delete pkg.peerDependencies;\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 === \"ui\") return has(\"ui\");\n          if (p === \"api\") return has(\"api\");\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      pkg.scripts = {};\n    }\n    const scripts = pkg.scripts as Record<string, string>;\n    for (const [key, value] of Object.entries(childScripts)) {\n      scripts[key] = value;\n    }\n    for (const obsoleteScript of [\n      \"init\",\n      \"sync-catalog\",\n      \"db:push\",\n      \"db:studio\",\n      \"db:doctor\",\n      \"db:repair\",\n      \"db:generate\",\n      \"db:migrate\",\n      \"test\",\n      \"test:api\",\n      \"test:integration\",\n      \"test:e2e\",\n      \"dev:postgres\",\n      \"dev:postgres:down\",\n      \"dev:postgres:reset\",\n      \"dev:ui\",\n      \"dev:api\",\n    ]) {\n      if (!(obsoleteScript in childScripts)) {\n        delete scripts[obsoleteScript];\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 = (\n      await resolveCatalogChainSource({\n        extendsAccount: opts.extendsAccount,\n        extendsGateway: opts.extendsGateway,\n        sourceDir: opts.workspaceOpts?.sourceDir,\n      })\n    ).catalog;\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 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, generateAuthTypesContent(authTypesGenPath, destination));\n    }\n  }\n\n  if (authTypesPaths.length > 0) {\n    const authDir = join(destination, \".bos\", \"generated\", \"auth\");\n    if (!existsSync(authDir)) {\n      mkdirSync(authDir, { recursive: true });\n    }\n    const authExportStubPath = join(authDir, \"auth-export.d.ts\");\n    if (!existsSync(authExportStubPath)) {\n      writeFileSync(\n        authExportStubPath,\n        `export type Auth = any;\nexport type AuthOrganizationContext = any;\nexport type AuthOrganization = any;\nexport type AuthOrganizationSummary = any;\nexport type AuthOrganizationMember = any;\nexport type AuthApiKey = any;\nexport type AuthInvitation = any;\nexport type GetActiveMemberInput = any;\nexport type GetOrganizationInput = any;\nexport type ListMembersInput = any;\nexport type ListInvitationsInput = any;\nexport type ListApiKeysInput = any;\nexport type AuthServices = any;\nexport type createAuthInstance = any;\n`,\n      );\n    }\n    const contractStubPath = join(authDir, \"contract.d.ts\");\n    if (!existsSync(contractStubPath)) {\n      writeFileSync(\n        contractStubPath,\n        `export type ContractType = any;\nexport type InferOutput<_TRoute extends string> = any;\n`,\n      );\n    }\n  }\n\n  if (has(\"plugins\")) {\n    for (const plugin of opts.plugins ?? []) {\n      const pluginSrcDir = join(destination, \"plugins\", plugin, \"src\");\n      const pluginIndexPath = join(pluginSrcDir, \"index.ts\");\n      const pluginClientGenPath = join(pluginSrcDir, \"plugins-client.gen.ts\");\n      if (!existsSync(pluginIndexPath) || existsSync(pluginClientGenPath)) {\n        continue;\n      }\n      const pluginIndex = readFileSync(pluginIndexPath, \"utf-8\");\n      if (!pluginIndex.includes(\"./plugins-client.gen\")) {\n        continue;\n      }\n      writeFileSync(pluginClientGenPath, \"export type PluginsClient = Record<string, never>;\\n\");\n    }\n  }\n}\n\nfunction generateAuthTypesContent(targetPath: string, configDir: string): string {\n  const authExportRel = toRelativeImportPath(\n    join(configDir, \".bos\", \"generated\", \"auth\", \"auth-export.d.ts\"),\n    targetPath,\n  );\n  const contractRel = toRelativeImportPath(\n    join(configDir, \".bos\", \"generated\", \"auth\", \"contract.d.ts\"),\n    targetPath,\n  );\n\n  return `export type {\n  Auth,\n  AuthOrganizationContext,\n  AuthOrganization,\n  AuthOrganizationSummary,\n  AuthOrganizationMember,\n  AuthApiKey,\n  AuthInvitation,\n  GetActiveMemberInput,\n  GetOrganizationInput,\n  ListMembersInput,\n  ListInvitationsInput,\n  ListApiKeysInput,\n  AuthServices,\n  createAuthInstance,\n} from \"${authExportRel}\";\nimport type { InferOutput, ContractType as AuthContract } from \"${contractRel}\";\nimport type { Auth as BaseAuth } from \"${authExportRel}\";\n\ntype RawAuthSession = InferOutput<\"getSession\">;\ntype RawAuthRequestContext = InferOutput<\"getContext\">;\ntype RawAuthActiveMember = InferOutput<\"getActiveMember\">;\n\nexport type AuthSessionUser = NonNullable<RawAuthSession[\"user\"]>;\nexport type AuthSessionData = NonNullable<RawAuthSession[\"session\"]>;\nexport type AuthSession = {\n  user: AuthSessionUser | null;\n  session: AuthSessionData | null;\n};\nexport type AuthRequestContext = RawAuthRequestContext;\nexport type AuthPluginContext = Partial<AuthRequestContext> & {\n  reqHeaders?: Headers;\n  getRawBody?: () => Promise<string>;\n};\nexport type AuthActiveMember = RawAuthActiveMember;\nexport type AuthBaseSession = BaseAuth[\"$Infer\"][\"Session\"];\nexport type AuthContractType = AuthContract;\n`;\n}\n\nfunction toRelativeImportPath(fromPath: string, toPath: string): string {\n  const rel = relative(dirname(toPath), fromPath);\n  return rel.startsWith(\".\") ? rel : `./${rel}`;\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  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\nfunction readJsonFile<T>(filePath: string): T {\n  return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\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 (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  } else if (has(\"plugins\")) {\n    config.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 = (\n    await resolveCatalogChainSource({\n      extendsAccount: opts.extendsAccount,\n      extendsGateway: opts.extendsGateway,\n    })\n  ).catalog;\n\n  const pkg: Record<string, unknown> = {\n    name: \"monorepo\",\n    private: true,\n    type: \"module\",\n    scripts: buildChildRootScripts({\n      ui: has(\"ui\"),\n      api: has(\"api\"),\n      host: has(\"host\"),\n      plugins: has(\"plugins\"),\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  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\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    ignore?: string[];\n  },\n): Promise<void> {\n  const baseIgnore = [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"];\n  const ignore = options.ignore ? [...baseIgnore, ...options.ignore] : baseIgnore;\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,\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\nexport function extractSkillsBlock(content: string): string {\n  const match = content.match(/<!-- intent-skills:start -->[\\s\\S]*?<!-- intent-skills:end -->/);\n  return match ? match[0] : \"\";\n}\n\nfunction buildChildAgentsInstructions(opts: {\n  overrides: OverrideSection[];\n  plugins?: string[];\n}): string {\n  const has = (section: OverrideSection) => opts.overrides.includes(section);\n  const parts: string[] = [];\n\n  parts.push(`# Agent Instructions\n\nThis document provides operational guidance for AI agents working in this everything.dev project.\n\n## Quick Reference\n\n**Start Development:**\n\\`\\`\\`bash\ncp .env.example .env   # First time only\nbun install\nbun run dev\n\\`\\`\\`\n\n**Check Status:**\n\\`\\`\\`bash\nbos ps        # List running processes\nbos status    # Project health check\nbos info      # Show configuration\n\\`\\`\\``);\n\n  const archLines = [\n    \"This is an everything.dev child project. Depending on your overrides, it may include:\",\n  ];\n  if (has(\"ui\"))\n    archLines.push(\"- **UI** — React 19 + TanStack Router frontend, loaded via Module Federation\");\n  if (has(\"api\")) archLines.push(\"- **API** — Hono.js + oRPC backend with Effect services\");\n  if (has(\"host\"))\n    archLines.push(\"- **Host** — Server-side runtime with Module Federation orchestration\");\n  if (has(\"plugins\"))\n    archLines.push(\"- **Plugins** — Self-contained business logic modules with oRPC contracts\");\n  archLines.push(\n    \"\",\n    \"The parent runtime provides the shared framework; your project provides custom overrides.\",\n  );\n  parts.push(`## Architecture\\n\\n${archLines.join(\"\\n\")}`);\n\n  parts.push(`## Development Workflow\n\n### Starting Development\n1. \\`cp .env.example .env\\` (first time)\n2. \\`bun install\\`\n3. \\`bun run dev\\``);\n\n  parts.push(`### Debugging Issues\n\n**API not responding:**\n- Check \\`bos ps\\` to see if the API process is running\n- Check \\`.bos/logs/api.log\\` for errors\n\n**UI not loading:**\n- Verify the dev server is running: \\`bos ps\\`\n- Check browser console for Module Federation errors\n- Clear browser cache and retry\n\n**Type errors:**\n- Run \\`bun run typecheck\\``);\n\n  const changeLines: string[] = [\"### Making Changes\"];\n  if (has(\"ui\"))\n    changeLines.push(\"- **UI Changes**: Edit `ui/src/` files → hot reload automatically\");\n  if (has(\"api\"))\n    changeLines.push(\"- **API Changes**: Edit `api/src/` files → hot reload automatically\");\n  if (has(\"host\"))\n    changeLines.push(\n      \"- **Host Changes**: Edit `host/src/` when changing runtime resolution, auth wiring, SSR, proxying, or plugin mounting\",\n    );\n  changeLines.push(\n    \"- **New Components**: Create in `ui/src/components/ui/`, export from `ui/src/components/index.ts`\",\n  );\n  changeLines.push(\n    \"- **New Routes**: Create file in `ui/src/routes/`, TanStack Router auto-generates tree\",\n  );\n  parts.push(`## Code Changes\\n\\n${changeLines.join(\"\\n\")}`);\n\n  parts.push(`### Style Requirements\n- Use semantic Tailwind classes: \\`bg-background\\`, \\`text-foreground\\`, \\`text-muted-foreground\\`\n- No hardcoded colors like \\`bg-blue-600\\`\n- No code comments in implementation\n- Component file naming: lowercase kebab-case (\\`data-table.tsx\\`, \\`user-profile.tsx\\`)\n- Follow existing patterns in neighboring files`);\n\n  if (has(\"api\")) {\n    parts.push(`### Adding API Endpoints\n1. Define in \\`api/src/contract.ts\\` — the oRPC route definitions and Zod schemas\n2. Implement in \\`api/src/index.ts\\` — the \\`createRouter\\` function\n3. Use in UI via \\`apiClient\\` from \\`useApiClient()\\` in \\`@/app\\``);\n  }\n\n  if (has(\"plugins\")) {\n    parts.push(`### Plugin Architecture\n\nBusiness logic is organized into independent plugins loaded via Module Federation:\n- Each plugin has its own \\`contract.ts\\` — oRPC route definitions and Zod schemas\n- Each plugin has its own \\`index.ts\\` — \\`createPlugin\\` with variables, secrets, context, router\n- Each plugin has its own rspack config for independent deployment\n\nThe UI accesses plugin routes via namespaced clients: \\`apiClient.<plugin>.<method>()\\`.\n\n### Plugin Client (pluginsClient)\n\nThe API plugin receives typed client factories for all other plugins via \\`createPlugin.withPlugins<PluginsClient>()\\`, enabling in-process composition without HTTP roundtrips.\n\n### Generated Types\n\n\\`api/src/lib/plugins-types.gen.ts\\`, \\`api/src/lib/auth-types.gen.ts\\`, \\`ui/src/lib/api-types.gen.ts\\`, and \\`ui/src/lib/auth-types.gen.ts\\` are generated by \\`bos types gen\\` from \\`bos.config.json\\`. These files are gitignored and auto-regenerated on \\`bun install\\`, \\`typecheck\\`, \\`bos dev\\`, \\`bos build\\`, and bos plugin management commands.\n\nIf you hand-edit \\`bos.config.json\\`, run \\`bos types gen\\` or restart \\`bos dev\\` to regenerate.`);\n  }\n\n  const testCommands: string[] = [];\n  if (has(\"api\") || has(\"host\") || has(\"ui\")) {\n    testCommands.push(\"bun run test    # Run all tests\");\n    testCommands.push(\"bun typecheck   # Type check all packages\");\n    testCommands.push(\"bun lint        # Run linting\");\n  }\n  if (testCommands.length > 0) {\n    parts.push(`## Testing & Quality\n\n**Before committing:**\n\\`\\`\\`bash\n${testCommands.join(\"\\n\")}\n\\`\\`\\``);\n  }\n\n  parts.push(`## Common Patterns\n\n### Authentication Check\n\nRoutes requiring auth use \\`_authenticated.tsx\\` layout:\n\\`\\`\\`typescript\nexport const Route = createFileRoute('/_layout/_authenticated')({\n  beforeLoad: async ({ location }) => {\n    const { data: session } = await authClient.getSession();\n    if (!session?.user) {\n      throw redirect({ to: '/login', search: { redirect: location.pathname } });\n    }\n  },\n});\n\\`\\`\\``);\n\n  if (has(\"ui\")) {\n    parts.push(`### API Client Usage\n\\`\\`\\`typescript\nimport { useApiClient } from \"@/app\";\n\nfunction MyComponent() {\n  const apiClient = useApiClient();\n  const { data } = await apiClient.ping();\n}\n\\`\\`\\``);\n  }\n\n  parts.push(`## Troubleshooting\n\n**Process won't start:**\n\\`\\`\\`bash\nbos kill        # Kill all tracked processes\nbun install     # Ensure dependencies\nbun run dev     # Restart\n\\`\\`\\`\n\n**Module Federation errors:**\n- Check \\`bos.config.json\\` URLs are accessible\n- Verify shared dependency versions match in package.json\n- Clear browser cache\n\n**Database issues:**\n\\`\\`\\`bash\nbun run db:push   # Push schema changes\nbun run db:studio # Open Drizzle Studio\n\\`\\`\\`\n\n## Environment\n\n**Required files:**\n- \\`.env\\` — Secrets (see \\`.env.example\\`)\n- \\`bos.config.json\\` — Runtime configuration (committed)`);\n\n  return `${parts.join(\"\\n\\n\")}\\n`;\n}\n\nexport function buildChildAgentsMd(\n  skillsBlock: string,\n  opts: {\n    overrides: OverrideSection[];\n    plugins?: string[];\n  },\n): string {\n  return `${skillsBlock}\\n\\n${buildChildAgentsInstructions(opts)}`;\n}\n\nexport async function personalizeAgentsMd(\n  destination: string,\n  opts: {\n    overrides: OverrideSection[];\n    plugins?: string[];\n  },\n): Promise<void> {\n  const agentsMdPath = join(destination, \"AGENTS.md\");\n  if (!existsSync(agentsMdPath)) return;\n\n  const content = readFileSync(agentsMdPath, \"utf-8\");\n  const skillsBlock = extractSkillsBlock(content);\n  if (!skillsBlock) return;\n\n  const childContent = buildChildAgentsMd(skillsBlock, opts);\n  writeFileSync(agentsMdPath, childContent);\n}\n\nfunction generateGitignore(): string {\n  return `node_modules/\ndist/\n.env\n.bos/\ndocker-compose.yml\n*.gen.ts\n*.gen.tsx\n`;\n}\n"],"mappings":"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"}