everything-dev 2.0.0-rc.1 → 2.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/api-contract.cjs +3 -6
  2. package/dist/api-contract.cjs.map +1 -1
  3. package/dist/api-contract.mjs +3 -6
  4. package/dist/api-contract.mjs.map +1 -1
  5. package/dist/apps/upload/src/client.cjs +188 -0
  6. package/dist/apps/upload/src/client.cjs.map +1 -0
  7. package/dist/apps/upload/src/client.mjs +180 -0
  8. package/dist/apps/upload/src/client.mjs.map +1 -0
  9. package/dist/auth-login.cjs +1 -1
  10. package/dist/auth-login.mjs +1 -1
  11. package/dist/build.cjs +2 -2
  12. package/dist/build.mjs +2 -2
  13. package/dist/bundle-fs-resolve.cjs +9 -17
  14. package/dist/bundle-fs-resolve.cjs.map +1 -1
  15. package/dist/bundle-fs-resolve.d.cts +6 -0
  16. package/dist/bundle-fs-resolve.d.mts +6 -0
  17. package/dist/bundle-fs-resolve.mjs +9 -17
  18. package/dist/bundle-fs-resolve.mjs.map +1 -1
  19. package/dist/bundle-path.cjs +48 -0
  20. package/dist/bundle-path.cjs.map +1 -0
  21. package/dist/bundle-path.mjs +45 -0
  22. package/dist/bundle-path.mjs.map +1 -0
  23. package/dist/cdn-deploy.cjs +29 -11
  24. package/dist/cdn-deploy.cjs.map +1 -1
  25. package/dist/cdn-deploy.mjs +29 -11
  26. package/dist/cdn-deploy.mjs.map +1 -1
  27. package/dist/cli/init.cjs +4 -6
  28. package/dist/cli/init.cjs.map +1 -1
  29. package/dist/cli/init.d.cts +1 -1
  30. package/dist/cli/init.d.mts +1 -1
  31. package/dist/cli/init.mjs +4 -6
  32. package/dist/cli/init.mjs.map +1 -1
  33. package/dist/cli/status.cjs +69 -3
  34. package/dist/cli/status.cjs.map +1 -1
  35. package/dist/cli/status.mjs +67 -4
  36. package/dist/cli/status.mjs.map +1 -1
  37. package/dist/cli/sync.cjs +1 -2
  38. package/dist/cli/sync.cjs.map +1 -1
  39. package/dist/cli/sync.mjs +1 -2
  40. package/dist/cli/sync.mjs.map +1 -1
  41. package/dist/cli/upgrade.cjs +2 -2
  42. package/dist/cli/upgrade.cjs.map +1 -1
  43. package/dist/cli/upgrade.mjs +2 -2
  44. package/dist/cli/upgrade.mjs.map +1 -1
  45. package/dist/cli.cjs +5 -7
  46. package/dist/cli.cjs.map +1 -1
  47. package/dist/cli.mjs +5 -7
  48. package/dist/cli.mjs.map +1 -1
  49. package/dist/commands/deploy.cjs +26 -18
  50. package/dist/commands/deploy.cjs.map +1 -1
  51. package/dist/commands/deploy.mjs +26 -18
  52. package/dist/commands/deploy.mjs.map +1 -1
  53. package/dist/commands/init.cjs +1 -1
  54. package/dist/commands/init.cjs.map +1 -1
  55. package/dist/commands/init.mjs +1 -1
  56. package/dist/commands/init.mjs.map +1 -1
  57. package/dist/commands/plugins.cjs +2 -2
  58. package/dist/commands/plugins.cjs.map +1 -1
  59. package/dist/commands/plugins.mjs +2 -2
  60. package/dist/commands/plugins.mjs.map +1 -1
  61. package/dist/commands/upgrade.cjs +31 -8
  62. package/dist/commands/upgrade.cjs.map +1 -1
  63. package/dist/commands/upgrade.mjs +31 -8
  64. package/dist/commands/upgrade.mjs.map +1 -1
  65. package/dist/components/dev-render.cjs +1 -1
  66. package/dist/components/dev-render.mjs +1 -1
  67. package/dist/config.cjs +3 -3
  68. package/dist/config.cjs.map +1 -1
  69. package/dist/config.mjs +3 -3
  70. package/dist/config.mjs.map +1 -1
  71. package/dist/contract.cjs +2 -0
  72. package/dist/contract.cjs.map +1 -1
  73. package/dist/contract.d.cts +3 -0
  74. package/dist/contract.d.mts +3 -0
  75. package/dist/contract.meta.cjs +2 -1
  76. package/dist/contract.meta.cjs.map +1 -1
  77. package/dist/contract.meta.d.cts +4 -1
  78. package/dist/contract.meta.d.mts +4 -1
  79. package/dist/contract.meta.mjs +2 -1
  80. package/dist/contract.meta.mjs.map +1 -1
  81. package/dist/contract.mjs +2 -0
  82. package/dist/contract.mjs.map +1 -1
  83. package/dist/db/driver.cjs +22 -2
  84. package/dist/db/driver.cjs.map +1 -1
  85. package/dist/db/driver.d.cts +13 -2
  86. package/dist/db/driver.d.mts +13 -2
  87. package/dist/db/driver.mjs +22 -3
  88. package/dist/db/driver.mjs.map +1 -1
  89. package/dist/db/index.cjs +1 -0
  90. package/dist/db/index.d.cts +2 -2
  91. package/dist/db/index.d.mts +2 -2
  92. package/dist/db/index.mjs +2 -2
  93. package/dist/deploy-diff.cjs +1 -1
  94. package/dist/deploy-diff.cjs.map +1 -1
  95. package/dist/deploy-diff.mjs +1 -1
  96. package/dist/deploy-diff.mjs.map +1 -1
  97. package/dist/dev-program.cjs +11 -2
  98. package/dist/dev-program.cjs.map +1 -1
  99. package/dist/dev-program.mjs +11 -3
  100. package/dist/dev-program.mjs.map +1 -1
  101. package/dist/image-deploy.cjs +103 -31
  102. package/dist/image-deploy.cjs.map +1 -1
  103. package/dist/image-deploy.mjs +103 -33
  104. package/dist/image-deploy.mjs.map +1 -1
  105. package/dist/internal/manifest-normalizer.cjs.map +1 -1
  106. package/dist/internal/manifest-normalizer.mjs.map +1 -1
  107. package/dist/plugin.d.cts +902 -1
  108. package/dist/plugin.d.mts +902 -1
  109. package/dist/publish.cjs +51 -2
  110. package/dist/publish.cjs.map +1 -1
  111. package/dist/publish.mjs +51 -4
  112. package/dist/publish.mjs.map +1 -1
  113. package/dist/resolution/session.cjs.map +1 -1
  114. package/dist/resolution/session.d.cts +5 -5
  115. package/dist/resolution/session.d.mts +5 -5
  116. package/dist/resolution/session.mjs.map +1 -1
  117. package/dist/storage-upload.cjs +7 -68
  118. package/dist/storage-upload.cjs.map +1 -1
  119. package/dist/storage-upload.mjs +7 -68
  120. package/dist/storage-upload.mjs.map +1 -1
  121. package/dist/types.d.cts +31 -1
  122. package/dist/types.d.mts +31 -1
  123. package/dist/ui/api.cjs +11 -69
  124. package/dist/ui/api.cjs.map +1 -1
  125. package/dist/ui/api.d.cts +2 -4
  126. package/dist/ui/api.d.mts +2 -4
  127. package/dist/ui/api.mjs +11 -69
  128. package/dist/ui/api.mjs.map +1 -1
  129. package/dist/ui/auth-guards.d.cts +78 -2
  130. package/dist/ui/auth-guards.d.mts +78 -2
  131. package/dist/ui/auth.cjs.map +1 -1
  132. package/dist/ui/auth.d.cts +4133 -7
  133. package/dist/ui/auth.d.mts +4133 -7
  134. package/dist/ui/auth.mjs.map +1 -1
  135. package/dist/ui/hydrate.cjs +2 -2
  136. package/dist/ui/hydrate.cjs.map +1 -1
  137. package/dist/ui/hydrate.mjs +2 -2
  138. package/dist/ui/hydrate.mjs.map +1 -1
  139. package/dist/utils/theme.cjs +2 -2
  140. package/dist/utils/theme.cjs.map +1 -1
  141. package/dist/utils/theme.mjs +2 -2
  142. package/dist/utils/theme.mjs.map +1 -1
  143. package/dist/version-manifest-resolve.cjs +55 -10
  144. package/dist/version-manifest-resolve.cjs.map +1 -1
  145. package/dist/version-manifest-resolve.mjs +53 -10
  146. package/dist/version-manifest-resolve.mjs.map +1 -1
  147. package/dist/workspace.cjs +26 -13
  148. package/dist/workspace.cjs.map +1 -1
  149. package/dist/workspace.mjs +26 -14
  150. package/dist/workspace.mjs.map +1 -1
  151. package/package.json +12 -10
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":["bosPlugin"],"sources":["../src/cli.ts"],"sourcesContent":["import { existsSync, watch } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { installBundleFetchFromEnv } from \"./bundle-fs-resolve\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { resolveFrameworkPackage } from \"./cli/framework-version\";\nimport { printHelp } from \"./cli/help\";\nimport { runDockerComposeUp } from \"./cli/init\";\nimport { parseCommandInput } from \"./cli/parse\";\nimport { promptInitBasic, promptInitOverrides } from \"./cli/prompts\";\nimport { formatDuration, sumPhaseDurations } from \"./cli/timing\";\nimport { fetchInitParent } from \"./commands/init\";\nimport { findConfigPath, MISSING_CONFIG_MESSAGE, readAuthoredConfigInput } from \"./config\";\nimport type {\n DevOptions,\n DevResult,\n InitOptions,\n InitResult,\n KeyPublishOptions,\n KillOptions,\n KillResult,\n LogsOptions,\n LogsResult,\n OverrideSection,\n PsResult,\n StartOptions,\n StartResult,\n TypecheckWorkspaceResult,\n} from \"./contract\";\nimport type { StartSummary } from \"./dev-program\";\nimport { getRegistryNamespaceForAccount } from \"./fastkv\";\nimport { listPublishKeys } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport bosPlugin from \"./plugin\";\nimport { type ProgressEvent, pluginEvents } from \"./progress\";\nimport { createPluginRuntime } from \"./sdk\";\nimport { printBanner } from \"./utils/banner\";\nimport { colors, frames, gradients, icons } from \"./utils/theme\";\n\nfunction printConfigView(result: {\n account: string;\n domain?: string;\n staging?: { domain: string };\n app?: {\n host: { name?: string; development: string; production?: string };\n ui: { name?: string; development?: string; production?: string; ssr?: string };\n api: { name?: string; development?: string; production?: string; proxy?: string };\n };\n}) {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"CONFIG\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n\n console.log(` ${colors.dim(\"Account\")} ${colors.cyan(result.account)}`);\n console.log(` ${colors.dim(\"Domain\")} ${colors.white(result.domain ?? \"not configured\")}`);\n if (result.staging) {\n console.log(` ${colors.dim(\"Staging\")} ${colors.magenta(result.staging.domain)}`);\n }\n console.log();\n}\n\nfunction formatTimeAgo(isoTimestamp: string): string {\n const now = Date.now();\n const then = new Date(isoTimestamp).getTime();\n const diffMs = now - then;\n const diffMins = Math.floor(diffMs / 60_000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n return isoTimestamp.split(\"T\")[0] ?? isoTimestamp;\n}\n\nfunction normalizeVersion(v: string): string {\n return v.replace(/^[\\^~>=v]+/, \"\").trim();\n}\n\nconst RETIRED_BOOTSTRAP_STUBS = [\n \"ui/src/entry.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/router.server.tsx\",\n \"ui/src/compose.ts\",\n];\n\n/**\n * Hand-modified bootstrap stubs retire as conflicted (backed up, then\n * deleted) — print the mechanical port into the authored seams (ADR 0023).\n */\nfunction printStubMigrationGuide(retiredConflicted: string[] | undefined) {\n const handModified = (retiredConflicted ?? []).filter((f) => RETIRED_BOOTSTRAP_STUBS.includes(f));\n if (handModified.length === 0) return;\n console.log(` ${colors.yellow(\"Port your stub customizations into the authored seams:\")}`);\n console.log(\n ` ${colors.dim(\"- defaultErrorComponent / defaultPendingComponent / defaultNotFoundComponent\")}`,\n );\n console.log(\n ` ${colors.dim(\" → set them inside the createRouter factory in ui/src/router.tsx (after ...opts)\")}`,\n );\n console.log(\n ` ${colors.dim(\"- apiConnectionError copy + SSR locale config (locales, defaultLocale, cookieName)\")}`,\n );\n console.log(\n ` ${colors.dim(\" → export apiConnectionError / appLocale from ui/src/app.ts (see the scaffold template)\")}`,\n );\n console.log(` ${colors.dim(\" backed-up originals: .bos/sync-backup/<timestamp>/\")}`);\n}\n\nfunction printTimingSummary(timings: Array<{ name: string; durationMs: number }> | undefined) {\n if (!timings || timings.length === 0) return;\n\n console.log(` ${colors.dim(\"Timings:\")}`);\n for (const timing of timings) {\n console.log(` ${colors.dim(timing.name.padEnd(22))} ${formatDuration(timing.durationMs)}`);\n }\n console.log(\n ` ${colors.dim(\"total\".padEnd(22))} ${formatDuration(sumPhaseDurations(timings))}`,\n );\n}\n\nfunction printStartSummary(summary: StartSummary) {\n console.log();\n console.log(` ${colors.dim(\"Config Source:\")} ${summary.configSource}`);\n if (summary.configSourceHttp) {\n console.log(` ${colors.dim(summary.configSourceHttp)}`);\n }\n console.log(` ${colors.dim(\"Account:\")} ${summary.account}`);\n console.log(` ${colors.dim(\"Domain:\")} ${summary.domain ?? \"not configured\"}`);\n console.log();\n console.log(` ${colors.dim(\"Modules:\")}`);\n console.log(` ${colors.dim(\"HOST\")} → ${summary.modules.host ?? \"local\"}`);\n console.log(` ${colors.dim(\"UI\")} → ${summary.modules.ui ?? \"local\"}`);\n console.log(` ${colors.dim(\"API\")} → ${summary.modules.api ?? \"local\"}`);\n if (summary.modules.auth) {\n console.log(` ${colors.dim(\"AUTH\")} → ${summary.modules.auth}`);\n }\n if (summary.warnings.length > 0) {\n console.log();\n for (const w of summary.warnings) {\n console.log(` ${colors.yellow(w)}`);\n }\n }\n console.log();\n}\n\nfunction clearSpinnerStopLine() {\n if (!process.stdout.isTTY) return;\n process.stdout.write(\"\\u001B[1A\\u001B[2K\\u001B[1G\");\n}\n\nasync function warnIfOutdated(client: any, command: string): Promise<void> {\n if (![\"dev\", \"build\", \"start\"].includes(command)) return;\n\n try {\n const status = await client.status();\n if (status.status === \"error\" || !status.packages) return;\n\n const frameworkPackages = [\"everything-dev\", \"every-plugin\"];\n\n const linked = status.packages.filter((p: { isLinked?: boolean }) => p.isLinked);\n const outdated = status.packages.filter(\n (p: { name: string; installed?: string; latest?: string; isLinked?: boolean }) =>\n !p.isLinked &&\n p.installed &&\n p.latest &&\n normalizeVersion(p.installed) !== normalizeVersion(p.latest) &&\n frameworkPackages.includes(p.name),\n );\n\n if (linked.length > 0) {\n for (const pkg of linked) {\n console.log(colors.dim(` ${pkg.name} is linked locally (v${pkg.installed})`));\n }\n }\n\n if (outdated.length === 0) return;\n\n const warn = (line: string) => {\n if (command === \"dev\" || command === \"start\") process.stderr.write(`${line}\\n`);\n else console.log(line);\n };\n warn(\"\");\n warn(colors.yellow(` ! Outdated packages detected:`));\n for (const pkg of outdated) {\n warn(colors.dim(` ${pkg.name} ${pkg.installed} → ${pkg.latest}`));\n }\n warn(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n warn(\"\");\n } catch {\n // silently ignore if status check fails\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n const invocationArgs = args.length > 0 ? args : [\"dev\"];\n const command = invocationArgs[0] ?? \"dev\";\n\n const commandMatch = findCommandDescriptor(invocationArgs);\n if (!commandMatch) {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n\n const { descriptor, consumed } = commandMatch;\n const commandArgs = invocationArgs.slice(consumed);\n\n // Parse before the plugin boot: `start --config-path` steers the whole CLI,\n // not just the stack — the plugin initialize resolves and pin-validates the\n // boot config, so it must be the config the command will actually run.\n let parsedInput: unknown;\n try {\n parsedInput = parseCommandInput(descriptor, commandArgs);\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n const bootInput = parsedInput as { configPath?: string };\n\n const cwdConfigPath = findConfigPath();\n const configPath = bootInput.configPath ?? cwdConfigPath;\n installBundleFetchFromEnv({ configPath });\n\n const projectDir = cwdConfigPath ? dirname(cwdConfigPath) : undefined;\n const edResolved = projectDir ? resolveFrameworkPackage(projectDir, \"everything-dev\") : undefined;\n const displayVersion = edResolved?.installedVersion\n ? `${edResolved.installedVersion}${edResolved.isLinked ? \" (linked)\" : \"\"}`\n : undefined;\n if (!process.env.BOS_NO_BANNER) {\n printBanner(\"everything-dev\", displayVersion);\n }\n\n const runtime = createPluginRuntime({\n registry: {\n bos: { module: bosPlugin },\n },\n secrets: {},\n });\n\n const pluginRuntime: any = runtime;\n const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n const plugin = await loadPlugin(\"bos\", {\n variables: {\n configPath: configPath ?? undefined,\n configDir: cwdConfigPath ? dirname(cwdConfigPath) : undefined,\n },\n secrets: {},\n });\n\n const client = plugin.createClient();\n\n const outdatedWarning = warnIfOutdated(client, command);\n\n try {\n const input = parsedInput;\n\n const rollbackInput = input as {\n listOnly?: boolean;\n version?: string;\n previous?: boolean;\n [key: string]: unknown;\n };\n if (\n descriptor.key === \"rollback\" &&\n !rollbackInput.listOnly &&\n !rollbackInput.version &&\n !rollbackInput.previous\n ) {\n const listing = await (client as any).rollback({ ...rollbackInput, listOnly: true });\n if (listing.status !== \"list\" || !listing.history?.length) {\n console.error(listing.error ?? \"No publish history found\");\n process.exit(1);\n }\n console.log();\n const selection = await p.select({\n message: \"Roll back to which publish?\",\n options: listing.history.map(\n (entry: {\n blockHeight: number;\n blockTimestamp: string;\n txHash?: string;\n summary: string;\n }) => ({\n value: String(entry.blockHeight),\n label: `${entry.blockTimestamp} (block ${entry.blockHeight})`,\n hint: entry.summary,\n }),\n ),\n });\n if (p.isCancel(selection)) {\n return;\n }\n rollbackInput.version = selection as string;\n }\n\n if (descriptor.key === \"keyPublish\") {\n const keyPublishInput = input as KeyPublishOptions;\n if (keyPublishInput.removeOldKeys === undefined) {\n if (process.stdin.isTTY) {\n const authored = configPath ? await readAuthoredConfigInput(dirname(configPath)) : null;\n const account =\n keyPublishInput.env === \"staging\"\n ? (authored?.staging?.account ?? authored?.account)\n : authored?.account;\n let listed: string[] | null = null;\n if (account) {\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account, keyPublishInput.registry);\n try {\n listed = await listPublishKeys({ account, contract, network });\n } catch {\n listed = null;\n }\n }\n if (listed?.length) {\n const removeOldKeys = await p.confirm({\n message: `Remove ${listed.length} existing publish key${listed.length > 1 ? \"s\" : \"\"}?`,\n initialValue: true,\n });\n if (p.isCancel(removeOldKeys)) {\n return;\n }\n keyPublishInput.removeOldKeys = removeOldKeys;\n } else {\n keyPublishInput.removeOldKeys = true;\n }\n } else {\n keyPublishInput.removeOldKeys = true;\n }\n }\n }\n\n if (descriptor.key === \"dev\") {\n const devSpinner = p.spinner();\n devSpinner.start(\"Starting dev environment\");\n\n const devPhaseLabels: Record<string, string> = {\n \"shared deps\": \"Preparing config...\",\n install: \"Installing dependencies...\",\n build: \"Building...\",\n \"resolve config\": \"Resolving config...\",\n ports: \"Finding available ports...\",\n \"docker compose up\": \"Starting local Postgres...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onDevProgress = (event: ProgressEvent) => {\n const label = devPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n devSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onDevProgress);\n\n let result: DevResult;\n try {\n result = await client.dev(input as DevOptions);\n } finally {\n pluginEvents.off(\"progress\", onDevProgress);\n }\n\n if (result.status === \"error\") {\n devSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.description}`);\n process.exit(1);\n }\n\n devSpinner.stop();\n clearSpinnerStopLine();\n\n const session = result.session;\n void outdatedWarning;\n if (session) {\n const { devApp } = await import(\"./dev-session\");\n devApp(\n projectDir ?? process.cwd(),\n session.orchestrator,\n session.services,\n session.runtimeConfig,\n session.envGenerated,\n session.shellEnv,\n );\n }\n return;\n }\n\n if (descriptor.key === \"start\") {\n const startSpinner = p.spinner();\n startSpinner.start(\"Starting production environment\");\n\n const startPhaseLabels: Record<string, string> = {\n config: \"Preparing config...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onStartProgress = (event: ProgressEvent) => {\n const label = startPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n startSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onStartProgress);\n\n let result: StartResult;\n try {\n result = await client.start(input as StartOptions);\n } finally {\n pluginEvents.off(\"progress\", onStartProgress);\n }\n\n if (result.status === \"error\") {\n startSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n startSpinner.stop(\"Ready\");\n\n const session = result.session;\n const summary = result.summary;\n void outdatedWarning;\n if (session) {\n if (summary) {\n printStartSummary(summary);\n }\n const { startApp } = await import(\"./dev-session\");\n startApp(\n projectDir ?? process.cwd(),\n session.orchestrator,\n session.services,\n session.runtimeConfig,\n session.envGenerated,\n session.shellEnv,\n );\n }\n return;\n }\n\n if (descriptor.key === \"init\") {\n let initInput: InitOptions = { ...(input as InitOptions) };\n\n if (!initInput.noInteractive) {\n const basic = await promptInitBasic({\n extends: initInput.extends,\n account: initInput.account,\n domain: initInput.domain,\n });\n\n let parentPluginKeys: string[] = [];\n let parentConfig: {\n title?: string;\n description?: string;\n plugins?: Record<string, unknown>;\n } | null = null;\n\n const fetchSpinner = p.spinner();\n fetchSpinner.start(\"Fetching parent config\");\n try {\n const parent = await fetchInitParent(basic.extendsAccount, basic.extendsGateway);\n parentConfig = parent.parentConfig;\n parentPluginKeys = parent.parentPluginKeys;\n } catch {\n fetchSpinner.stop(\"Config not found\");\n console.error(\n `[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n );\n process.exit(1);\n }\n fetchSpinner.stop(\"Config fetched\");\n\n if (\n typeof parentConfig?.title === \"string\" &&\n parentConfig.title.trim() &&\n typeof parentConfig?.description === \"string\" &&\n parentConfig.description.trim()\n ) {\n const shouldContinue = await p.confirm({\n message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n process.exit(0);\n }\n }\n\n const overrides = await promptInitOverrides({\n parentPluginKeys,\n plugins: initInput.plugins,\n overrides: initInput.overrides as OverrideSection[] | undefined,\n level: initInput.level,\n });\n\n const directory = initInput.directory || basic.domain || basic.extendsGateway;\n\n initInput = {\n ...initInput,\n extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n directory,\n account: basic.account,\n domain: basic.domain || undefined,\n plugins: overrides.plugins,\n overrides: overrides.overrides,\n level: overrides.level ?? initInput.level,\n noInteractive: true,\n };\n }\n\n const initSpinner = p.spinner();\n initSpinner.start(\"Initializing project\");\n\n const phaseLabels: Record<string, string> = {\n \"parent config\": \"Fetching parent config...\",\n \"template source\": \"Resolving template source...\",\n \"scaffold project\": \"Creating project scaffold...\",\n \"copy files\": \"Copying template files...\",\n \"personalize config\": \"Personalizing config...\",\n \"write snapshot\": \"Writing snapshot...\",\n \"resolve config\": \"Resolving config...\",\n \"generate env/docker\": \"Generating environment config...\",\n \"create env file\": \"Creating .env file...\",\n \"install dependencies\": \"Installing dependencies...\",\n \"generate types\": \"Generating types...\",\n \"generate migrations\": \"Generating database migrations...\",\n \"generate code artifacts\": \"Generating code artifacts...\",\n };\n\n const onProgress = (event: ProgressEvent) => {\n const label = phaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n initSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onProgress);\n\n let result: InitResult;\n try {\n result = await client.init(initInput);\n } finally {\n pluginEvents.off(\"progress\", onProgress);\n }\n\n if (result.status === \"error\") {\n initSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n initSpinner.stop(\"Project initialized\");\n\n console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n console.log(` ${colors.dim(\"Directory:\")} ${result.directory}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n if (result.overrides && result.overrides.length > 0)\n console.log(` ${colors.dim(\"Overrides:\")} ${result.overrides.join(\", \")}`);\n if (result.plugins && result.plugins.length > 0)\n console.log(` ${colors.dim(\"Plugins:\")} ${result.plugins.join(\", \")}`);\n console.log(` ${colors.dim(\"Files copied:\")} ${result.filesCopied}`);\n printTimingSummary(result.timings);\n console.log();\n console.log(colors.dim(\" Next steps:\"));\n console.log(colors.dim(` cd ${result.directory}`));\n if (!initInput.noInstall) {\n console.log(colors.dim(\" pnpm run dev\"));\n } else {\n console.log(colors.dim(\" pnpm install\"));\n console.log(colors.dim(\" pnpm run dev\"));\n }\n console.log();\n\n if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) {\n const shouldStartDocker = await p.confirm({\n message: \"Run docker compose up -d --wait?\",\n initialValue: true,\n });\n\n if (shouldStartDocker === true) {\n const dockerSpinner = p.spinner();\n dockerSpinner.start(\"Starting Docker services\");\n const compose = await runDockerComposeUp(result.targetDir);\n if (compose.ok) {\n dockerSpinner.stop(\"Docker services ready\");\n } else {\n dockerSpinner.stop(\"Docker services not started\");\n p.log.warn(\n `docker compose up -d --wait failed${compose.tail ? `:\\n${compose.tail}` : \"\"}`,\n );\n }\n }\n }\n\n return;\n }\n\n const result = await (client as any)[descriptor.key](input);\n\n if (descriptor.key === \"dbStudio\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n return;\n }\n\n if (descriptor.key === \"dbDoctor\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Diagnosis failed\"}`);\n process.exit(1);\n }\n\n const statusIcon = (() => {\n switch (result.diagnosis) {\n case \"healthy\":\n return \"✓\";\n case \"empty\":\n return \"○\";\n case \"unapplied\":\n return \"○\";\n case \"untracked-existing-schema\":\n return \"○\";\n case \"drift-safe-repair\":\n return \"⚠\";\n case \"drift-manual\":\n return \"✗\";\n default:\n return \"?\";\n }\n })();\n\n console.log(`\\n${statusIcon} ${result.plugin}`);\n console.log(` ${colors.dim(`Journal:`)} ${result.journalSchema}.${result.journalTable}`);\n console.log(` ${colors.dim(`Local migrations:`)} ${result.localMigrationCount}`);\n console.log(` ${colors.dim(`Applied hashes:`)} ${result.appliedHashCount}`);\n if (result.expectedTables.length > 0) {\n console.log(` ${colors.dim(`Expected tables:`)} ${result.expectedTables.join(\", \")}`);\n }\n if (result.missingTables.length > 0) {\n console.log(` ${colors.yellow(`Missing tables:`)} ${result.missingTables.join(\", \")}`);\n }\n console.log(` ${colors.dim(`Diagnosis:`)} ${result.diagnosis}`);\n if (result.workspaceDir) {\n console.log(` ${colors.dim(`Workspace:`)} ${result.workspaceDir}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"dbRepair\") {\n if (result.status === \"refused\") {\n console.log(\n `\\n${colors.yellow(\"!\")} Repair refused for ${result.diagnosis?.plugin ?? result.message}`,\n );\n console.log(` ${result.message}`);\n console.log();\n process.exit(0);\n }\n\n if (result.status === \"error\") {\n console.error(`\\n${colors.error(\"✗\")} Repair failed`);\n console.error(` ${result.message}`);\n console.error();\n process.exit(1);\n }\n\n console.log(`\\n${colors.green(\"✓\")} Repair complete`);\n console.log(` ${result.message}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"config\") {\n if (!result.config) {\n console.error(MISSING_CONFIG_MESSAGE);\n process.exit(1);\n }\n\n printConfigView(result.config);\n process.stdout.write(`${JSON.stringify(result.config, null, 2)}\\n`);\n return;\n }\n\n if (descriptor.key === \"sync\") {\n if ((input as any).json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no files written`));\n } else {\n console.log(colors.green(`${icons.ok} Synced`));\n }\n const hasRetirement =\n (result.retired?.length ?? 0) > 0 || (result.retiredConflicted?.length ?? 0) > 0;\n if (\n result.updated.length > 0 ||\n result.added.length > 0 ||\n result.conflicted.length > 0 ||\n hasRetirement\n ) {\n console.log(\n ` ${colors.dim(\"Sync results:\")} ${result.updated.length} updated, ${result.added.length} added, ${result.conflicted.length} conflicted`,\n );\n if (result.updated.length > 0) {\n for (const f of result.updated) console.log(` ${colors.dim(f)}`);\n }\n if (result.added.length > 0) {\n for (const f of result.added) console.log(` ${colors.dim(f)}`);\n }\n if (result.conflicted.length > 0) {\n console.log(\n ` ${colors.yellow(\"Conflicted\")} (template applied, your changes backed up):`,\n );\n if (result.backupDir) console.log(` ${colors.dim(result.backupDir)}`);\n for (const f of result.conflicted) console.log(` ${colors.dim(f)}`);\n }\n if (hasRetirement) {\n console.log(` ${colors.yellow(\"Retired\")} (replaced by generated stubs — ADR 0023):`);\n if (result.retiredBackupDir) console.log(` ${colors.dim(result.retiredBackupDir)}`);\n for (const f of result.retiredConflicted ?? []) {\n console.log(` ${colors.dim(`${f} (backed up)`)}`);\n }\n for (const f of result.retired ?? []) console.log(` ${colors.dim(f)}`);\n printStubMigrationGuide(result.retiredConflicted);\n }\n }\n if (\n result.updated.length === 0 &&\n result.added.length === 0 &&\n result.conflicted.length === 0 &&\n !hasRetirement\n ) {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"upgrade\") {\n if ((input as any).json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no changes applied`));\n } else {\n console.log(colors.green(`${icons.ok} Upgrade complete`));\n }\n const mainPkg = result.packages.find(\n (p: { name: string; from?: string; to: string }) => p.name === \"everything-dev\",\n );\n const versionDelta =\n mainPkg?.from && mainPkg.from !== mainPkg.to ? `${mainPkg.from} → ${mainPkg.to}` : null;\n if (versionDelta) {\n console.log(` ${colors.dim(`Upgraded everything-dev ${versionDelta}`)}`);\n }\n for (const pkg of result.packages) {\n if (pkg.name === \"everything-dev\") continue;\n if (pkg.from && pkg.from !== pkg.to) {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.from} → ${pkg.to}`)}`);\n } else if (!pkg.from) {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.to} (new)`)}`);\n } else {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.to} (up to date)`)}`);\n }\n }\n if (result.changelogUrl) {\n console.log(` Changelog: ${result.changelogUrl}`);\n }\n if (result.selectedPlugins && result.selectedPlugins.length > 0) {\n console.log(` Added plugins: ${result.selectedPlugins.join(\", \")}`);\n }\n if (result.sync) {\n const sync = result.sync;\n const hasRetirement =\n (sync.retired?.length ?? 0) > 0 || (sync.retiredConflicted?.length ?? 0) > 0;\n console.log(` ${colors.dim(\"Sync results:\")}`);\n if (\n sync.updated.length > 0 ||\n sync.added.length > 0 ||\n sync.conflicted.length > 0 ||\n hasRetirement\n ) {\n console.log(\n ` ${sync.updated.length} updated, ${sync.added.length} added, ${sync.conflicted.length} conflicted`,\n );\n if (sync.conflicted.length > 0) {\n console.log(\n ` ${colors.yellow(\"Conflicted\")} (template applied, your changes backed up):`,\n );\n if (sync.backupDir) console.log(` ${colors.dim(sync.backupDir)}`);\n for (const f of sync.conflicted) console.log(` ${colors.dim(f)}`);\n }\n if (hasRetirement) {\n console.log(` ${colors.yellow(\"Retired\")} (replaced by generated stubs — ADR 0023):`);\n if (sync.retiredBackupDir) console.log(` ${colors.dim(sync.retiredBackupDir)}`);\n for (const f of sync.retiredConflicted ?? []) {\n console.log(` ${colors.dim(`${f} (backed up)`)}`);\n }\n for (const f of sync.retired ?? []) console.log(` ${colors.dim(f)}`);\n printStubMigrationGuide(sync.retiredConflicted);\n }\n } else {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n }\n if (result.migrated && result.migrated.length > 0) {\n console.log(` Migrated: ${result.migrated.length} file(s)`);\n for (const f of result.migrated) console.log(` ${colors.dim(f)}`);\n }\n if (versionDelta || (result.sync && result.sync.conflicted.length > 0)) {\n console.log();\n console.log(colors.dim(\" For AI agents:\"));\n const parentRepo = \"nearbuilders/everything-dev\";\n const somedelta =\n mainPkg?.from && mainPkg.to\n ? `v${mainPkg.from.replace(/^[\\^~>=v]+/, \"\")}...v${mainPkg.to.replace(/^[\\^~>=v]+/, \"\")}`\n : \"\";\n console.log(\n colors.dim(\n ` This upgrade applied template changes${somedelta ? ` (${somedelta})` : \"\"}.`,\n ),\n );\n if (result.sync && result.sync.conflicted.length > 0) {\n console.log(\n colors.dim(\n ` ${result.sync.conflicted.length} file(s) had local conflicts — template version applied, backups at ${result.sync.backupDir || \".bos/sync-backup/\"}.`,\n ),\n );\n console.log(\n colors.dim(\n ` If local changes should be preserved upstream, open a PR: https://github.com/${parentRepo}${somedelta ? `/compare/${somedelta}` : \"\"}`,\n ),\n );\n }\n console.log(\n colors.dim(\n \" Load matching intent skills: pnpm dlx @tanstack/intent@latest load everything-dev#...\",\n ),\n );\n console.log(colors.dim(\" Review AGENTS.md — local updates may need merging.\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"status\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"STATUS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.extends) console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n console.log();\n console.log(` ${colors.dim(\"Packages:\")}`);\n for (const pkg of result.packages) {\n const hasUpdate =\n pkg.installed &&\n pkg.latest &&\n normalizeVersion(pkg.installed) !== normalizeVersion(pkg.latest);\n const versionStr = hasUpdate\n ? `${pkg.installed} → ${pkg.latest}`\n : pkg.installed || \"not installed\";\n const label = hasUpdate ? colors.yellow(versionStr) : colors.dim(versionStr);\n console.log(` ${colors.dim(`${pkg.name}`)} ${label}`);\n }\n console.log();\n if (result.lastSync) {\n const ago = formatTimeAgo(result.lastSync);\n console.log(` ${colors.dim(\"Last sync:\")} ${ago}`);\n } else {\n console.log(` ${colors.dim(\"Last sync:\")} never`);\n }\n const envLabel =\n result.envFile === \"found\"\n ? colors.green(\"found\")\n : result.envFile === \"example-only\"\n ? colors.yellow(\"missing (only .env.example found)\")\n : colors.error(\"missing\");\n console.log(` ${colors.dim(\".env:\")} ${envLabel}`);\n if (result.parentReachable !== undefined) {\n const parentLabel = result.parentReachable\n ? colors.green(\"reachable\")\n : colors.error(\"unreachable\");\n console.log(` ${colors.dim(\"Parent:\")} ${parentLabel}`);\n }\n const hasUpdates = result.packages.some(\n (p: { installed?: string; latest?: string }) =>\n p.installed && p.latest && normalizeVersion(p.installed) !== normalizeVersion(p.latest),\n );\n if (hasUpdates) {\n console.log();\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"ps\") {\n const psResult = result as PsResult;\n console.log();\n if (psResult.status === \"error\") {\n console.error(`[CLI] ${psResult.error || \"Unknown error\"}`);\n process.exit(1);\n }\n const entries = psResult.entries ?? [];\n if (entries.length === 0) {\n console.log(colors.dim(\" No tracked development processes running.\"));\n console.log();\n console.log(\n colors.dim(` Start one with ${colors.cyan(\"bos dev\")} and it will appear here.`),\n );\n console.log();\n return;\n }\n console.log(colors.cyan(frames.top(60)));\n console.log(` ${icons.app} ${gradients.cyber(\"PROCESSES\")}`);\n console.log(colors.cyan(frames.bottom(60)));\n console.log();\n for (const entry of entries) {\n const ageMs = Date.now() - entry.startedAt;\n const ageStr =\n ageMs < 60_000\n ? `${Math.floor(ageMs / 1000)}s`\n : ageMs < 3_600_000\n ? `${Math.floor(ageMs / 60_000)}m`\n : `${Math.floor(ageMs / 3_600_000)}h`;\n const roleTag =\n entry.role === \"workspace-parent\"\n ? colors.magenta(\"parent\")\n : entry.role === \"workspace-child\"\n ? colors.blue(\"child\")\n : colors.dim(\"dev\");\n console.log(` ${colors.green(`pid ${entry.pid}`)} ${roleTag} ${colors.dim(ageStr)}`);\n console.log(` ${colors.dim(\"dir:\")} ${entry.configDir}`);\n if (entry.parentPid !== undefined) {\n console.log(` ${colors.dim(\"parent:\")} ${entry.parentPid}`);\n }\n const portPairs = Object.entries(entry.ports ?? {})\n .filter(([, p]) => typeof p === \"number\")\n .map(([k, v]) => `${k}=${v}`);\n if (portPairs.length > 0) {\n console.log(` ${colors.dim(\"ports:\")} ${portPairs.join(\" \")}`);\n }\n if (entry.budget) {\n console.log(` ${colors.dim(\"budget:\")} [${entry.budget.min}, ${entry.budget.max}]`);\n }\n console.log(` ${colors.dim(\"desc:\")} ${entry.description}`);\n console.log();\n }\n return;\n }\n\n if (descriptor.key === \"logs\") {\n const logsResult = result as LogsResult;\n const opts = input as LogsOptions;\n for (const line of logsResult.lines) {\n console.log(line);\n }\n if (logsResult.lines.length === 0) {\n console.log(colors.dim(` No matching log lines in ${logsResult.logFile}.`));\n }\n if (opts.follow) {\n if (logsResult.logFile === \"unknown\" || !existsSync(logsResult.logFile)) {\n console.log(colors.dim(\" No log file to follow — nothing was found on disk.\"));\n } else {\n const filter = opts.service;\n let byteOffset = 0;\n for (const line of logsResult.lines) byteOffset += Buffer.byteLength(line, \"utf8\") + 1;\n const followMatch = (line: string): boolean => {\n if (!filter) return true;\n const source = /\\] \\[([^\\]]+)\\] \\[(?:OUT|ERR)\\] /.exec(line)?.[1];\n return source === filter || source === `plugin:${filter}`;\n };\n const watcher = watch(logsResult.logFile, (event) => {\n if (event !== \"change\") return;\n void readFile(logsResult.logFile, \"utf8\")\n .then((text) => {\n const newLines = text\n .slice(byteOffset)\n .split(\"\\n\")\n .filter((line) => line.length > 0 && followMatch(line));\n byteOffset = Buffer.byteLength(text, \"utf8\");\n for (const line of newLines) {\n console.log(line);\n }\n })\n .catch(() => {\n // the followed file was rotated or deleted — stop following\n watcher.close();\n });\n });\n console.log(colors.dim(\" Following — Ctrl+C to stop.\"));\n process.on(\"SIGINT\", () => {\n watcher.close();\n process.exit(0);\n });\n }\n }\n return;\n }\n\n if (descriptor.key === \"kill\") {\n const killResult = result as KillResult;\n console.log();\n if (killResult.status === \"error\") {\n console.error(`[CLI] ${killResult.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (killResult.killed.length > 0) {\n console.log(colors.green(`${icons.ok} Sent ${killResult.killed.length} kill signal(s)`));\n for (const k of killResult.killed) {\n console.log(` ${colors.dim(\"pid\")} ${k.pid} ${colors.dim(k.configDir)}`);\n }\n }\n if (killResult.skipped.length > 0) {\n console.log(colors.yellow(`${icons.err} ${killResult.skipped.length} skipped`));\n for (const s of killResult.skipped) {\n console.log(` ${colors.dim(\"pid\")} ${s.pid} ${colors.dim(s.reason)}`);\n }\n }\n if (killResult.killed.length === 0 && killResult.skipped.length === 0) {\n const opts = input as KillOptions;\n if (opts.all) {\n console.log(colors.dim(\" No tracked processes to kill.\"));\n } else {\n const configPath = findConfigPath();\n const dir = opts.configDir ?? (configPath ? resolve(dirname(configPath)) : process.cwd());\n console.log(colors.dim(` No tracked processes for ${dir}`));\n console.log(colors.dim(` Use ${colors.cyan(\"--all\")} to kill across all directories.`));\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typesGen\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.green(`${icons.ok} Types generated`));\n if (result.generated.length > 0) {\n console.log(` ${colors.dim(\"Written:\")}`);\n for (const f of result.generated) console.log(` ${colors.dim(f)}`);\n }\n if (result.fetched.length > 0 || result.skipped.length > 0 || result.failed.length > 0) {\n console.log(` ${colors.dim(\"Contract sources:\")}`);\n for (const entry of result.fetched) {\n const space = entry.indexOf(\" \");\n const key = space !== -1 ? entry.slice(0, space) : entry;\n const rest = space !== -1 ? entry.slice(space + 1) : \"\";\n const restSpace = rest.indexOf(\" \");\n const detail = restSpace !== -1 ? rest.slice(restSpace + 1) : \"\";\n console.log(\n ` ${key} ${colors.cyan(\"remote\")}${detail ? ` ${colors.dim(detail)}` : \"\"}`,\n );\n }\n for (const entry of result.skipped) {\n const space = entry.indexOf(\" \");\n const key = space !== -1 ? entry.slice(0, space) : entry;\n const rest = space !== -1 ? entry.slice(space + 1) : \"\";\n if (rest === \"no URL resolved\") {\n console.log(` ${key} ${colors.dim(\"no URL resolved\")}`);\n continue;\n }\n const restSpace = rest.indexOf(\" \");\n const detail = restSpace !== -1 ? rest.slice(restSpace + 1) : \"\";\n console.log(` ${key} ${colors.dim(\"local\")}${detail ? ` ${colors.dim(detail)}` : \"\"}`);\n }\n }\n if (result.failed.length > 0) {\n console.log(` ${colors.yellow(\"Failed:\")}`);\n for (const f of result.failed) {\n const colon = f.indexOf(\": \");\n if (colon !== -1) {\n console.log(` ${colors.error(f.slice(0, colon))}${colors.dim(f.slice(colon))}`);\n } else {\n console.log(` ${colors.error(f)}`);\n }\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typecheck\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n const failed = result.results.filter((r: TypecheckWorkspaceResult) => !r.passed);\n const passed = result.results.filter((r: TypecheckWorkspaceResult) => r.passed);\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"TYPECHECK\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n for (const r of result.results) {\n const icon = r.passed ? colors.green(\"✓\") : colors.error(\"✗\");\n console.log(` ${icon} ${r.workspace}`);\n }\n if (result.skipped.length > 0) {\n console.log(` ${colors.dim(`Skipped: ${result.skipped.join(\", \")}`)}`);\n }\n console.log();\n if (failed.length > 0) {\n console.log(` ${colors.error(`${failed.length} failed`)}`);\n for (const f of failed) {\n if (f.error) console.log(` ${colors.dim(f.error)}`);\n }\n console.log();\n process.exit(1);\n }\n console.log(` ${colors.green(`${passed.length} passed`)}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"mfCheck\") {\n console.log();\n console.log(\n ` ${colors.dim(\"Host\")} ${result.hostReachable ? colors.green(\"OK \") : colors.error(\"FAIL\")} ${\n result.hostVersion ?? \"unreachable\"\n }${result.hostReason ? ` (${result.hostReason})` : \"\"}`,\n );\n for (const r of result.remotes) {\n const tag = r.ok ? colors.green(\"OK \") : colors.error(\"FAIL\");\n console.log(\n ` ${colors.dim(r.role.padEnd(10))} ${tag} ${r.url} pluginVersion=${r.pluginVersion ?? \"?\"}${\n r.reason ? ` ↳ ${r.reason}` : \"\"\n }`,\n );\n }\n console.log();\n if (result.status !== \"ok\") {\n console.log(\n colors.error(\n \" mf-compat: ✗ federation manifests NOT compatible — redeploy affected plugin(s) so pluginVersion and shared versions match host\",\n ),\n );\n console.log();\n process.exit(1);\n }\n console.log(colors.green(\" mf-compat: ✓ all federation manifests compatible\"));\n console.log();\n return;\n }\n\n if (result?.status === \"error\" && descriptor.key !== \"publish\" && descriptor.key !== \"deploy\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n if (descriptor.key === \"login\") {\n console.log();\n console.log(colors.green(`${icons.ok} Logged in to ${result.siteUrl}`));\n if (result.accountId) console.log(` ${colors.dim(\"Account:\")} ${result.accountId}`);\n if (result.expiresAt) console.log(` ${colors.dim(\"Expires:\")} ${result.expiresAt}`);\n if (result.warning) console.log(` ${colors.yellow(\"⚠\")} ${result.warning}`);\n if (result.publishKey) {\n console.log(\n ` ${colors.dim(\"Publish key:\")} ${result.publishKey.publicKey} ${colors.dim(\n `(${result.publishKey.network}, exported to ${result.publishKey.exportedTo})`,\n )}`,\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"logout\") {\n console.log();\n console.log(colors.green(`${icons.ok} Logged out`));\n if (result.revokedApiKey) console.log(` ${colors.dim(\"Revoked API key\")}`);\n if (result.removedPublishKey) console.log(` ${colors.dim(\"Removed exported publish key\")}`);\n if (result.warning) console.log(` ${colors.yellow(\"⚠\")} ${result.warning}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"keyPublish\") {\n process.stdout.write(`Generated publish key for ${result.account}\\n`);\n process.stdout.write(` Network: ${result.network}\\n`);\n process.stdout.write(` Allowance: ${result.allowance}\\n`);\n process.stdout.write(`\\n`);\n const secretName = result.env === \"staging\" ? \"NEAR_TESTNET_PRIVATE_KEY\" : \"NEAR_PRIVATE_KEY\";\n if (!process.stdout.isTTY) {\n process.stderr.write(\n ` ⚠ Non-interactive stdout: this private key will be captured in any log or pipe (GitHub Actions logs persist stdout).\\n`,\n );\n }\n process.stdout.write(\n ` Set this as ${secretName} in GitHub Actions or before calling publish:\\n`,\n );\n process.stdout.write(`${secretName}=${result.privateKey}\\n`);\n }\n\n if (descriptor.key === \"pluginAdd\") {\n console.log();\n console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n if (result.development) console.log(` ${colors.dim(\"Development:\")} ${result.development}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginRemove\") {\n console.log();\n console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginList\") {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.plugins.length === 0) {\n console.log(colors.dim(\" No plugins configured\"));\n } else {\n for (const pluginItem of result.plugins) {\n console.log(` ${colors.cyan(pluginItem.key)}`);\n if (pluginItem.development)\n console.log(` ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n if (pluginItem.production)\n console.log(` ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginPublish\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n if (result.path) console.log(` ${colors.dim(\"Path:\")} ${result.path}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n if (result.version) console.log(` ${colors.dim(\"Version:\")} ${result.version}`);\n if (result.fingerprint) console.log(` ${colors.dim(\"Fingerprint:\")} ${result.fingerprint}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"registryUse\") {\n console.log();\n if (result.status === \"error\") {\n console.error(colors.error(`${icons.err} ${result.error || \"Unknown error\"}`));\n process.exit(1);\n }\n console.log(\n colors.green(\n `${icons.ok} ${result.status === \"dry-run\" ? \"Dry run\" : \"Composed\"} from ${result.from}`,\n ),\n );\n for (const section of result.applied) {\n console.log(` ${colors.green(\"+\")} ${section}`);\n }\n if (result.configPath) {\n console.log(` ${colors.dim(\"Config:\")} ${result.configPath}`);\n }\n if (result.status === \"updated\") {\n console.log(colors.dim(\" Run bos types gen to refresh generated types.\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"publish\") {\n if (result.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n console.log();\n return;\n }\n\n if (result.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Publish failed`));\n if (result.error) {\n console.log(` ${colors.dim(\"Error:\")} ${result.error}`);\n }\n if (result.deployResults && result.deployResults.length > 0) {\n const failures = result.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (result.status === \"published\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n if (result.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n }\n if (result.built && result.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n }\n if (result.skipped && result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n }\n if (result.deployResults) {\n const warnings = result.deployResults.flatMap((r: any) => r.warnings ?? []);\n if (warnings.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"⚠\")} Build warnings:`);\n for (const w of warnings) {\n console.log(` ${colors.dim(w)}`);\n }\n }\n }\n console.log();\n return;\n }\n }\n\n if (descriptor.key === \"rollback\") {\n const rollbackResult = result as any;\n if (rollbackResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Roll back failed`));\n if (rollbackResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${rollbackResult.error}`);\n }\n if (rollbackResult.verification) {\n console.log();\n for (const check of rollbackResult.verification) {\n const mark = check.ok ? colors.green(icons.ok) : colors.error(icons.err);\n const reason = check.reason ? colors.dim(` — ${check.reason}`) : \"\";\n console.log(` ${mark} ${check.slot}${reason}`);\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (rollbackResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Rollback dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n console.log();\n return;\n }\n\n console.log();\n console.log(colors.green(`${icons.ok} Rolled back`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n if (rollbackResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${rollbackResult.txHash}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"deploy\") {\n const deployResult = result as any;\n if (deployResult.status === \"list\") {\n console.log();\n console.log(colors.cyan(\"Recent publishes (audit trail)\"));\n for (const entry of deployResult.history ?? []) {\n console.log(\n ` ${entry.blockTimestamp} ${colors.dim(`block ${entry.blockHeight}`)}${entry.publishedAt ? colors.dim(` ${entry.publishedAt}`) : \"\"}`,\n );\n }\n console.log();\n return;\n }\n if (deployResult.fingerprint) {\n console.log(` ${colors.dim(\"Fingerprint:\")} ${deployResult.fingerprint}`);\n }\n if (deployResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n console.log();\n return;\n }\n\n if (deployResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Deploy failed`));\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n if (deployResult.deployResults && deployResult.deployResults.length > 0) {\n const failures = deployResult.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (deployResult.status === \"deployed\") {\n console.log();\n console.log(colors.green(`${icons.ok} Deployed successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.built && deployResult.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${deployResult.built.join(\", \")}`);\n }\n if (deployResult.skipped && deployResult.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${deployResult.skipped.join(\", \")}`);\n }\n if (deployResult.deployResults) {\n const warnings = deployResult.deployResults.flatMap((r: any) => r.warnings ?? []);\n if (warnings.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"⚠\")} Build warnings:`);\n for (const w of warnings) {\n console.log(` ${colors.dim(w)}`);\n }\n }\n }\n if (deployResult.image) {\n console.log(` ${colors.dim(\"Image:\")} ${deployResult.image}`);\n }\n if (deployResult.service) {\n console.log(` ${colors.dim(\"Railway:\")} deployed ${deployResult.service}`);\n }\n console.log();\n return;\n }\n\n if (deployResult.status === \"published\") {\n console.log();\n console.log(colors.yellow(`${icons.err} Config published, but a deploy leg failed`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n console.log();\n process.exit(1);\n }\n }\n\n if (descriptor.key === \"infraExport\") {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nvoid main().catch((error) => {\n console.error(\"[CLI] Fatal error:\", error);\n process.exit(1);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":["bosPlugin"],"sources":["../src/cli.ts"],"sourcesContent":["import { existsSync, watch } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { installBundleFetchFromEnv } from \"./bundle-fs-resolve\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { resolveFrameworkPackage } from \"./cli/framework-version\";\nimport { printHelp } from \"./cli/help\";\nimport { runDockerComposeUp } from \"./cli/init\";\nimport { parseCommandInput } from \"./cli/parse\";\nimport { promptInitBasic, promptInitOverrides } from \"./cli/prompts\";\nimport { compareSemver } from \"./cli/status\";\nimport { formatDuration, sumPhaseDurations } from \"./cli/timing\";\nimport { fetchInitParent } from \"./commands/init\";\nimport { findConfigPath, MISSING_CONFIG_MESSAGE, readAuthoredConfigInput } from \"./config\";\nimport type {\n DevOptions,\n DevResult,\n InitOptions,\n InitResult,\n KeyPublishOptions,\n KillOptions,\n KillResult,\n LogsOptions,\n LogsResult,\n OverrideSection,\n PsResult,\n StartOptions,\n StartResult,\n TypecheckWorkspaceResult,\n} from \"./contract\";\nimport type { StartSummary } from \"./dev-program\";\nimport { getRegistryNamespaceForAccount } from \"./fastkv\";\nimport { listPublishKeys } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport bosPlugin from \"./plugin\";\nimport { type ProgressEvent, pluginEvents } from \"./progress\";\nimport { createPluginRuntime } from \"./sdk\";\nimport { printBanner } from \"./utils/banner\";\nimport { colors, frames, gradients, icons } from \"./utils/theme\";\n\nfunction printConfigView(result: {\n account: string;\n domain?: string;\n staging?: { domain: string };\n app?: {\n host: { name?: string; development: string; production?: string };\n ui: { name?: string; development?: string; production?: string; ssr?: string };\n api: { name?: string; development?: string; production?: string; proxy?: string };\n };\n}) {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"CONFIG\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n\n console.log(` ${colors.dim(\"Account\")} ${colors.cyan(result.account)}`);\n console.log(` ${colors.dim(\"Domain\")} ${colors.white(result.domain ?? \"not configured\")}`);\n if (result.staging) {\n console.log(` ${colors.dim(\"Staging\")} ${colors.magenta(result.staging.domain)}`);\n }\n console.log();\n}\n\nfunction formatTimeAgo(isoTimestamp: string): string {\n const now = Date.now();\n const then = new Date(isoTimestamp).getTime();\n const diffMs = now - then;\n const diffMins = Math.floor(diffMs / 60_000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n return isoTimestamp.split(\"T\")[0] ?? isoTimestamp;\n}\n\nconst RETIRED_BOOTSTRAP_STUBS = [\n \"ui/src/entry.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/router.server.tsx\",\n \"ui/src/compose.ts\",\n];\n\n/**\n * Hand-modified bootstrap stubs retire as conflicted (backed up, then\n * deleted) — print the mechanical port into the authored seams (ADR 0023).\n */\nfunction printStubMigrationGuide(retiredConflicted: string[] | undefined) {\n const handModified = (retiredConflicted ?? []).filter((f) => RETIRED_BOOTSTRAP_STUBS.includes(f));\n if (handModified.length === 0) return;\n console.log(` ${colors.yellow(\"Port your stub customizations into the authored seams:\")}`);\n console.log(\n ` ${colors.dim(\"- defaultErrorComponent / defaultPendingComponent / defaultNotFoundComponent\")}`,\n );\n console.log(\n ` ${colors.dim(\" → set them inside the createRouter factory in ui/src/router.tsx (after ...opts)\")}`,\n );\n console.log(\n ` ${colors.dim(\"- apiConnectionError copy + SSR locale config (locales, defaultLocale, cookieName)\")}`,\n );\n console.log(\n ` ${colors.dim(\" → export apiConnectionError / appLocale from ui/src/app.ts (see the scaffold template)\")}`,\n );\n console.log(` ${colors.dim(\" backed-up originals: .bos/sync-backup/<timestamp>/\")}`);\n}\n\nfunction printTimingSummary(timings: Array<{ name: string; durationMs: number }> | undefined) {\n if (!timings || timings.length === 0) return;\n\n console.log(` ${colors.dim(\"Timings:\")}`);\n for (const timing of timings) {\n console.log(` ${colors.dim(timing.name.padEnd(22))} ${formatDuration(timing.durationMs)}`);\n }\n console.log(\n ` ${colors.dim(\"total\".padEnd(22))} ${formatDuration(sumPhaseDurations(timings))}`,\n );\n}\n\nfunction printStartSummary(summary: StartSummary) {\n console.log();\n console.log(` ${colors.dim(\"Config Source:\")} ${summary.configSource}`);\n if (summary.configSourceHttp) {\n console.log(` ${colors.dim(summary.configSourceHttp)}`);\n }\n console.log(` ${colors.dim(\"Account:\")} ${summary.account}`);\n console.log(` ${colors.dim(\"Domain:\")} ${summary.domain ?? \"not configured\"}`);\n console.log();\n console.log(` ${colors.dim(\"Modules:\")}`);\n console.log(` ${colors.dim(\"HOST\")} → ${summary.modules.host ?? \"local\"}`);\n console.log(` ${colors.dim(\"UI\")} → ${summary.modules.ui ?? \"local\"}`);\n console.log(` ${colors.dim(\"API\")} → ${summary.modules.api ?? \"local\"}`);\n if (summary.modules.auth) {\n console.log(` ${colors.dim(\"AUTH\")} → ${summary.modules.auth}`);\n }\n if (summary.warnings.length > 0) {\n console.log();\n for (const w of summary.warnings) {\n console.log(` ${colors.yellow(w)}`);\n }\n }\n console.log();\n}\n\nfunction clearSpinnerStopLine() {\n if (!process.stdout.isTTY) return;\n process.stdout.write(\"\\u001B[1A\\u001B[2K\\u001B[1G\");\n}\n\nasync function warnIfOutdated(client: any, command: string): Promise<void> {\n if (![\"dev\", \"build\", \"start\"].includes(command)) return;\n\n try {\n const status = await client.status();\n if (status.status === \"error\" || !status.packages) return;\n\n const frameworkPackages = [\"everything-dev\", \"every-plugin\"];\n\n const linked = status.packages.filter((p: { isLinked?: boolean }) => p.isLinked);\n const outdated = status.packages.filter(\n (p: { name: string; installed?: string; latest?: string; isLinked?: boolean }) =>\n !p.isLinked &&\n p.installed &&\n p.latest &&\n compareSemver(p.installed, p.latest) < 0 &&\n frameworkPackages.includes(p.name),\n );\n\n if (linked.length > 0) {\n for (const pkg of linked) {\n console.log(colors.dim(` ${pkg.name} is linked locally (v${pkg.installed})`));\n }\n }\n\n if (outdated.length === 0) return;\n\n const warn = (line: string) => {\n if (command === \"dev\" || command === \"start\") process.stderr.write(`${line}\\n`);\n else console.log(line);\n };\n warn(\"\");\n warn(colors.yellow(` ! Outdated packages detected:`));\n for (const pkg of outdated) {\n warn(colors.dim(` ${pkg.name} ${pkg.installed} → ${pkg.latest}`));\n }\n warn(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n warn(\"\");\n } catch {\n // silently ignore if status check fails\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n const invocationArgs = args.length > 0 ? args : [\"dev\"];\n const command = invocationArgs[0] ?? \"dev\";\n\n const commandMatch = findCommandDescriptor(invocationArgs);\n if (!commandMatch) {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n\n const { descriptor, consumed } = commandMatch;\n const commandArgs = invocationArgs.slice(consumed);\n\n // Parse before the plugin boot: `start --config-path` steers the whole CLI,\n // not just the stack — the plugin initialize resolves and pin-validates the\n // boot config, so it must be the config the command will actually run.\n let parsedInput: unknown;\n try {\n parsedInput = parseCommandInput(descriptor, commandArgs);\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n const bootInput = parsedInput as { configPath?: string };\n\n const cwdConfigPath = findConfigPath();\n const configPath = bootInput.configPath ?? cwdConfigPath;\n installBundleFetchFromEnv({ configPath });\n\n const projectDir = cwdConfigPath ? dirname(cwdConfigPath) : undefined;\n const edResolved = projectDir ? resolveFrameworkPackage(projectDir, \"everything-dev\") : undefined;\n const displayVersion = edResolved?.installedVersion\n ? `${edResolved.installedVersion}${edResolved.isLinked ? \" (linked)\" : \"\"}`\n : undefined;\n if (!process.env.BOS_NO_BANNER) {\n printBanner(\"everything-dev\", displayVersion);\n }\n\n const runtime = createPluginRuntime({\n registry: {\n bos: { module: bosPlugin },\n },\n secrets: {},\n });\n\n const pluginRuntime: any = runtime;\n const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n const plugin = await loadPlugin(\"bos\", {\n variables: {\n configPath: configPath ?? undefined,\n configDir: cwdConfigPath ? dirname(cwdConfigPath) : undefined,\n },\n secrets: {},\n });\n\n const client = plugin.createClient();\n\n const outdatedWarning = warnIfOutdated(client, command);\n\n try {\n const input = parsedInput;\n\n const rollbackInput = input as {\n listOnly?: boolean;\n version?: string;\n previous?: boolean;\n [key: string]: unknown;\n };\n if (\n descriptor.key === \"rollback\" &&\n !rollbackInput.listOnly &&\n !rollbackInput.version &&\n !rollbackInput.previous\n ) {\n const listing = await (client as any).rollback({ ...rollbackInput, listOnly: true });\n if (listing.status !== \"list\" || !listing.history?.length) {\n console.error(listing.error ?? \"No publish history found\");\n process.exit(1);\n }\n console.log();\n const selection = await p.select({\n message: \"Roll back to which publish?\",\n options: listing.history.map(\n (entry: {\n blockHeight: number;\n blockTimestamp: string;\n txHash?: string;\n summary: string;\n }) => ({\n value: String(entry.blockHeight),\n label: `${entry.blockTimestamp} (block ${entry.blockHeight})`,\n hint: entry.summary,\n }),\n ),\n });\n if (p.isCancel(selection)) {\n return;\n }\n rollbackInput.version = selection as string;\n }\n\n if (descriptor.key === \"keyPublish\") {\n const keyPublishInput = input as KeyPublishOptions;\n if (keyPublishInput.removeOldKeys === undefined) {\n if (process.stdin.isTTY) {\n const authored = configPath ? await readAuthoredConfigInput(dirname(configPath)) : null;\n const account =\n keyPublishInput.env === \"staging\"\n ? (authored?.staging?.account ?? authored?.account)\n : authored?.account;\n let listed: string[] | null = null;\n if (account) {\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account, keyPublishInput.registry);\n try {\n listed = await listPublishKeys({ account, contract, network });\n } catch {\n listed = null;\n }\n }\n if (listed?.length) {\n const removeOldKeys = await p.confirm({\n message: `Remove ${listed.length} existing publish key${listed.length > 1 ? \"s\" : \"\"}?`,\n initialValue: true,\n });\n if (p.isCancel(removeOldKeys)) {\n return;\n }\n keyPublishInput.removeOldKeys = removeOldKeys;\n } else {\n keyPublishInput.removeOldKeys = true;\n }\n } else {\n keyPublishInput.removeOldKeys = true;\n }\n }\n }\n\n if (descriptor.key === \"dev\") {\n const devSpinner = p.spinner();\n devSpinner.start(\"Starting dev environment\");\n\n const devPhaseLabels: Record<string, string> = {\n \"shared deps\": \"Preparing config...\",\n install: \"Installing dependencies...\",\n build: \"Building...\",\n \"resolve config\": \"Resolving config...\",\n ports: \"Finding available ports...\",\n \"docker compose up\": \"Starting local Postgres...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onDevProgress = (event: ProgressEvent) => {\n const label = devPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n devSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onDevProgress);\n\n let result: DevResult;\n try {\n result = await client.dev(input as DevOptions);\n } finally {\n pluginEvents.off(\"progress\", onDevProgress);\n }\n\n if (result.status === \"error\") {\n devSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.description}`);\n process.exit(1);\n }\n\n devSpinner.stop();\n clearSpinnerStopLine();\n\n const session = result.session;\n void outdatedWarning;\n if (session) {\n const { devApp } = await import(\"./dev-session\");\n devApp(\n projectDir ?? process.cwd(),\n session.orchestrator,\n session.services,\n session.runtimeConfig,\n session.envGenerated,\n session.shellEnv,\n );\n }\n return;\n }\n\n if (descriptor.key === \"start\") {\n const startSpinner = p.spinner();\n startSpinner.start(\"Starting production environment\");\n\n const startPhaseLabels: Record<string, string> = {\n config: \"Preparing config...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onStartProgress = (event: ProgressEvent) => {\n const label = startPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n startSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onStartProgress);\n\n let result: StartResult;\n try {\n result = await client.start(input as StartOptions);\n } finally {\n pluginEvents.off(\"progress\", onStartProgress);\n }\n\n if (result.status === \"error\") {\n startSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n startSpinner.stop(\"Ready\");\n\n const session = result.session;\n const summary = result.summary;\n void outdatedWarning;\n if (session) {\n if (summary) {\n printStartSummary(summary);\n }\n const { startApp } = await import(\"./dev-session\");\n startApp(\n projectDir ?? process.cwd(),\n session.orchestrator,\n session.services,\n session.runtimeConfig,\n session.envGenerated,\n session.shellEnv,\n );\n }\n return;\n }\n\n if (descriptor.key === \"init\") {\n let initInput: InitOptions = { ...(input as InitOptions) };\n\n if (!initInput.noInteractive) {\n const basic = await promptInitBasic({\n extends: initInput.extends,\n account: initInput.account,\n domain: initInput.domain,\n });\n\n let parentPluginKeys: string[] = [];\n let parentConfig: {\n title?: string;\n description?: string;\n plugins?: Record<string, unknown>;\n } | null = null;\n\n const fetchSpinner = p.spinner();\n fetchSpinner.start(\"Fetching parent config\");\n try {\n const parent = await fetchInitParent(basic.extendsAccount, basic.extendsGateway);\n parentConfig = parent.parentConfig;\n parentPluginKeys = parent.parentPluginKeys;\n } catch {\n fetchSpinner.stop(\"Config not found\");\n console.error(\n `[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n );\n process.exit(1);\n }\n fetchSpinner.stop(\"Config fetched\");\n\n if (\n typeof parentConfig?.title === \"string\" &&\n parentConfig.title.trim() &&\n typeof parentConfig?.description === \"string\" &&\n parentConfig.description.trim()\n ) {\n const shouldContinue = await p.confirm({\n message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n process.exit(0);\n }\n }\n\n const overrides = await promptInitOverrides({\n parentPluginKeys,\n plugins: initInput.plugins,\n overrides: initInput.overrides as OverrideSection[] | undefined,\n level: initInput.level,\n });\n\n const directory = initInput.directory || basic.domain || basic.extendsGateway;\n\n initInput = {\n ...initInput,\n extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n directory,\n account: basic.account,\n domain: basic.domain || undefined,\n plugins: overrides.plugins,\n overrides: overrides.overrides,\n level: overrides.level ?? initInput.level,\n noInteractive: true,\n };\n }\n\n const initSpinner = p.spinner();\n initSpinner.start(\"Initializing project\");\n\n const phaseLabels: Record<string, string> = {\n \"parent config\": \"Fetching parent config...\",\n \"template source\": \"Resolving template source...\",\n \"scaffold project\": \"Creating project scaffold...\",\n \"copy files\": \"Copying template files...\",\n \"personalize config\": \"Personalizing config...\",\n \"write snapshot\": \"Writing snapshot...\",\n \"resolve config\": \"Resolving config...\",\n \"generate env/docker\": \"Generating environment config...\",\n \"create env file\": \"Creating .env file...\",\n \"install dependencies\": \"Installing dependencies...\",\n \"generate types\": \"Generating types...\",\n \"generate migrations\": \"Generating database migrations...\",\n \"generate code artifacts\": \"Generating code artifacts...\",\n };\n\n const onProgress = (event: ProgressEvent) => {\n const label = phaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n initSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onProgress);\n\n let result: InitResult;\n try {\n result = await client.init(initInput);\n } finally {\n pluginEvents.off(\"progress\", onProgress);\n }\n\n if (result.status === \"error\") {\n initSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n initSpinner.stop(\"Project initialized\");\n\n console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n console.log(` ${colors.dim(\"Directory:\")} ${result.directory}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n if (result.overrides && result.overrides.length > 0)\n console.log(` ${colors.dim(\"Overrides:\")} ${result.overrides.join(\", \")}`);\n if (result.plugins && result.plugins.length > 0)\n console.log(` ${colors.dim(\"Plugins:\")} ${result.plugins.join(\", \")}`);\n console.log(` ${colors.dim(\"Files copied:\")} ${result.filesCopied}`);\n printTimingSummary(result.timings);\n console.log();\n console.log(colors.dim(\" Next steps:\"));\n console.log(colors.dim(` cd ${result.directory}`));\n if (!initInput.noInstall) {\n console.log(colors.dim(\" pnpm run dev\"));\n } else {\n console.log(colors.dim(\" pnpm install\"));\n console.log(colors.dim(\" pnpm run dev\"));\n }\n console.log();\n\n if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) {\n const shouldStartDocker = await p.confirm({\n message: \"Run docker compose up -d --wait?\",\n initialValue: true,\n });\n\n if (shouldStartDocker === true) {\n const dockerSpinner = p.spinner();\n dockerSpinner.start(\"Starting Docker services\");\n const compose = await runDockerComposeUp(result.targetDir);\n if (compose.ok) {\n dockerSpinner.stop(\"Docker services ready\");\n } else {\n dockerSpinner.stop(\"Docker services not started\");\n p.log.warn(\n `docker compose up -d --wait failed${compose.tail ? `:\\n${compose.tail}` : \"\"}`,\n );\n }\n }\n }\n\n return;\n }\n\n const result = await (client as any)[descriptor.key](input);\n\n if (descriptor.key === \"dbStudio\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n return;\n }\n\n if (descriptor.key === \"dbDoctor\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Diagnosis failed\"}`);\n process.exit(1);\n }\n\n const statusIcon = (() => {\n switch (result.diagnosis) {\n case \"healthy\":\n return \"✓\";\n case \"empty\":\n return \"○\";\n case \"unapplied\":\n return \"○\";\n case \"untracked-existing-schema\":\n return \"○\";\n case \"drift-safe-repair\":\n return \"⚠\";\n case \"drift-manual\":\n return \"✗\";\n default:\n return \"?\";\n }\n })();\n\n console.log(`\\n${statusIcon} ${result.plugin}`);\n console.log(` ${colors.dim(`Journal:`)} ${result.journalSchema}.${result.journalTable}`);\n console.log(` ${colors.dim(`Local migrations:`)} ${result.localMigrationCount}`);\n console.log(` ${colors.dim(`Applied hashes:`)} ${result.appliedHashCount}`);\n if (result.expectedTables.length > 0) {\n console.log(` ${colors.dim(`Expected tables:`)} ${result.expectedTables.join(\", \")}`);\n }\n if (result.missingTables.length > 0) {\n console.log(` ${colors.yellow(`Missing tables:`)} ${result.missingTables.join(\", \")}`);\n }\n console.log(` ${colors.dim(`Diagnosis:`)} ${result.diagnosis}`);\n if (result.workspaceDir) {\n console.log(` ${colors.dim(`Workspace:`)} ${result.workspaceDir}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"dbRepair\") {\n if (result.status === \"refused\") {\n console.log(\n `\\n${colors.yellow(\"!\")} Repair refused for ${result.diagnosis?.plugin ?? result.message}`,\n );\n console.log(` ${result.message}`);\n console.log();\n process.exit(0);\n }\n\n if (result.status === \"error\") {\n console.error(`\\n${colors.error(\"✗\")} Repair failed`);\n console.error(` ${result.message}`);\n console.error();\n process.exit(1);\n }\n\n console.log(`\\n${colors.green(\"✓\")} Repair complete`);\n console.log(` ${result.message}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"config\") {\n if (!result.config) {\n console.error(MISSING_CONFIG_MESSAGE);\n process.exit(1);\n }\n\n printConfigView(result.config);\n process.stdout.write(`${JSON.stringify(result.config, null, 2)}\\n`);\n return;\n }\n\n if (descriptor.key === \"sync\") {\n if ((input as any).json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no files written`));\n } else {\n console.log(colors.green(`${icons.ok} Synced`));\n }\n const hasRetirement =\n (result.retired?.length ?? 0) > 0 || (result.retiredConflicted?.length ?? 0) > 0;\n if (\n result.updated.length > 0 ||\n result.added.length > 0 ||\n result.conflicted.length > 0 ||\n hasRetirement\n ) {\n console.log(\n ` ${colors.dim(\"Sync results:\")} ${result.updated.length} updated, ${result.added.length} added, ${result.conflicted.length} conflicted`,\n );\n if (result.updated.length > 0) {\n for (const f of result.updated) console.log(` ${colors.dim(f)}`);\n }\n if (result.added.length > 0) {\n for (const f of result.added) console.log(` ${colors.dim(f)}`);\n }\n if (result.conflicted.length > 0) {\n console.log(\n ` ${colors.yellow(\"Conflicted\")} (template applied, your changes backed up):`,\n );\n if (result.backupDir) console.log(` ${colors.dim(result.backupDir)}`);\n for (const f of result.conflicted) console.log(` ${colors.dim(f)}`);\n }\n if (hasRetirement) {\n console.log(` ${colors.yellow(\"Retired\")} (replaced by generated stubs — ADR 0023):`);\n if (result.retiredBackupDir) console.log(` ${colors.dim(result.retiredBackupDir)}`);\n for (const f of result.retiredConflicted ?? []) {\n console.log(` ${colors.dim(`${f} (backed up)`)}`);\n }\n for (const f of result.retired ?? []) console.log(` ${colors.dim(f)}`);\n printStubMigrationGuide(result.retiredConflicted);\n }\n }\n if (\n result.updated.length === 0 &&\n result.added.length === 0 &&\n result.conflicted.length === 0 &&\n !hasRetirement\n ) {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"upgrade\") {\n if ((input as any).json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no changes applied`));\n } else {\n console.log(colors.green(`${icons.ok} Upgrade complete`));\n }\n const mainPkg = result.packages.find(\n (p: { name: string; from?: string; to: string }) => p.name === \"everything-dev\",\n );\n const versionDelta =\n mainPkg?.from && mainPkg.from !== mainPkg.to ? `${mainPkg.from} → ${mainPkg.to}` : null;\n if (versionDelta) {\n console.log(` ${colors.dim(`Upgraded everything-dev ${versionDelta}`)}`);\n }\n for (const pkg of result.packages) {\n if (pkg.name === \"everything-dev\") continue;\n if (pkg.from && pkg.from !== pkg.to) {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.from} → ${pkg.to}`)}`);\n } else if (!pkg.from) {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.to} (new)`)}`);\n } else {\n console.log(` ${colors.dim(`${pkg.name} ${pkg.to} (up to date)`)}`);\n }\n }\n if (result.changelogUrl) {\n console.log(` Changelog: ${result.changelogUrl}`);\n }\n if (result.selectedPlugins && result.selectedPlugins.length > 0) {\n console.log(` Added plugins: ${result.selectedPlugins.join(\", \")}`);\n }\n if (result.sync) {\n const sync = result.sync;\n const hasRetirement =\n (sync.retired?.length ?? 0) > 0 || (sync.retiredConflicted?.length ?? 0) > 0;\n console.log(` ${colors.dim(\"Sync results:\")}`);\n if (\n sync.updated.length > 0 ||\n sync.added.length > 0 ||\n sync.conflicted.length > 0 ||\n hasRetirement\n ) {\n console.log(\n ` ${sync.updated.length} updated, ${sync.added.length} added, ${sync.conflicted.length} conflicted`,\n );\n if (sync.conflicted.length > 0) {\n console.log(\n ` ${colors.yellow(\"Conflicted\")} (template applied, your changes backed up):`,\n );\n if (sync.backupDir) console.log(` ${colors.dim(sync.backupDir)}`);\n for (const f of sync.conflicted) console.log(` ${colors.dim(f)}`);\n }\n if (hasRetirement) {\n console.log(` ${colors.yellow(\"Retired\")} (replaced by generated stubs — ADR 0023):`);\n if (sync.retiredBackupDir) console.log(` ${colors.dim(sync.retiredBackupDir)}`);\n for (const f of sync.retiredConflicted ?? []) {\n console.log(` ${colors.dim(`${f} (backed up)`)}`);\n }\n for (const f of sync.retired ?? []) console.log(` ${colors.dim(f)}`);\n printStubMigrationGuide(sync.retiredConflicted);\n }\n } else {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n }\n if (result.migrated && result.migrated.length > 0) {\n console.log(` Migrated: ${result.migrated.length} file(s)`);\n for (const f of result.migrated) console.log(` ${colors.dim(f)}`);\n }\n if (versionDelta || (result.sync && result.sync.conflicted.length > 0)) {\n console.log();\n console.log(colors.dim(\" For AI agents:\"));\n const parentRepo = \"nearbuilders/everything-dev\";\n const somedelta =\n mainPkg?.from && mainPkg.to\n ? `v${mainPkg.from.replace(/^[\\^~>=v]+/, \"\")}...v${mainPkg.to.replace(/^[\\^~>=v]+/, \"\")}`\n : \"\";\n console.log(\n colors.dim(\n ` This upgrade applied template changes${somedelta ? ` (${somedelta})` : \"\"}.`,\n ),\n );\n if (result.sync && result.sync.conflicted.length > 0) {\n console.log(\n colors.dim(\n ` ${result.sync.conflicted.length} file(s) had local conflicts — template version applied, backups at ${result.sync.backupDir || \".bos/sync-backup/\"}.`,\n ),\n );\n console.log(\n colors.dim(\n ` If local changes should be preserved upstream, open a PR: https://github.com/${parentRepo}${somedelta ? `/compare/${somedelta}` : \"\"}`,\n ),\n );\n }\n console.log(\n colors.dim(\n \" Load matching intent skills: pnpm dlx @tanstack/intent@latest load everything-dev#...\",\n ),\n );\n console.log(colors.dim(\" Review AGENTS.md — local updates may need merging.\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"status\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"STATUS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.extends) console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n console.log();\n console.log(` ${colors.dim(\"Packages:\")}`);\n for (const pkg of result.packages) {\n const hasUpdate =\n pkg.installed && pkg.latest && compareSemver(pkg.installed, pkg.latest) < 0;\n const versionStr = hasUpdate\n ? `${pkg.installed} → ${pkg.latest}`\n : pkg.installed || \"not installed\";\n const label = hasUpdate ? colors.yellow(versionStr) : colors.dim(versionStr);\n console.log(` ${colors.dim(`${pkg.name}`)} ${label}`);\n }\n console.log();\n if (result.lastSync) {\n const ago = formatTimeAgo(result.lastSync);\n console.log(` ${colors.dim(\"Last sync:\")} ${ago}`);\n } else {\n console.log(` ${colors.dim(\"Last sync:\")} never`);\n }\n const envLabel =\n result.envFile === \"found\"\n ? colors.green(\"found\")\n : result.envFile === \"example-only\"\n ? colors.yellow(\"missing (only .env.example found)\")\n : colors.error(\"missing\");\n console.log(` ${colors.dim(\".env:\")} ${envLabel}`);\n if (result.parentReachable !== undefined) {\n const parentLabel = result.parentReachable\n ? colors.green(\"reachable\")\n : colors.error(\"unreachable\");\n console.log(` ${colors.dim(\"Parent:\")} ${parentLabel}`);\n }\n const hasUpdates = result.packages.some(\n (p: { installed?: string; latest?: string }) =>\n p.installed && p.latest && compareSemver(p.installed, p.latest) < 0,\n );\n if (hasUpdates) {\n console.log();\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"ps\") {\n const psResult = result as PsResult;\n console.log();\n if (psResult.status === \"error\") {\n console.error(`[CLI] ${psResult.error || \"Unknown error\"}`);\n process.exit(1);\n }\n const entries = psResult.entries ?? [];\n if (entries.length === 0) {\n console.log(colors.dim(\" No tracked development processes running.\"));\n console.log();\n console.log(\n colors.dim(` Start one with ${colors.cyan(\"bos dev\")} and it will appear here.`),\n );\n console.log();\n return;\n }\n console.log(colors.cyan(frames.top(60)));\n console.log(` ${icons.app} ${gradients.cyber(\"PROCESSES\")}`);\n console.log(colors.cyan(frames.bottom(60)));\n console.log();\n for (const entry of entries) {\n const ageMs = Date.now() - entry.startedAt;\n const ageStr =\n ageMs < 60_000\n ? `${Math.floor(ageMs / 1000)}s`\n : ageMs < 3_600_000\n ? `${Math.floor(ageMs / 60_000)}m`\n : `${Math.floor(ageMs / 3_600_000)}h`;\n const roleTag =\n entry.role === \"workspace-parent\"\n ? colors.magenta(\"parent\")\n : entry.role === \"workspace-child\"\n ? colors.blue(\"child\")\n : colors.dim(\"dev\");\n console.log(` ${colors.green(`pid ${entry.pid}`)} ${roleTag} ${colors.dim(ageStr)}`);\n console.log(` ${colors.dim(\"dir:\")} ${entry.configDir}`);\n if (entry.parentPid !== undefined) {\n console.log(` ${colors.dim(\"parent:\")} ${entry.parentPid}`);\n }\n const portPairs = Object.entries(entry.ports ?? {})\n .filter(([, p]) => typeof p === \"number\")\n .map(([k, v]) => `${k}=${v}`);\n if (portPairs.length > 0) {\n console.log(` ${colors.dim(\"ports:\")} ${portPairs.join(\" \")}`);\n }\n if (entry.budget) {\n console.log(` ${colors.dim(\"budget:\")} [${entry.budget.min}, ${entry.budget.max}]`);\n }\n console.log(` ${colors.dim(\"desc:\")} ${entry.description}`);\n console.log();\n }\n return;\n }\n\n if (descriptor.key === \"logs\") {\n const logsResult = result as LogsResult;\n const opts = input as LogsOptions;\n for (const line of logsResult.lines) {\n console.log(line);\n }\n if (logsResult.lines.length === 0) {\n console.log(colors.dim(` No matching log lines in ${logsResult.logFile}.`));\n }\n if (opts.follow) {\n if (logsResult.logFile === \"unknown\" || !existsSync(logsResult.logFile)) {\n console.log(colors.dim(\" No log file to follow — nothing was found on disk.\"));\n } else {\n const filter = opts.service;\n let byteOffset = 0;\n for (const line of logsResult.lines) byteOffset += Buffer.byteLength(line, \"utf8\") + 1;\n const followMatch = (line: string): boolean => {\n if (!filter) return true;\n const source = /\\] \\[([^\\]]+)\\] \\[(?:OUT|ERR)\\] /.exec(line)?.[1];\n return source === filter || source === `plugin:${filter}`;\n };\n const watcher = watch(logsResult.logFile, (event) => {\n if (event !== \"change\") return;\n void readFile(logsResult.logFile, \"utf8\")\n .then((text) => {\n const newLines = text\n .slice(byteOffset)\n .split(\"\\n\")\n .filter((line) => line.length > 0 && followMatch(line));\n byteOffset = Buffer.byteLength(text, \"utf8\");\n for (const line of newLines) {\n console.log(line);\n }\n })\n .catch(() => {\n // the followed file was rotated or deleted — stop following\n watcher.close();\n });\n });\n console.log(colors.dim(\" Following — Ctrl+C to stop.\"));\n process.on(\"SIGINT\", () => {\n watcher.close();\n process.exit(0);\n });\n }\n }\n return;\n }\n\n if (descriptor.key === \"kill\") {\n const killResult = result as KillResult;\n console.log();\n if (killResult.status === \"error\") {\n console.error(`[CLI] ${killResult.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (killResult.killed.length > 0) {\n console.log(colors.green(`${icons.ok} Sent ${killResult.killed.length} kill signal(s)`));\n for (const k of killResult.killed) {\n console.log(` ${colors.dim(\"pid\")} ${k.pid} ${colors.dim(k.configDir)}`);\n }\n }\n if (killResult.skipped.length > 0) {\n console.log(colors.yellow(`${icons.err} ${killResult.skipped.length} skipped`));\n for (const s of killResult.skipped) {\n console.log(` ${colors.dim(\"pid\")} ${s.pid} ${colors.dim(s.reason)}`);\n }\n }\n if (killResult.killed.length === 0 && killResult.skipped.length === 0) {\n const opts = input as KillOptions;\n if (opts.all) {\n console.log(colors.dim(\" No tracked processes to kill.\"));\n } else {\n const configPath = findConfigPath();\n const dir = opts.configDir ?? (configPath ? resolve(dirname(configPath)) : process.cwd());\n console.log(colors.dim(` No tracked processes for ${dir}`));\n console.log(colors.dim(` Use ${colors.cyan(\"--all\")} to kill across all directories.`));\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typesGen\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.green(`${icons.ok} Types generated`));\n if (result.generated.length > 0) {\n console.log(` ${colors.dim(\"Written:\")}`);\n for (const f of result.generated) console.log(` ${colors.dim(f)}`);\n }\n if (result.fetched.length > 0 || result.skipped.length > 0 || result.failed.length > 0) {\n console.log(` ${colors.dim(\"Contract sources:\")}`);\n for (const entry of result.fetched) {\n const space = entry.indexOf(\" \");\n const key = space !== -1 ? entry.slice(0, space) : entry;\n const rest = space !== -1 ? entry.slice(space + 1) : \"\";\n const restSpace = rest.indexOf(\" \");\n const detail = restSpace !== -1 ? rest.slice(restSpace + 1) : \"\";\n console.log(\n ` ${key} ${colors.cyan(\"remote\")}${detail ? ` ${colors.dim(detail)}` : \"\"}`,\n );\n }\n for (const entry of result.skipped) {\n const space = entry.indexOf(\" \");\n const key = space !== -1 ? entry.slice(0, space) : entry;\n const rest = space !== -1 ? entry.slice(space + 1) : \"\";\n if (rest === \"no URL resolved\") {\n console.log(` ${key} ${colors.dim(\"no URL resolved\")}`);\n continue;\n }\n const restSpace = rest.indexOf(\" \");\n const detail = restSpace !== -1 ? rest.slice(restSpace + 1) : \"\";\n console.log(` ${key} ${colors.dim(\"local\")}${detail ? ` ${colors.dim(detail)}` : \"\"}`);\n }\n }\n if (result.failed.length > 0) {\n console.log(` ${colors.yellow(\"Failed:\")}`);\n for (const f of result.failed) {\n const colon = f.indexOf(\": \");\n if (colon !== -1) {\n console.log(` ${colors.error(f.slice(0, colon))}${colors.dim(f.slice(colon))}`);\n } else {\n console.log(` ${colors.error(f)}`);\n }\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typecheck\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n const failed = result.results.filter((r: TypecheckWorkspaceResult) => !r.passed);\n const passed = result.results.filter((r: TypecheckWorkspaceResult) => r.passed);\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"TYPECHECK\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n for (const r of result.results) {\n const icon = r.passed ? colors.green(\"✓\") : colors.error(\"✗\");\n console.log(` ${icon} ${r.workspace}`);\n }\n if (result.skipped.length > 0) {\n console.log(` ${colors.dim(`Skipped: ${result.skipped.join(\", \")}`)}`);\n }\n console.log();\n if (failed.length > 0) {\n console.log(` ${colors.error(`${failed.length} failed`)}`);\n for (const f of failed) {\n if (f.error) console.log(` ${colors.dim(f.error)}`);\n }\n console.log();\n process.exit(1);\n }\n console.log(` ${colors.green(`${passed.length} passed`)}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"mfCheck\") {\n console.log();\n console.log(\n ` ${colors.dim(\"Host\")} ${result.hostReachable ? colors.green(\"OK \") : colors.error(\"FAIL\")} ${\n result.hostVersion ?? \"unreachable\"\n }${result.hostReason ? ` (${result.hostReason})` : \"\"}`,\n );\n for (const r of result.remotes) {\n const tag = r.ok ? colors.green(\"OK \") : colors.error(\"FAIL\");\n console.log(\n ` ${colors.dim(r.role.padEnd(10))} ${tag} ${r.url} pluginVersion=${r.pluginVersion ?? \"?\"}${\n r.reason ? ` ↳ ${r.reason}` : \"\"\n }`,\n );\n }\n console.log();\n if (result.status !== \"ok\") {\n console.log(\n colors.error(\n \" mf-compat: ✗ federation manifests NOT compatible — redeploy affected plugin(s) so pluginVersion and shared versions match host\",\n ),\n );\n console.log();\n process.exit(1);\n }\n console.log(colors.green(\" mf-compat: ✓ all federation manifests compatible\"));\n console.log();\n return;\n }\n\n if (result?.status === \"error\" && descriptor.key !== \"publish\" && descriptor.key !== \"deploy\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n if (descriptor.key === \"login\") {\n console.log();\n console.log(colors.green(`${icons.ok} Logged in to ${result.siteUrl}`));\n if (result.accountId) console.log(` ${colors.dim(\"Account:\")} ${result.accountId}`);\n if (result.expiresAt) console.log(` ${colors.dim(\"Expires:\")} ${result.expiresAt}`);\n if (result.warning) console.log(` ${colors.yellow(\"⚠\")} ${result.warning}`);\n if (result.publishKey) {\n console.log(\n ` ${colors.dim(\"Publish key:\")} ${result.publishKey.publicKey} ${colors.dim(\n `(${result.publishKey.network}, exported to ${result.publishKey.exportedTo})`,\n )}`,\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"logout\") {\n console.log();\n console.log(colors.green(`${icons.ok} Logged out`));\n if (result.revokedApiKey) console.log(` ${colors.dim(\"Revoked API key\")}`);\n if (result.removedPublishKey) console.log(` ${colors.dim(\"Removed exported publish key\")}`);\n if (result.warning) console.log(` ${colors.yellow(\"⚠\")} ${result.warning}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"keyPublish\") {\n process.stdout.write(`Generated publish key for ${result.account}\\n`);\n process.stdout.write(` Network: ${result.network}\\n`);\n process.stdout.write(` Allowance: ${result.allowance}\\n`);\n process.stdout.write(`\\n`);\n const secretName = result.env === \"staging\" ? \"NEAR_TESTNET_PRIVATE_KEY\" : \"NEAR_PRIVATE_KEY\";\n if (!process.stdout.isTTY) {\n process.stderr.write(\n ` ⚠ Non-interactive stdout: this private key will be captured in any log or pipe (GitHub Actions logs persist stdout).\\n`,\n );\n }\n process.stdout.write(\n ` Set this as ${secretName} in GitHub Actions or before calling publish:\\n`,\n );\n process.stdout.write(`${secretName}=${result.privateKey}\\n`);\n }\n\n if (descriptor.key === \"pluginAdd\") {\n console.log();\n console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n if (result.development) console.log(` ${colors.dim(\"Development:\")} ${result.development}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginRemove\") {\n console.log();\n console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginList\") {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.plugins.length === 0) {\n console.log(colors.dim(\" No plugins configured\"));\n } else {\n for (const pluginItem of result.plugins) {\n console.log(` ${colors.cyan(pluginItem.key)}`);\n if (pluginItem.development)\n console.log(` ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n if (pluginItem.production)\n console.log(` ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginPublish\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n if (result.path) console.log(` ${colors.dim(\"Path:\")} ${result.path}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n if (result.version) console.log(` ${colors.dim(\"Version:\")} ${result.version}`);\n if (result.fingerprint) console.log(` ${colors.dim(\"Fingerprint:\")} ${result.fingerprint}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"registryUse\") {\n console.log();\n if (result.status === \"error\") {\n console.error(colors.error(`${icons.err} ${result.error || \"Unknown error\"}`));\n process.exit(1);\n }\n console.log(\n colors.green(\n `${icons.ok} ${result.status === \"dry-run\" ? \"Dry run\" : \"Composed\"} from ${result.from}`,\n ),\n );\n for (const section of result.applied) {\n console.log(` ${colors.green(\"+\")} ${section}`);\n }\n if (result.configPath) {\n console.log(` ${colors.dim(\"Config:\")} ${result.configPath}`);\n }\n if (result.status === \"updated\") {\n console.log(colors.dim(\" Run bos types gen to refresh generated types.\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"publish\") {\n if (result.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n console.log();\n return;\n }\n\n if (result.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Publish failed`));\n if (result.error) {\n console.log(` ${colors.dim(\"Error:\")} ${result.error}`);\n }\n if (result.deployResults && result.deployResults.length > 0) {\n const failures = result.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (result.status === \"published\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n if (result.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n }\n if (result.built && result.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n }\n if (result.skipped && result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n }\n if (result.deployResults) {\n const warnings = result.deployResults.flatMap((r: any) => r.warnings ?? []);\n if (warnings.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"⚠\")} Build warnings:`);\n for (const w of warnings) {\n console.log(` ${colors.dim(w)}`);\n }\n }\n }\n console.log();\n return;\n }\n }\n\n if (descriptor.key === \"rollback\") {\n const rollbackResult = result as any;\n if (rollbackResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Roll back failed`));\n if (rollbackResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${rollbackResult.error}`);\n }\n if (rollbackResult.verification) {\n console.log();\n for (const check of rollbackResult.verification) {\n const mark = check.ok ? colors.green(icons.ok) : colors.error(icons.err);\n const reason = check.reason ? colors.dim(` — ${check.reason}`) : \"\";\n console.log(` ${mark} ${check.slot}${reason}`);\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (rollbackResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Rollback dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n console.log();\n return;\n }\n\n console.log();\n console.log(colors.green(`${icons.ok} Rolled back`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n if (rollbackResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${rollbackResult.txHash}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"deploy\") {\n const deployResult = result as any;\n if (deployResult.status === \"list\") {\n console.log();\n console.log(colors.cyan(\"Recent publishes (audit trail)\"));\n for (const entry of deployResult.history ?? []) {\n console.log(\n ` ${entry.blockTimestamp} ${colors.dim(`block ${entry.blockHeight}`)}${entry.publishedAt ? colors.dim(` ${entry.publishedAt}`) : \"\"}`,\n );\n }\n console.log();\n return;\n }\n if (deployResult.fingerprint) {\n console.log(` ${colors.dim(\"Fingerprint:\")} ${deployResult.fingerprint}`);\n }\n if (deployResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n console.log();\n return;\n }\n\n if (deployResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Deploy failed`));\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n if (deployResult.deployResults && deployResult.deployResults.length > 0) {\n const failures = deployResult.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (deployResult.status === \"deployed\") {\n console.log();\n console.log(colors.green(`${icons.ok} Deployed successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.built && deployResult.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${deployResult.built.join(\", \")}`);\n }\n if (deployResult.skipped && deployResult.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${deployResult.skipped.join(\", \")}`);\n }\n if (deployResult.deployResults) {\n const warnings = deployResult.deployResults.flatMap((r: any) => r.warnings ?? []);\n if (warnings.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"⚠\")} Build warnings:`);\n for (const w of warnings) {\n console.log(` ${colors.dim(w)}`);\n }\n }\n }\n if (deployResult.image) {\n console.log(` ${colors.dim(\"Image:\")} ${deployResult.image}`);\n }\n if (deployResult.service) {\n console.log(` ${colors.dim(\"Railway:\")} deployed ${deployResult.service}`);\n }\n console.log();\n return;\n }\n\n if (deployResult.status === \"published\") {\n console.log();\n console.log(colors.yellow(`${icons.err} Config published, but a deploy leg failed`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n console.log();\n process.exit(1);\n }\n }\n\n if (descriptor.key === \"infraExport\") {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nvoid main().catch((error) => {\n console.error(\"[CLI] Fatal error:\", error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAS,gBAAgB,QAStB;CACD,QAAQ,IAAI;CACZ,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;CACvC,QAAQ,IAAI,KAAK,MAAM,IAAI,GAAG,UAAU,MAAM,QAAQ,GAAG;CACzD,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC;CAC1C,QAAQ,IAAI;CAEZ,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,IAAI,OAAO,KAAK,OAAO,OAAO,GAAG;CACxE,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,KAAK,OAAO,MAAM,OAAO,UAAU,gBAAgB,GAAG;CAC5F,IAAI,OAAO,SACT,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,IAAI,OAAO,QAAQ,OAAO,QAAQ,MAAM,GAAG;CAEpF,QAAQ,IAAI;AACd;AAEA,SAAS,cAAc,cAA8B;CAGnD,MAAM,SAFM,KAAK,IAEA,IADJ,IAAI,KAAK,YAAY,CAAC,CAAC,QACZ;CACxB,MAAM,WAAW,KAAK,MAAM,SAAS,GAAM;CAC3C,IAAI,WAAW,GAAG,OAAO;CACzB,IAAI,WAAW,IAAI,OAAO,GAAG,SAAS,SAAS,WAAW,IAAI,MAAM,GAAG;CACvE,MAAM,YAAY,KAAK,MAAM,WAAW,EAAE;CAC1C,IAAI,YAAY,IAAI,OAAO,GAAG,UAAU,OAAO,YAAY,IAAI,MAAM,GAAG;CACxE,MAAM,WAAW,KAAK,MAAM,YAAY,EAAE;CAC1C,IAAI,WAAW,IAAI,OAAO,GAAG,SAAS,MAAM,WAAW,IAAI,MAAM,GAAG;CACpE,OAAO,aAAa,MAAM,GAAG,CAAC,CAAC,MAAM;AACvC;AAEA,MAAM,0BAA0B;CAC9B;CACA;CACA;CACA;AACF;;;;;AAMA,SAAS,wBAAwB,mBAAyC;CAExE,KADsB,qBAAqB,CAAC,EAAC,CAAE,QAAQ,MAAM,wBAAwB,SAAS,CAAC,CAChF,CAAC,CAAC,WAAW,GAAG;CAC/B,QAAQ,IAAI,KAAK,OAAO,OAAO,wDAAwD,GAAG;CAC1F,QAAQ,IACN,OAAO,OAAO,IAAI,8EAA8E,GAClG;CACA,QAAQ,IACN,OAAO,OAAO,IAAI,mFAAmF,GACvG;CACA,QAAQ,IACN,OAAO,OAAO,IAAI,oFAAoF,GACxG;CACA,QAAQ,IACN,OAAO,OAAO,IAAI,0FAA0F,GAC9G;CACA,QAAQ,IAAI,OAAO,OAAO,IAAI,sDAAsD,GAAG;AACzF;AAEA,SAAS,mBAAmB,SAAkE;CAC5F,IAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;CAEtC,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,GAAG;CACzC,KAAK,MAAM,UAAU,SACnB,QAAQ,IAAI,OAAO,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC,EAAE,GAAG,eAAe,OAAO,UAAU,GAAG;CAE9F,QAAQ,IACN,OAAO,OAAO,IAAI,QAAQ,OAAO,EAAE,CAAC,EAAE,GAAG,eAAe,kBAAkB,OAAO,CAAC,GACpF;AACF;AAEA,SAAS,kBAAkB,SAAuB;CAChD,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,gBAAgB,EAAE,IAAI,QAAQ,cAAc;CACxE,IAAI,QAAQ,kBACV,QAAQ,IAAI,qBAAqB,OAAO,IAAI,QAAQ,gBAAgB,GAAG;CAEzE,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,UAAU,QAAQ,SAAS;CACnE,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,WAAW,QAAQ,UAAU,kBAAkB;CACtF,QAAQ,IAAI;CACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,GAAG;CACzC,QAAQ,IAAI,OAAO,OAAO,IAAI,MAAM,EAAE,MAAM,QAAQ,QAAQ,QAAQ,SAAS;CAC7E,QAAQ,IAAI,OAAO,OAAO,IAAI,IAAI,EAAE,OAAO,QAAQ,QAAQ,MAAM,SAAS;CAC1E,QAAQ,IAAI,OAAO,OAAO,IAAI,KAAK,EAAE,MAAM,QAAQ,QAAQ,OAAO,SAAS;CAC3E,IAAI,QAAQ,QAAQ,MAClB,QAAQ,IAAI,OAAO,OAAO,IAAI,MAAM,EAAE,MAAM,QAAQ,QAAQ,MAAM;CAEpE,IAAI,QAAQ,SAAS,SAAS,GAAG;EAC/B,QAAQ,IAAI;EACZ,KAAK,MAAM,KAAK,QAAQ,UACtB,QAAQ,IAAI,KAAK,OAAO,OAAO,CAAC,GAAG;CAEvC;CACA,QAAQ,IAAI;AACd;AAEA,SAAS,uBAAuB;CAC9B,IAAI,CAAC,QAAQ,OAAO,OAAO;CAC3B,QAAQ,OAAO,MAAM,uBAA6B;AACpD;AAEA,eAAe,eAAe,QAAa,SAAgC;CACzE,IAAI,CAAC;EAAC;EAAO;EAAS;CAAO,CAAC,CAAC,SAAS,OAAO,GAAG;CAElD,IAAI;EACF,MAAM,SAAS,MAAM,OAAO,OAAO;EACnC,IAAI,OAAO,WAAW,WAAW,CAAC,OAAO,UAAU;EAEnD,MAAM,oBAAoB,CAAC,kBAAkB,cAAc;EAE3D,MAAM,SAAS,OAAO,SAAS,QAAQ,MAA8B,EAAE,QAAQ;EAC/E,MAAM,WAAW,OAAO,SAAS,QAC9B,MACC,CAAC,EAAE,YACH,EAAE,aACF,EAAE,UACF,cAAc,EAAE,WAAW,EAAE,MAAM,IAAI,KACvC,kBAAkB,SAAS,EAAE,IAAI,CACrC;EAEA,IAAI,OAAO,SAAS,GAClB,KAAK,MAAM,OAAO,QAChB,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,uBAAuB,IAAI,UAAU,EAAE,CAAC;EAInF,IAAI,SAAS,WAAW,GAAG;EAE3B,MAAM,QAAQ,SAAiB;GAC7B,IAAI,YAAY,SAAS,YAAY,SAAS,QAAQ,OAAO,MAAM,GAAG,KAAK,GAAG;QACzE,QAAQ,IAAI,IAAI;EACvB;EACA,KAAK,EAAE;EACP,KAAK,OAAO,OAAO,iCAAiC,CAAC;EACrD,KAAK,MAAM,OAAO,UAChB,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,QAAQ,CAAC;EAEtE,KACE,OAAO,IACL,WAAW,OAAO,KAAK,aAAa,EAAE,6CACxC,CACF;EACA,KAAK,EAAE;CACT,QAAQ,CAER;AACF;AAEA,eAAe,OAAO;CACpB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;CAEjC,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;EAClD,UAAU;EACV;CACF;CAEA,MAAM,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK;CACtD,MAAM,UAAU,eAAe,MAAM;CAErC,MAAM,eAAe,sBAAsB,cAAc;CACzD,IAAI,CAAC,cAAc;EACjB,QAAQ,MAAM,oBAAoB,SAAS;EAC3C,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,EAAE,YAAY,aAAa;CACjC,MAAM,cAAc,eAAe,MAAM,QAAQ;CAKjD,IAAI;CACJ,IAAI;EACF,cAAc,kBAAkB,YAAY,WAAW;CACzD,SAAS,OAAO;EACd,QAAQ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;EAC/E,QAAQ,KAAK,CAAC;CAChB;CACA,MAAM,YAAY;CAElB,MAAM,gBAAgB,eAAe;CACrC,MAAM,aAAa,UAAU,cAAc;CAC3C,0BAA0B,EAAE,WAAW,CAAC;CAExC,MAAM,aAAa,gBAAgB,QAAQ,aAAa,IAAI;CAC5D,MAAM,aAAa,aAAa,wBAAwB,YAAY,gBAAgB,IAAI;CACxF,MAAM,iBAAiB,YAAY,mBAC/B,GAAG,WAAW,mBAAmB,WAAW,WAAW,cAAc,OACrE;CACJ,IAAI,CAAC,QAAQ,IAAI,eACf,YAAY,kBAAkB,cAAc;CAU9C,MAAM,gBAPU,oBAAoB;EAClC,UAAU,EACR,KAAK,EAAE,QAAQA,eAAU,EAC3B;EACA,SAAS,CAAC;CACZ,CAEiC;CAUjC,MAAM,UAAS,MATI,cAAc,UAAU,KAAK,aAClB,CAAC,CAAC,OAAO;EACrC,WAAW;GACT,YAAY,cAAc;GAC1B,WAAW,gBAAgB,QAAQ,aAAa,IAAI;EACtD;EACA,SAAS,CAAC;CACZ,CAAC,EAEoB,CAAC,aAAa;CAEX,eAAe,QAAQ,OAAO;CAEtD,IAAI;EACF,MAAM,QAAQ;EAEd,MAAM,gBAAgB;EAMtB,IACE,WAAW,QAAQ,cACnB,CAAC,cAAc,YACf,CAAC,cAAc,WACf,CAAC,cAAc,UACf;GACA,MAAM,UAAU,MAAO,OAAe,SAAS;IAAE,GAAG;IAAe,UAAU;GAAK,CAAC;GACnF,IAAI,QAAQ,WAAW,UAAU,CAAC,QAAQ,SAAS,QAAQ;IACzD,QAAQ,MAAM,QAAQ,SAAS,0BAA0B;IACzD,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IAAI;GACZ,MAAM,YAAY,MAAM,EAAE,OAAO;IAC/B,SAAS;IACT,SAAS,QAAQ,QAAQ,KACtB,WAKM;KACL,OAAO,OAAO,MAAM,WAAW;KAC/B,OAAO,GAAG,MAAM,eAAe,WAAW,MAAM,YAAY;KAC5D,MAAM,MAAM;IACd,EACF;GACF,CAAC;GACD,IAAI,EAAE,SAAS,SAAS,GACtB;GAEF,cAAc,UAAU;EAC1B;EAEA,IAAI,WAAW,QAAQ,cAAc;GACnC,MAAM,kBAAkB;GACxB,IAAI,gBAAgB,kBAAkB,QAAW;IAC/C,IAAI,QAAQ,MAAM,OAAO;KACvB,MAAM,WAAW,aAAa,MAAM,wBAAwB,QAAQ,UAAU,CAAC,IAAI;KACnF,MAAM,UACJ,gBAAgB,QAAQ,YACnB,UAAU,SAAS,WAAW,UAAU,UACzC,UAAU;KAChB,IAAI,SAA0B;KAC9B,IAAI,SAAS;MACX,MAAM,UAAU,uBAAuB,OAAO;MAC9C,MAAM,WAAW,+BAA+B,SAAS,gBAAgB,QAAQ;MACjF,IAAI;OACF,SAAS,MAAM,gBAAgB;QAAE;QAAS;QAAU;OAAQ,CAAC;MAC/D,QAAQ;OACN,SAAS;MACX;KACF;KACA,IAAI,QAAQ,QAAQ;MAClB,MAAM,gBAAgB,MAAM,EAAE,QAAQ;OACpC,SAAS,UAAU,OAAO,OAAO,uBAAuB,OAAO,SAAS,IAAI,MAAM,GAAG;OACrF,cAAc;MAChB,CAAC;MACD,IAAI,EAAE,SAAS,aAAa,GAC1B;MAEF,gBAAgB,gBAAgB;KAClC,OACE,gBAAgB,gBAAgB;IAEpC,OACE,gBAAgB,gBAAgB;GAEpC;EACF;EAEA,IAAI,WAAW,QAAQ,OAAO;GAC5B,MAAM,aAAa,EAAE,QAAQ;GAC7B,WAAW,MAAM,0BAA0B;GAE3C,MAAM,iBAAyC;IAC7C,eAAe;IACf,SAAS;IACT,OAAO;IACP,kBAAkB;IAClB,OAAO;IACP,qBAAqB;IACrB,sBAAsB;GACxB;GAEA,MAAM,iBAAiB,UAAyB;IAC9C,MAAM,QAAQ,eAAe,MAAM,UAAU,MAAM;IACnD,IAAI,MAAM,WAAW,WACnB,WAAW,QAAQ,KAAK;GAE5B;GACA,aAAa,GAAG,YAAY,aAAa;GAEzC,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,OAAO,IAAI,KAAmB;GAC/C,UAAU;IACR,aAAa,IAAI,YAAY,aAAa;GAC5C;GAEA,IAAI,OAAO,WAAW,SAAS;IAC7B,WAAW,KAAK,QAAQ;IACxB,QAAQ,MAAM,SAAS,OAAO,aAAa;IAC3C,QAAQ,KAAK,CAAC;GAChB;GAEA,WAAW,KAAK;GAChB,qBAAqB;GAErB,MAAM,UAAU,OAAO;GAEvB,IAAI,SAAS;IACX,MAAM,EAAE,WAAW,MAAM,OAAO;IAChC,OACE,cAAc,QAAQ,IAAI,GAC1B,QAAQ,cACR,QAAQ,UACR,QAAQ,eACR,QAAQ,cACR,QAAQ,QACV;GACF;GACA;EACF;EAEA,IAAI,WAAW,QAAQ,SAAS;GAC9B,MAAM,eAAe,EAAE,QAAQ;GAC/B,aAAa,MAAM,iCAAiC;GAEpD,MAAM,mBAA2C;IAC/C,QAAQ;IACR,sBAAsB;GACxB;GAEA,MAAM,mBAAmB,UAAyB;IAChD,MAAM,QAAQ,iBAAiB,MAAM,UAAU,MAAM;IACrD,IAAI,MAAM,WAAW,WACnB,aAAa,QAAQ,KAAK;GAE9B;GACA,aAAa,GAAG,YAAY,eAAe;GAE3C,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,OAAO,MAAM,KAAqB;GACnD,UAAU;IACR,aAAa,IAAI,YAAY,eAAe;GAC9C;GAEA,IAAI,OAAO,WAAW,SAAS;IAC7B,aAAa,KAAK,QAAQ;IAC1B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GAEA,aAAa,KAAK,OAAO;GAEzB,MAAM,UAAU,OAAO;GACvB,MAAM,UAAU,OAAO;GAEvB,IAAI,SAAS;IACX,IAAI,SACF,kBAAkB,OAAO;IAE3B,MAAM,EAAE,aAAa,MAAM,OAAO;IAClC,SACE,cAAc,QAAQ,IAAI,GAC1B,QAAQ,cACR,QAAQ,UACR,QAAQ,eACR,QAAQ,cACR,QAAQ,QACV;GACF;GACA;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,IAAI,YAAyB,EAAE,GAAI,MAAsB;GAEzD,IAAI,CAAC,UAAU,eAAe;IAC5B,MAAM,QAAQ,MAAM,gBAAgB;KAClC,SAAS,UAAU;KACnB,SAAS,UAAU;KACnB,QAAQ,UAAU;IACpB,CAAC;IAED,IAAI,mBAA6B,CAAC;IAClC,IAAI,eAIO;IAEX,MAAM,eAAe,EAAE,QAAQ;IAC/B,aAAa,MAAM,wBAAwB;IAC3C,IAAI;KACF,MAAM,SAAS,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,cAAc;KAC/E,eAAe,OAAO;KACtB,mBAAmB,OAAO;IAC5B,QAAQ;KACN,aAAa,KAAK,kBAAkB;KACpC,QAAQ,MACN,kCAAkC,MAAM,eAAe,GAAG,MAAM,gBAClE;KACA,QAAQ,KAAK,CAAC;IAChB;IACA,aAAa,KAAK,gBAAgB;IAElC,IACE,OAAO,cAAc,UAAU,YAC/B,aAAa,MAAM,KAAK,KACxB,OAAO,cAAc,gBAAgB,YACrC,aAAa,YAAY,KAAK,GAC9B;KACA,MAAM,iBAAiB,MAAM,EAAE,QAAQ;MACrC,SAAS,yBAAyB,aAAa,MAAM,KAAK,aAAa,YAAY;MACnF,cAAc;KAChB,CAAC;KAED,IAAI,EAAE,SAAS,cAAc,KAAK,CAAC,gBACjC,QAAQ,KAAK,CAAC;IAElB;IAEA,MAAM,YAAY,MAAM,oBAAoB;KAC1C;KACA,SAAS,UAAU;KACnB,WAAW,UAAU;KACrB,OAAO,UAAU;IACnB,CAAC;IAED,MAAM,YAAY,UAAU,aAAa,MAAM,UAAU,MAAM;IAE/D,YAAY;KACV,GAAG;KACH,SAAS,SAAS,MAAM,eAAe,GAAG,MAAM;KAChD;KACA,SAAS,MAAM;KACf,QAAQ,MAAM,UAAU;KACxB,SAAS,UAAU;KACnB,WAAW,UAAU;KACrB,OAAO,UAAU,SAAS,UAAU;KACpC,eAAe;IACjB;GACF;GAEA,MAAM,cAAc,EAAE,QAAQ;GAC9B,YAAY,MAAM,sBAAsB;GAExC,MAAM,cAAsC;IAC1C,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,2BAA2B;GAC7B;GAEA,MAAM,cAAc,UAAyB;IAC3C,MAAM,QAAQ,YAAY,MAAM,UAAU,MAAM;IAChD,IAAI,MAAM,WAAW,WACnB,YAAY,QAAQ,KAAK;GAE7B;GACA,aAAa,GAAG,YAAY,UAAU;GAEtC,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,OAAO,KAAK,SAAS;GACtC,UAAU;IACR,aAAa,IAAI,YAAY,UAAU;GACzC;GAEA,IAAI,OAAO,WAAW,SAAS;IAC7B,YAAY,KAAK,QAAQ;IACzB,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GAEA,YAAY,KAAK,qBAAqB;GAEtC,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,SAAS;GAC3D,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,GAAG,OAAO,WAAW;GAC/D,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,SAAS;GAC/E,IAAI,OAAO,QAAQ,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,GAAG,OAAO,QAAQ;GAC5E,IAAI,OAAO,aAAa,OAAO,UAAU,SAAS,GAChD,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,GAAG,OAAO,UAAU,KAAK,IAAI,GAAG;GAC5E,IAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,GAC5C,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,QAAQ,KAAK,IAAI,GAAG;GACxE,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,OAAO,aAAa;GACpE,mBAAmB,OAAO,OAAO;GACjC,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,IAAI,eAAe,CAAC;GACvC,QAAQ,IAAI,OAAO,IAAI,UAAU,OAAO,WAAW,CAAC;GACpD,IAAI,CAAC,UAAU,WACb,QAAQ,IAAI,OAAO,IAAI,kBAAkB,CAAC;QACrC;IACL,QAAQ,IAAI,OAAO,IAAI,kBAAkB,CAAC;IAC1C,QAAQ,IAAI,OAAO,IAAI,kBAAkB,CAAC;GAC5C;GACA,QAAQ,IAAI;GAEZ,IAAI,UAAU,kBAAkB,QAAQ,CAAC,UAAU,aAAa,OAAO,WAMrE;QAAI,MAL4B,EAAE,QAAQ;KACxC,SAAS;KACT,cAAc;IAChB,CAAC,MAEyB,MAAM;KAC9B,MAAM,gBAAgB,EAAE,QAAQ;KAChC,cAAc,MAAM,0BAA0B;KAC9C,MAAM,UAAU,MAAM,mBAAmB,OAAO,SAAS;KACzD,IAAI,QAAQ,IACV,cAAc,KAAK,uBAAuB;UACrC;MACL,cAAc,KAAK,6BAA6B;MAChD,EAAE,IAAI,KACJ,qCAAqC,QAAQ,OAAO,MAAM,QAAQ,SAAS,IAC7E;KACF;IACF;;GAGF;EACF;EAEA,MAAM,SAAS,MAAO,OAAe,WAAW,IAAI,CAAC,KAAK;EAE1D,IAAI,WAAW,QAAQ,YAAY;GACjC,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GAEA;EACF;EAEA,IAAI,WAAW,QAAQ,YAAY;GACjC,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,oBAAoB;IAC3D,QAAQ,KAAK,CAAC;GAChB;GAEA,MAAM,oBAAoB;IACxB,QAAQ,OAAO,WAAf;KACE,KAAK,WACH,OAAO;KACT,KAAK,SACH,OAAO;KACT,KAAK,aACH,OAAO;KACT,KAAK,6BACH,OAAO;KACT,KAAK,qBACH,OAAO;KACT,KAAK,gBACH,OAAO;KACT,SACE,OAAO;IACX;GACF,EAAC,CAAE;GAEH,QAAQ,IAAI,KAAK,WAAW,IAAI,OAAO,QAAQ;GAC/C,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,cAAc,GAAG,OAAO,cAAc;GACxF,QAAQ,IAAI,KAAK,OAAO,IAAI,mBAAmB,EAAE,GAAG,OAAO,qBAAqB;GAChF,QAAQ,IAAI,KAAK,OAAO,IAAI,iBAAiB,EAAE,GAAG,OAAO,kBAAkB;GAC3E,IAAI,OAAO,eAAe,SAAS,GACjC,QAAQ,IAAI,KAAK,OAAO,IAAI,kBAAkB,EAAE,GAAG,OAAO,eAAe,KAAK,IAAI,GAAG;GAEvF,IAAI,OAAO,cAAc,SAAS,GAChC,QAAQ,IAAI,KAAK,OAAO,OAAO,iBAAiB,EAAE,GAAG,OAAO,cAAc,KAAK,IAAI,GAAG;GAExF,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,GAAG,OAAO,WAAW;GAC/D,IAAI,OAAO,cACT,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,GAAG,OAAO,cAAc;GAEpE,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,YAAY;GACjC,IAAI,OAAO,WAAW,WAAW;IAC/B,QAAQ,IACN,KAAK,OAAO,OAAO,GAAG,EAAE,uBAAuB,OAAO,WAAW,UAAU,OAAO,SACpF;IACA,QAAQ,IAAI,KAAK,OAAO,SAAS;IACjC,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GAEA,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,KAAK,OAAO,MAAM,GAAG,EAAE,gBAAgB;IACrD,QAAQ,MAAM,KAAK,OAAO,SAAS;IACnC,QAAQ,MAAM;IACd,QAAQ,KAAK,CAAC;GAChB;GAEA,QAAQ,IAAI,KAAK,OAAO,MAAM,GAAG,EAAE,kBAAkB;GACrD,QAAQ,IAAI,KAAK,OAAO,SAAS;GACjC,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,UAAU;GAC/B,IAAI,CAAC,OAAO,QAAQ;IAClB,QAAQ,MAAM,sBAAsB;IACpC,QAAQ,KAAK,CAAC;GAChB;GAEA,gBAAgB,OAAO,MAAM;GAC7B,QAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,OAAO,QAAQ,MAAM,CAAC,EAAE,GAAG;GAClE;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,IAAK,MAAc,MAAM;IACvB,QAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;IAC3C;GACF;GACA,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GACA,IAAI,OAAO,WAAW,WACpB,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,GAAG,4BAA4B,CAAC;QAEjE,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;GAEhD,MAAM,iBACH,OAAO,SAAS,UAAU,KAAK,MAAM,OAAO,mBAAmB,UAAU,KAAK;GACjF,IACE,OAAO,QAAQ,SAAS,KACxB,OAAO,MAAM,SAAS,KACtB,OAAO,WAAW,SAAS,KAC3B,eACA;IACA,QAAQ,IACN,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,OAAO,QAAQ,OAAO,YAAY,OAAO,MAAM,OAAO,UAAU,OAAO,WAAW,OAAO,YAC/H;IACA,IAAI,OAAO,QAAQ,SAAS,GAC1B,KAAK,MAAM,KAAK,OAAO,SAAS,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;IAEpE,IAAI,OAAO,MAAM,SAAS,GACxB,KAAK,MAAM,KAAK,OAAO,OAAO,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;IAElE,IAAI,OAAO,WAAW,SAAS,GAAG;KAChC,QAAQ,IACN,KAAK,OAAO,OAAO,YAAY,EAAE,6CACnC;KACA,IAAI,OAAO,WAAW,QAAQ,IAAI,OAAO,OAAO,IAAI,OAAO,SAAS,GAAG;KACvE,KAAK,MAAM,KAAK,OAAO,YAAY,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;IACvE;IACA,IAAI,eAAe;KACjB,QAAQ,IAAI,KAAK,OAAO,OAAO,SAAS,EAAE,2CAA2C;KACrF,IAAI,OAAO,kBAAkB,QAAQ,IAAI,OAAO,OAAO,IAAI,OAAO,gBAAgB,GAAG;KACrF,KAAK,MAAM,KAAK,OAAO,qBAAqB,CAAC,GAC3C,QAAQ,IAAI,OAAO,OAAO,IAAI,GAAG,EAAE,aAAa,GAAG;KAErD,KAAK,MAAM,KAAK,OAAO,WAAW,CAAC,GAAG,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;KACxE,wBAAwB,OAAO,iBAAiB;IAClD;GACF;GACA,IACE,OAAO,QAAQ,WAAW,KAC1B,OAAO,MAAM,WAAW,KACxB,OAAO,WAAW,WAAW,KAC7B,CAAC,eAED,QAAQ,IAAI,KAAK,OAAO,IAAI,oBAAoB,GAAG;GAErD,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,WAAW;GAChC,IAAK,MAAc,MAAM;IACvB,QAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;IAC3C;GACF;GACA,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GACA,IAAI,OAAO,WAAW,WACpB,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,GAAG,8BAA8B,CAAC;QAEnE,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAC;GAE1D,MAAM,UAAU,OAAO,SAAS,MAC7B,MAAmD,EAAE,SAAS,gBACjE;GACA,MAAM,eACJ,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAK,GAAG,QAAQ,KAAK,KAAK,QAAQ,OAAO;GACrF,IAAI,cACF,QAAQ,IAAI,KAAK,OAAO,IAAI,2BAA2B,cAAc,GAAG;GAE1E,KAAK,MAAM,OAAO,OAAO,UAAU;IACjC,IAAI,IAAI,SAAS,kBAAkB;IACnC,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,IAC/B,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG;SAChE,IAAI,CAAC,IAAI,MACd,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,OAAO,GAAG;SAE7D,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,cAAc,GAAG;GAExE;GACA,IAAI,OAAO,cACT,QAAQ,IAAI,gBAAgB,OAAO,cAAc;GAEnD,IAAI,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,GAC5D,QAAQ,IAAI,oBAAoB,OAAO,gBAAgB,KAAK,IAAI,GAAG;GAErE,IAAI,OAAO,MAAM;IACf,MAAM,OAAO,OAAO;IACpB,MAAM,iBACH,KAAK,SAAS,UAAU,KAAK,MAAM,KAAK,mBAAmB,UAAU,KAAK;IAC7E,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,GAAG;IAC9C,IACE,KAAK,QAAQ,SAAS,KACtB,KAAK,MAAM,SAAS,KACpB,KAAK,WAAW,SAAS,KACzB,eACA;KACA,QAAQ,IACN,KAAK,KAAK,QAAQ,OAAO,YAAY,KAAK,MAAM,OAAO,UAAU,KAAK,WAAW,OAAO,YAC1F;KACA,IAAI,KAAK,WAAW,SAAS,GAAG;MAC9B,QAAQ,IACN,KAAK,OAAO,OAAO,YAAY,EAAE,6CACnC;MACA,IAAI,KAAK,WAAW,QAAQ,IAAI,OAAO,OAAO,IAAI,KAAK,SAAS,GAAG;MACnE,KAAK,MAAM,KAAK,KAAK,YAAY,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;KACrE;KACA,IAAI,eAAe;MACjB,QAAQ,IAAI,KAAK,OAAO,OAAO,SAAS,EAAE,2CAA2C;MACrF,IAAI,KAAK,kBAAkB,QAAQ,IAAI,OAAO,OAAO,IAAI,KAAK,gBAAgB,GAAG;MACjF,KAAK,MAAM,KAAK,KAAK,qBAAqB,CAAC,GACzC,QAAQ,IAAI,OAAO,OAAO,IAAI,GAAG,EAAE,aAAa,GAAG;MAErD,KAAK,MAAM,KAAK,KAAK,WAAW,CAAC,GAAG,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;MACtE,wBAAwB,KAAK,iBAAiB;KAChD;IACF,OACE,QAAQ,IAAI,KAAK,OAAO,IAAI,oBAAoB,GAAG;GAEvD;GACA,IAAI,OAAO,YAAY,OAAO,SAAS,SAAS,GAAG;IACjD,QAAQ,IAAI,eAAe,OAAO,SAAS,OAAO,SAAS;IAC3D,KAAK,MAAM,KAAK,OAAO,UAAU,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;GACrE;GACA,IAAI,gBAAiB,OAAO,QAAQ,OAAO,KAAK,WAAW,SAAS,GAAI;IACtE,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,IAAI,kBAAkB,CAAC;IAC1C,MAAM,aAAa;IACnB,MAAM,YACJ,SAAS,QAAQ,QAAQ,KACrB,IAAI,QAAQ,KAAK,QAAQ,cAAc,EAAE,EAAE,MAAM,QAAQ,GAAG,QAAQ,cAAc,EAAE,MACpF;IACN,QAAQ,IACN,OAAO,IACL,0CAA0C,YAAY,KAAK,UAAU,KAAK,GAAG,EAC/E,CACF;IACA,IAAI,OAAO,QAAQ,OAAO,KAAK,WAAW,SAAS,GAAG;KACpD,QAAQ,IACN,OAAO,IACL,KAAK,OAAO,KAAK,WAAW,OAAO,sEAAsE,OAAO,KAAK,aAAa,oBAAoB,EACxJ,CACF;KACA,QAAQ,IACN,OAAO,IACL,kFAAkF,aAAa,YAAY,YAAY,cAAc,IACvI,CACF;IACF;IACA,QAAQ,IACN,OAAO,IACL,yFACF,CACF;IACA,QAAQ,IAAI,OAAO,IAAI,sDAAsD,CAAC;GAChF;GACA,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,UAAU;GAC/B,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;GACvC,QAAQ,IAAI,KAAK,MAAM,IAAI,GAAG,UAAU,MAAM,QAAQ,GAAG;GACzD,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC;GAC1C,QAAQ,IAAI;GACZ,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,OAAO,OAAO,SAAS;GACnF,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,OAAO,OAAO,SAAS;GACnF,IAAI,OAAO,QAAQ,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,QAAQ,OAAO,QAAQ;GACjF,QAAQ,IAAI;GACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,WAAW,GAAG;GAC1C,KAAK,MAAM,OAAO,OAAO,UAAU;IACjC,MAAM,YACJ,IAAI,aAAa,IAAI,UAAU,cAAc,IAAI,WAAW,IAAI,MAAM,IAAI;IAC5E,MAAM,aAAa,YACf,GAAG,IAAI,UAAU,OAAO,IAAI,WAC5B,IAAI,aAAa;IACrB,MAAM,QAAQ,YAAY,OAAO,OAAO,UAAU,IAAI,OAAO,IAAI,UAAU;IAC3E,QAAQ,IAAI,OAAO,OAAO,IAAI,GAAG,IAAI,MAAM,EAAE,IAAI,OAAO;GAC1D;GACA,QAAQ,IAAI;GACZ,IAAI,OAAO,UAAU;IACnB,MAAM,MAAM,cAAc,OAAO,QAAQ;IACzC,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,KAAK,KAAK;GACtD,OACE,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,EAAE,SAAS;GAErD,MAAM,WACJ,OAAO,YAAY,UACf,OAAO,MAAM,OAAO,IACpB,OAAO,YAAY,iBACjB,OAAO,OAAO,mCAAmC,IACjD,OAAO,MAAM,SAAS;GAC9B,QAAQ,IAAI,KAAK,OAAO,IAAI,OAAO,EAAE,WAAW,UAAU;GAC1D,IAAI,OAAO,oBAAoB,QAAW;IACxC,MAAM,cAAc,OAAO,kBACvB,OAAO,MAAM,WAAW,IACxB,OAAO,MAAM,aAAa;IAC9B,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,QAAQ,aAAa;GAC9D;GAKA,IAJmB,OAAO,SAAS,MAChC,MACC,EAAE,aAAa,EAAE,UAAU,cAAc,EAAE,WAAW,EAAE,MAAM,IAAI,CAEzD,GAAG;IACd,QAAQ,IAAI;IACZ,QAAQ,IACN,OAAO,IACL,SAAS,OAAO,KAAK,aAAa,EAAE,6CACtC,CACF;GACF;GACA,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,MAAM;GAC3B,MAAM,WAAW;GACjB,QAAQ,IAAI;GACZ,IAAI,SAAS,WAAW,SAAS;IAC/B,QAAQ,MAAM,SAAS,SAAS,SAAS,iBAAiB;IAC1D,QAAQ,KAAK,CAAC;GAChB;GACA,MAAM,UAAU,SAAS,WAAW,CAAC;GACrC,IAAI,QAAQ,WAAW,GAAG;IACxB,QAAQ,IAAI,OAAO,IAAI,6CAA6C,CAAC;IACrE,QAAQ,IAAI;IACZ,QAAQ,IACN,OAAO,IAAI,oBAAoB,OAAO,KAAK,SAAS,EAAE,0BAA0B,CAClF;IACA,QAAQ,IAAI;IACZ;GACF;GACA,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;GACvC,QAAQ,IAAI,KAAK,MAAM,IAAI,GAAG,UAAU,MAAM,WAAW,GAAG;GAC5D,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC;GAC1C,QAAQ,IAAI;GACZ,KAAK,MAAM,SAAS,SAAS;IAC3B,MAAM,QAAQ,KAAK,IAAI,IAAI,MAAM;IACjC,MAAM,SACJ,QAAQ,MACJ,GAAG,KAAK,MAAM,QAAQ,GAAI,EAAE,KAC5B,QAAQ,OACN,GAAG,KAAK,MAAM,QAAQ,GAAM,EAAE,KAC9B,GAAG,KAAK,MAAM,QAAQ,IAAS,EAAE;IACzC,MAAM,UACJ,MAAM,SAAS,qBACX,OAAO,QAAQ,QAAQ,IACvB,MAAM,SAAS,oBACb,OAAO,KAAK,OAAO,IACnB,OAAO,IAAI,KAAK;IACxB,QAAQ,IAAI,KAAK,OAAO,MAAM,OAAO,MAAM,KAAK,EAAE,IAAI,QAAQ,IAAI,OAAO,IAAI,MAAM,GAAG;IACtF,QAAQ,IAAI,OAAO,OAAO,IAAI,MAAM,EAAE,MAAM,MAAM,WAAW;IAC7D,IAAI,MAAM,cAAc,QACtB,QAAQ,IAAI,OAAO,OAAO,IAAI,SAAS,EAAE,GAAG,MAAM,WAAW;IAE/D,MAAM,YAAY,OAAO,QAAQ,MAAM,SAAS,CAAC,CAAC,CAAC,CAChD,QAAQ,GAAG,OAAO,OAAO,MAAM,QAAQ,CAAC,CACxC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,GAAG;IAC9B,IAAI,UAAU,SAAS,GACrB,QAAQ,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE,IAAI,UAAU,KAAK,IAAI,GAAG;IAEpE,IAAI,MAAM,QACR,QAAQ,IAAI,OAAO,OAAO,IAAI,SAAS,EAAE,IAAI,MAAM,OAAO,IAAI,IAAI,MAAM,OAAO,IAAI,EAAE;IAEvF,QAAQ,IAAI,OAAO,OAAO,IAAI,OAAO,EAAE,KAAK,MAAM,aAAa;IAC/D,QAAQ,IAAI;GACd;GACA;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,MAAM,aAAa;GACnB,MAAM,OAAO;GACb,KAAK,MAAM,QAAQ,WAAW,OAC5B,QAAQ,IAAI,IAAI;GAElB,IAAI,WAAW,MAAM,WAAW,GAC9B,QAAQ,IAAI,OAAO,IAAI,8BAA8B,WAAW,QAAQ,EAAE,CAAC;GAE7E,IAAI,KAAK,QAAQ;IACf,IAAI,WAAW,YAAY,aAAa,CAAC,WAAW,WAAW,OAAO,GACpE,QAAQ,IAAI,OAAO,IAAI,sDAAsD,CAAC;SACzE;KACL,MAAM,SAAS,KAAK;KACpB,IAAI,aAAa;KACjB,KAAK,MAAM,QAAQ,WAAW,OAAO,cAAc,OAAO,WAAW,MAAM,MAAM,IAAI;KACrF,MAAM,eAAe,SAA0B;MAC7C,IAAI,CAAC,QAAQ,OAAO;MACpB,MAAM,SAAS,mCAAmC,KAAK,IAAI,CAAC,GAAG;MAC/D,OAAO,WAAW,UAAU,WAAW,UAAU;KACnD;KACA,MAAM,UAAU,MAAM,WAAW,UAAU,UAAU;MACnD,IAAI,UAAU,UAAU;MACxB,AAAK,SAAS,WAAW,SAAS,MAAM,CAAC,CACtC,MAAM,SAAS;OACd,MAAM,WAAW,KACd,MAAM,UAAU,CAAC,CACjB,MAAM,IAAI,CAAC,CACX,QAAQ,SAAS,KAAK,SAAS,KAAK,YAAY,IAAI,CAAC;OACxD,aAAa,OAAO,WAAW,MAAM,MAAM;OAC3C,KAAK,MAAM,QAAQ,UACjB,QAAQ,IAAI,IAAI;MAEpB,CAAC,CAAC,CACD,YAAY;OAEX,QAAQ,MAAM;MAChB,CAAC;KACL,CAAC;KACD,QAAQ,IAAI,OAAO,IAAI,+BAA+B,CAAC;KACvD,QAAQ,GAAG,gBAAgB;MACzB,QAAQ,MAAM;MACd,QAAQ,KAAK,CAAC;KAChB,CAAC;IACH;GACF;GACA;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,MAAM,aAAa;GACnB,QAAQ,IAAI;GACZ,IAAI,WAAW,WAAW,SAAS;IACjC,QAAQ,MAAM,SAAS,WAAW,SAAS,iBAAiB;IAC5D,QAAQ,KAAK,CAAC;GAChB;GACA,IAAI,WAAW,OAAO,SAAS,GAAG;IAChC,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,WAAW,OAAO,OAAO,gBAAgB,CAAC;IACvF,KAAK,MAAM,KAAK,WAAW,QACzB,QAAQ,IAAI,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,IAAI,EAAE,SAAS,GAAG;GAE7E;GACA,IAAI,WAAW,QAAQ,SAAS,GAAG;IACjC,QAAQ,IAAI,OAAO,OAAO,GAAG,MAAM,IAAI,GAAG,WAAW,QAAQ,OAAO,SAAS,CAAC;IAC9E,KAAK,MAAM,KAAK,WAAW,SACzB,QAAQ,IAAI,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,IAAI,EAAE,MAAM,GAAG;GAE1E;GACA,IAAI,WAAW,OAAO,WAAW,KAAK,WAAW,QAAQ,WAAW,GAAG;IACrE,MAAM,OAAO;IACb,IAAI,KAAK,KACP,QAAQ,IAAI,OAAO,IAAI,iCAAiC,CAAC;SACpD;KACL,MAAM,aAAa,eAAe;KAClC,MAAM,MAAM,KAAK,cAAc,aAAa,QAAQ,QAAQ,UAAU,CAAC,IAAI,QAAQ,IAAI;KACvF,QAAQ,IAAI,OAAO,IAAI,8BAA8B,KAAK,CAAC;KAC3D,QAAQ,IAAI,OAAO,IAAI,SAAS,OAAO,KAAK,OAAO,EAAE,iCAAiC,CAAC;IACzF;GACF;GACA,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,YAAY;GACjC,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAAC;GACvD,IAAI,OAAO,UAAU,SAAS,GAAG;IAC/B,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,GAAG;IACzC,KAAK,MAAM,KAAK,OAAO,WAAW,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;GACtE;GACA,IAAI,OAAO,QAAQ,SAAS,KAAK,OAAO,QAAQ,SAAS,KAAK,OAAO,OAAO,SAAS,GAAG;IACtF,QAAQ,IAAI,KAAK,OAAO,IAAI,mBAAmB,GAAG;IAClD,KAAK,MAAM,SAAS,OAAO,SAAS;KAClC,MAAM,QAAQ,MAAM,QAAQ,GAAG;KAC/B,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI;KACnD,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,QAAQ,CAAC,IAAI;KACrD,MAAM,YAAY,KAAK,QAAQ,GAAG;KAClC,MAAM,SAAS,cAAc,KAAK,KAAK,MAAM,YAAY,CAAC,IAAI;KAC9D,QAAQ,IACN,OAAO,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,MAAM,MAAM,IAC5E;IACF;IACA,KAAK,MAAM,SAAS,OAAO,SAAS;KAClC,MAAM,QAAQ,MAAM,QAAQ,GAAG;KAC/B,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI;KACnD,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,QAAQ,CAAC,IAAI;KACrD,IAAI,SAAS,mBAAmB;MAC9B,QAAQ,IAAI,OAAO,IAAI,GAAG,OAAO,IAAI,iBAAiB,GAAG;MACzD;KACF;KACA,MAAM,YAAY,KAAK,QAAQ,GAAG;KAClC,MAAM,SAAS,cAAc,KAAK,KAAK,MAAM,YAAY,CAAC,IAAI;KAC9D,QAAQ,IAAI,OAAO,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,MAAM,MAAM,IAAI;IAC1F;GACF;GACA,IAAI,OAAO,OAAO,SAAS,GAAG;IAC5B,QAAQ,IAAI,KAAK,OAAO,OAAO,SAAS,GAAG;IAC3C,KAAK,MAAM,KAAK,OAAO,QAAQ;KAC7B,MAAM,QAAQ,EAAE,QAAQ,IAAI;KAC5B,IAAI,UAAU,IACZ,QAAQ,IAAI,OAAO,OAAO,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG;UAEjF,QAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,GAAG;IAExC;GACF;GACA,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,aAAa;GAClC,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;IACxD,QAAQ,KAAK,CAAC;GAChB;GACA,MAAM,SAAS,OAAO,QAAQ,QAAQ,MAAgC,CAAC,EAAE,MAAM;GAC/E,MAAM,SAAS,OAAO,QAAQ,QAAQ,MAAgC,EAAE,MAAM;GAC9E,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;GACvC,QAAQ,IAAI,KAAK,MAAM,IAAI,GAAG,UAAU,MAAM,WAAW,GAAG;GAC5D,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC;GAC1C,QAAQ,IAAI;GACZ,KAAK,MAAM,KAAK,OAAO,SAAS;IAC9B,MAAM,OAAO,EAAE,SAAS,OAAO,MAAM,GAAG,IAAI,OAAO,MAAM,GAAG;IAC5D,QAAQ,IAAI,KAAK,KAAK,GAAG,EAAE,WAAW;GACxC;GACA,IAAI,OAAO,QAAQ,SAAS,GAC1B,QAAQ,IAAI,KAAK,OAAO,IAAI,YAAY,OAAO,QAAQ,KAAK,IAAI,GAAG,GAAG;GAExE,QAAQ,IAAI;GACZ,IAAI,OAAO,SAAS,GAAG;IACrB,QAAQ,IAAI,KAAK,OAAO,MAAM,GAAG,OAAO,OAAO,QAAQ,GAAG;IAC1D,KAAK,MAAM,KAAK,QACd,IAAI,EAAE,OAAO,QAAQ,IAAI,OAAO,OAAO,IAAI,EAAE,KAAK,GAAG;IAEvD,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IAAI,KAAK,OAAO,MAAM,GAAG,OAAO,OAAO,QAAQ,GAAG;GAC1D,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,WAAW;GAChC,QAAQ,IAAI;GACZ,QAAQ,IACN,KAAK,OAAO,IAAI,MAAM,EAAE,KAAK,OAAO,gBAAgB,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,EAAE,IAC9F,OAAO,eAAe,gBACrB,OAAO,aAAa,MAAM,OAAO,WAAW,KAAK,IACtD;GACA,KAAK,MAAM,KAAK,OAAO,SAAS;IAC9B,MAAM,MAAM,EAAE,KAAK,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM;IAC7D,QAAQ,IACN,KAAK,OAAO,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,IAAI,kBAAkB,EAAE,iBAAiB,MACtF,EAAE,SAAS,OAAO,EAAE,WAAW,IAEnC;GACF;GACA,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,MAAM;IAC1B,QAAQ,IACN,OAAO,MACL,kIACF,CACF;IACA,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IAAI,OAAO,MAAM,oDAAoD,CAAC;GAC9E,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,QAAQ,WAAW,WAAW,WAAW,QAAQ,aAAa,WAAW,QAAQ,UAAU;GAC7F,QAAQ,MAAM,SAAS,OAAO,SAAS,iBAAiB;GACxD,QAAQ,KAAK,CAAC;EAChB;EAEA,IAAI,WAAW,QAAQ,SAAS;GAC9B,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,gBAAgB,OAAO,SAAS,CAAC;GACtE,IAAI,OAAO,WAAW,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,WAAW;GACnF,IAAI,OAAO,WAAW,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,WAAW;GACnF,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,SAAS;GAC3E,IAAI,OAAO,YACT,QAAQ,IACN,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,OAAO,WAAW,UAAU,GAAG,OAAO,IACvE,IAAI,OAAO,WAAW,QAAQ,gBAAgB,OAAO,WAAW,WAAW,EAC7E,GACF;GAEF,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,UAAU;GAC/B,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;GAClD,IAAI,OAAO,eAAe,QAAQ,IAAI,KAAK,OAAO,IAAI,iBAAiB,GAAG;GAC1E,IAAI,OAAO,mBAAmB,QAAQ,IAAI,KAAK,OAAO,IAAI,8BAA8B,GAAG;GAC3F,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,SAAS;GAC3E,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,cAAc;GACnC,QAAQ,OAAO,MAAM,6BAA6B,OAAO,QAAQ,GAAG;GACpE,QAAQ,OAAO,MAAM,cAAc,OAAO,QAAQ,GAAG;GACrD,QAAQ,OAAO,MAAM,gBAAgB,OAAO,UAAU,GAAG;GACzD,QAAQ,OAAO,MAAM,IAAI;GACzB,MAAM,aAAa,OAAO,QAAQ,YAAY,6BAA6B;GAC3E,IAAI,CAAC,QAAQ,OAAO,OAClB,QAAQ,OAAO,MACb,0HACF;GAEF,QAAQ,OAAO,MACb,iBAAiB,WAAW,gDAC9B;GACA,QAAQ,OAAO,MAAM,GAAG,WAAW,GAAG,OAAO,WAAW,GAAG;EAC7D;EAEA,IAAI,WAAW,QAAQ,aAAa;GAClC,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,gBAAgB,OAAO,KAAK,CAAC;GAClE,IAAI,OAAO,aAAa,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,OAAO,aAAa;GAC3F,IAAI,OAAO,YAAY,QAAQ,IAAI,KAAK,OAAO,IAAI,aAAa,EAAE,GAAG,OAAO,YAAY;GACxF,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,gBAAgB;GACrC,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,kBAAkB,OAAO,KAAK,CAAC;GACpE,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,cAAc;GACnC,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;GACvC,QAAQ,IAAI,KAAK,MAAM,OAAO,GAAG,UAAU,MAAM,SAAS,GAAG;GAC7D,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC;GAC1C,QAAQ,IAAI;GACZ,IAAI,OAAO,QAAQ,WAAW,GAC5B,QAAQ,IAAI,OAAO,IAAI,yBAAyB,CAAC;QAEjD,KAAK,MAAM,cAAc,OAAO,SAAS;IACvC,QAAQ,IAAI,KAAK,OAAO,KAAK,WAAW,GAAG,GAAG;IAC9C,IAAI,WAAW,aACb,QAAQ,IAAI,OAAO,OAAO,IAAI,cAAc,EAAE,GAAG,WAAW,aAAa;IAC3E,IAAI,WAAW,YACb,QAAQ,IAAI,OAAO,OAAO,IAAI,aAAa,EAAE,GAAG,WAAW,YAAY;GAC3E;GAEF,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,iBAAiB;GACtC,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,oBAAoB,OAAO,KAAK,CAAC;GACtE,IAAI,OAAO,MAAM,QAAQ,IAAI,KAAK,OAAO,IAAI,OAAO,EAAE,GAAG,OAAO,MAAM;GACtE,IAAI,OAAO,YAAY,QAAQ,IAAI,KAAK,OAAO,IAAI,aAAa,EAAE,GAAG,OAAO,YAAY;GACxF,IAAI,OAAO,SAAS,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,SAAS;GAC/E,IAAI,OAAO,aAAa,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,OAAO,aAAa;GAC3F,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,eAAe;GACpC,QAAQ,IAAI;GACZ,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,MAAM,OAAO,MAAM,GAAG,MAAM,IAAI,GAAG,OAAO,SAAS,iBAAiB,CAAC;IAC7E,QAAQ,KAAK,CAAC;GAChB;GACA,QAAQ,IACN,OAAO,MACL,GAAG,MAAM,GAAG,GAAG,OAAO,WAAW,YAAY,YAAY,WAAW,QAAQ,OAAO,MACrF,CACF;GACA,KAAK,MAAM,WAAW,OAAO,SAC3B,QAAQ,IAAI,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,SAAS;GAEjD,IAAI,OAAO,YACT,QAAQ,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,GAAG,OAAO,YAAY;GAE/D,IAAI,OAAO,WAAW,WACpB,QAAQ,IAAI,OAAO,IAAI,iDAAiD,CAAC;GAE3E,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,WAAW;GAChC,IAAI,OAAO,WAAW,WAAW;IAC/B,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,GAAG,kBAAkB,CAAC;IACvD,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,OAAO,aAAa;IACpE,QAAQ,IAAI;IACZ;GACF;GAEA,IAAI,OAAO,WAAW,SAAS;IAC7B,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,IAAI,gBAAgB,CAAC;IACvD,IAAI,OAAO,OACT,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,OAAO,OAAO;IAEzD,IAAI,OAAO,iBAAiB,OAAO,cAAc,SAAS,GAAG;KAC3D,MAAM,WAAW,OAAO,cAAc,QAAQ,MAAW,CAAC,EAAE,OAAO;KACnE,IAAI,SAAS,SAAS,GAAG;MACvB,QAAQ,IAAI;MACZ,KAAK,MAAM,KAAK,UAAU;OACxB,MAAM,aAAa,EAAE,SAAS,SAAQ,CAAE,MAAM,IAAI,CAAC,CAAC;OACpD,QAAQ,IAAI,KAAK,OAAO,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,WAAW;MACnE;KACF;IACF;IACA,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GAEA,IAAI,OAAO,WAAW,aAAa;IACjC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,wBAAwB,CAAC;IAC9D,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,OAAO,aAAa;IACpE,IAAI,OAAO,QACT,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,OAAO,QAAQ;IAEhE,IAAI,OAAO,SAAS,OAAO,MAAM,SAAS,GACxC,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,OAAO,MAAM,KAAK,IAAI,GAAG;IAEpE,IAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,GAC5C,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,OAAO,QAAQ,KAAK,IAAI,GAAG;IAExE,IAAI,OAAO,eAAe;KACxB,MAAM,WAAW,OAAO,cAAc,SAAS,MAAW,EAAE,YAAY,CAAC,CAAC;KAC1E,IAAI,SAAS,SAAS,GAAG;MACvB,QAAQ,IAAI;MACZ,QAAQ,IAAI,KAAK,OAAO,OAAO,GAAG,EAAE,iBAAiB;MACrD,KAAK,MAAM,KAAK,UACd,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;KAEtC;IACF;IACA,QAAQ,IAAI;IACZ;GACF;EACF;EAEA,IAAI,WAAW,QAAQ,YAAY;GACjC,MAAM,iBAAiB;GACvB,IAAI,eAAe,WAAW,SAAS;IACrC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,IAAI,kBAAkB,CAAC;IACzD,IAAI,eAAe,OACjB,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,eAAe,OAAO;IAEjE,IAAI,eAAe,cAAc;KAC/B,QAAQ,IAAI;KACZ,KAAK,MAAM,SAAS,eAAe,cAAc;MAC/C,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,MAAM,EAAE,IAAI,OAAO,MAAM,MAAM,GAAG;MACvE,MAAM,SAAS,MAAM,SAAS,OAAO,IAAI,MAAM,MAAM,QAAQ,IAAI;MACjE,QAAQ,IAAI,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ;KAChD;IACF;IACA,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GAEA,IAAI,eAAe,WAAW,WAAW;IACvC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,GAAG,2BAA2B,CAAC;IAChE,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,eAAe,aAAa;IAC5E,QAAQ,IAAI;IACZ;GACF;GAEA,QAAQ,IAAI;GACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;GACnD,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,eAAe,aAAa;GAC5E,IAAI,eAAe,QACjB,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,eAAe,QAAQ;GAExE,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,WAAW,QAAQ,UAAU;GAC/B,MAAM,eAAe;GACrB,IAAI,aAAa,WAAW,QAAQ;IAClC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,KAAK,gCAAgC,CAAC;IACzD,KAAK,MAAM,SAAS,aAAa,WAAW,CAAC,GAC3C,QAAQ,IACN,KAAK,MAAM,eAAe,IAAI,OAAO,IAAI,SAAS,MAAM,aAAa,IAAI,MAAM,cAAc,OAAO,IAAI,KAAK,MAAM,aAAa,IAAI,IACtI;IAEF,QAAQ,IAAI;IACZ;GACF;GACA,IAAI,aAAa,aACf,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,aAAa,aAAa;GAE3E,IAAI,aAAa,WAAW,WAAW;IACrC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,GAAG,kBAAkB,CAAC;IACvD,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,aAAa,aAAa;IAC1E,QAAQ,IAAI;IACZ;GACF;GAEA,IAAI,aAAa,WAAW,SAAS;IACnC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,IAAI,eAAe,CAAC;IACtD,IAAI,aAAa,OACf,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,aAAa,OAAO;IAE/D,IAAI,aAAa,iBAAiB,aAAa,cAAc,SAAS,GAAG;KACvE,MAAM,WAAW,aAAa,cAAc,QAAQ,MAAW,CAAC,EAAE,OAAO;KACzE,IAAI,SAAS,SAAS,GAAG;MACvB,QAAQ,IAAI;MACZ,KAAK,MAAM,KAAK,UAAU;OACxB,MAAM,aAAa,EAAE,SAAS,SAAQ,CAAE,MAAM,IAAI,CAAC,CAAC;OACpD,QAAQ,IAAI,KAAK,OAAO,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,WAAW;MACnE;KACF;IACF;IACA,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;GAEA,IAAI,aAAa,WAAW,YAAY;IACtC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,MAAM,GAAG,MAAM,GAAG,uBAAuB,CAAC;IAC7D,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,aAAa,aAAa;IAC1E,IAAI,aAAa,QACf,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,aAAa,QAAQ;IAEtE,IAAI,aAAa,SAAS,aAAa,MAAM,SAAS,GACpD,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,aAAa,MAAM,KAAK,IAAI,GAAG;IAE1E,IAAI,aAAa,WAAW,aAAa,QAAQ,SAAS,GACxD,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,GAAG,aAAa,QAAQ,KAAK,IAAI,GAAG;IAE9E,IAAI,aAAa,eAAe;KAC9B,MAAM,WAAW,aAAa,cAAc,SAAS,MAAW,EAAE,YAAY,CAAC,CAAC;KAChF,IAAI,SAAS,SAAS,GAAG;MACvB,QAAQ,IAAI;MACZ,QAAQ,IAAI,KAAK,OAAO,OAAO,GAAG,EAAE,iBAAiB;MACrD,KAAK,MAAM,KAAK,UACd,QAAQ,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG;KAEtC;IACF;IACA,IAAI,aAAa,OACf,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,aAAa,OAAO;IAE/D,IAAI,aAAa,SACf,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,EAAE,YAAY,aAAa,SAAS;IAE5E,QAAQ,IAAI;IACZ;GACF;GAEA,IAAI,aAAa,WAAW,aAAa;IACvC,QAAQ,IAAI;IACZ,QAAQ,IAAI,OAAO,OAAO,GAAG,MAAM,IAAI,2CAA2C,CAAC;IACnF,QAAQ,IAAI,KAAK,OAAO,IAAI,eAAe,EAAE,GAAG,aAAa,aAAa;IAC1E,IAAI,aAAa,QACf,QAAQ,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,GAAG,aAAa,QAAQ;IAEtE,IAAI,aAAa,OACf,QAAQ,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,GAAG,aAAa,OAAO;IAE/D,QAAQ,IAAI;IACZ,QAAQ,KAAK,CAAC;GAChB;EACF;EAEA,IAAI,WAAW,QAAQ,eAAe;GACpC,QAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,GAAG;GAC3D;EACF;CACF,SAAS,OAAO;EACd,QAAQ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;EAC/E,QAAQ,KAAK,CAAC;CAChB;AACF;AAEK,KAAK,CAAC,CAAC,OAAO,UAAU;CAC3B,QAAQ,MAAM,sBAAsB,KAAK;CACzC,QAAQ,KAAK,CAAC;AAChB,CAAC"}
@@ -2,10 +2,10 @@ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
2
  const require_types = require('../types.cjs');
3
3
  const require_fastkv = require('../fastkv.cjs');
4
4
  const require_config = require('../config.cjs');
5
- const require_resolution_session = require('../resolution/session.cjs');
6
5
  const require_theme = require('../utils/theme.cjs');
7
- const require_shared = require('./shared.cjs');
8
6
  const require_image_deploy = require('../image-deploy.cjs');
7
+ const require_resolution_session = require('../resolution/session.cjs');
8
+ const require_shared = require('./shared.cjs');
9
9
  const require_rollback = require('../rollback.cjs');
10
10
  const require_publish = require('../publish.cjs');
11
11
  let node_fs = require("node:fs");
@@ -192,6 +192,12 @@ function registerDeploy(builder) {
192
192
  };
193
193
  }
194
194
  }
195
+ const imageDigestInput = input.imageDigest ?? node_process.default.env.BOS_IMAGE_DIGEST;
196
+ if (imageDigestInput && !require_image_deploy.isValidImageDigest(imageDigestInput)) return {
197
+ status: "error",
198
+ registryUrl: "",
199
+ error: `Invalid image digest "${imageDigestInput}" — expected sha256:<64 hex characters> (--image-digest / BOS_IMAGE_DIGEST)`
200
+ };
195
201
  const result = await require_publish.publishToFastKv({
196
202
  bosConfig: session.config,
197
203
  runtimeConfig: session.runtime,
@@ -238,25 +244,29 @@ function registerDeploy(builder) {
238
244
  let image;
239
245
  let imageDigest;
240
246
  let service;
241
- const imageRef = require_image_deploy.resolveImageRef({
242
- ciImage: nextSession.config?.ci?.image,
243
- repository: nextSession.config?.repository,
244
- env: node_process.default.env
247
+ const imagePlan = require_image_deploy.resolveDeployImagePlan({
248
+ imageRef: require_image_deploy.resolveImageRef({
249
+ ciImage: imageDigestInput ? void 0 : nextSession.config?.ci?.image,
250
+ repository: nextSession.config?.repository,
251
+ env: node_process.default.env
252
+ }),
253
+ imageDigest: imageDigestInput,
254
+ hasDocker: await require_image_deploy.hasDocker(),
255
+ hasDockerfile: (0, node_fs.existsSync)((0, node_path.join)(session.root, "Dockerfile"))
245
256
  });
246
- if (!imageRef) {
257
+ if (imagePlan.kind === "skip") {
247
258
  console.log();
248
- console.log(require_theme.colors.yellow(" Image skipped: set ci.image in bos.config.json (or BOS_IMAGE) to build and push the runtime image"));
249
- } else if (!await require_image_deploy.hasDocker()) {
259
+ console.log(require_theme.colors.yellow(` Image skipped: ${imagePlan.reason}`));
260
+ } else if (imagePlan.kind === "prebuilt") {
261
+ image = imagePlan.image;
262
+ imageDigest = imagePlan.digest;
250
263
  console.log();
251
- console.log(require_theme.colors.yellow(" Image skipped: docker is not available"));
252
- } else if (!(0, node_fs.existsSync)((0, node_path.join)(session.root, "Dockerfile"))) {
253
- console.log();
254
- console.log(require_theme.colors.yellow(" Image skipped: no Dockerfile at the config root"));
264
+ console.log(require_theme.colors.green(` ${require_theme.icons.ok} Using pre-pushed image ${imagePlan.image}@${imagePlan.digest.slice(0, 19)}…`));
255
265
  } else {
256
266
  console.log();
257
267
  try {
258
268
  const imageResult = await require_image_deploy.buildAndPushImage({
259
- image: imageRef.image,
269
+ image: imagePlan.image,
260
270
  configDir: session.root,
261
271
  verbose: input.verbose
262
272
  });
@@ -288,20 +298,18 @@ function registerDeploy(builder) {
288
298
  }
289
299
  if (!image || !imageDigest) {
290
300
  console.log();
291
- console.log(require_theme.colors.yellow(" Railway deploy skipped: no pushed image digest — set ci.image and install docker"));
301
+ console.log(require_theme.colors.yellow(" Railway deploy skipped: no runtime image digest — set ci.image (or pass BOS_IMAGE_DIGEST) and make the image available"));
292
302
  return {
293
303
  status: "published",
294
304
  ...configPublished,
295
305
  image,
296
306
  service: railwayService,
297
- error: "Config published but Railway deploy requires a pushed image (set ci.image and install docker)"
307
+ error: "Config published but Railway deploy requires a runtime image (set ci.image, or pass BOS_IMAGE_DIGEST for a pre-pushed image)"
298
308
  };
299
309
  }
300
310
  service = railwayService;
301
311
  try {
302
312
  await require_image_deploy.deployImageToRailway({
303
- image,
304
- digest: imageDigest,
305
313
  service: railwayService,
306
314
  configDir: session.root
307
315
  });