everything-dev 1.47.2 → 1.48.0

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 (63) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +2 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +32 -0
  3. package/dist/cli/db-doctor.cjs +131 -0
  4. package/dist/cli/db-doctor.cjs.map +1 -0
  5. package/dist/cli/db-doctor.mjs +130 -0
  6. package/dist/cli/db-doctor.mjs.map +1 -0
  7. package/dist/cli/db-repair.cjs +115 -0
  8. package/dist/cli/db-repair.cjs.map +1 -0
  9. package/dist/cli/db-repair.mjs +114 -0
  10. package/dist/cli/db-repair.mjs.map +1 -0
  11. package/dist/cli/db-studio.cjs +6 -0
  12. package/dist/cli/db-studio.cjs.map +1 -1
  13. package/dist/cli/db-studio.mjs +6 -0
  14. package/dist/cli/db-studio.mjs.map +1 -1
  15. package/dist/cli/init.cjs +4 -0
  16. package/dist/cli/init.cjs.map +1 -1
  17. package/dist/cli/init.d.cts.map +1 -1
  18. package/dist/cli/init.d.mts.map +1 -1
  19. package/dist/cli/init.mjs +4 -0
  20. package/dist/cli/init.mjs.map +1 -1
  21. package/dist/cli/sync.cjs +18 -2
  22. package/dist/cli/sync.cjs.map +1 -1
  23. package/dist/cli/sync.mjs +18 -2
  24. package/dist/cli/sync.mjs.map +1 -1
  25. package/dist/cli.cjs +46 -0
  26. package/dist/cli.cjs.map +1 -1
  27. package/dist/cli.mjs +46 -0
  28. package/dist/cli.mjs.map +1 -1
  29. package/dist/contract.cjs +46 -1
  30. package/dist/contract.cjs.map +1 -1
  31. package/dist/contract.d.cts +101 -17
  32. package/dist/contract.d.cts.map +1 -1
  33. package/dist/contract.d.mts +101 -17
  34. package/dist/contract.d.mts.map +1 -1
  35. package/dist/contract.meta.cjs +20 -0
  36. package/dist/contract.meta.cjs.map +1 -1
  37. package/dist/contract.meta.d.cts +26 -0
  38. package/dist/contract.meta.d.mts +26 -0
  39. package/dist/contract.meta.mjs +20 -0
  40. package/dist/contract.meta.mjs.map +1 -1
  41. package/dist/contract.mjs +43 -2
  42. package/dist/contract.mjs.map +1 -1
  43. package/dist/db.cjs +74 -0
  44. package/dist/db.cjs.map +1 -0
  45. package/dist/db.d.cts +23 -0
  46. package/dist/db.d.cts.map +1 -0
  47. package/dist/db.d.mts +23 -0
  48. package/dist/db.d.mts.map +1 -0
  49. package/dist/db.mjs +66 -0
  50. package/dist/db.mjs.map +1 -0
  51. package/dist/index.cjs +4 -0
  52. package/dist/index.d.cts +2 -2
  53. package/dist/index.d.mts +2 -2
  54. package/dist/index.mjs +2 -2
  55. package/dist/plugin.cjs +93 -0
  56. package/dist/plugin.cjs.map +1 -1
  57. package/dist/plugin.d.cts +46 -7
  58. package/dist/plugin.d.mts +46 -7
  59. package/dist/plugin.mjs +93 -0
  60. package/dist/plugin.mjs.map +1 -1
  61. package/dist/types.d.cts +2 -2
  62. package/dist/types.d.mts +2 -2
  63. package/package.json +8 -3
package/dist/plugin.cjs CHANGED
@@ -1160,6 +1160,99 @@ var plugin_default = (0, every_plugin.createPlugin)({
1160
1160
  };
1161
1161
  }
1162
1162
  }),
1163
+ dbDoctor: builder.dbDoctor.handler(async ({ input }) => {
1164
+ try {
1165
+ const configPath = require_config.findConfigPath();
1166
+ if (!configPath) return {
1167
+ status: "error",
1168
+ plugin: input.plugin,
1169
+ slug: "",
1170
+ journalTable: "",
1171
+ journalSchema: "",
1172
+ diagnosis: "error",
1173
+ localMigrationCount: 0,
1174
+ appliedHashCount: 0,
1175
+ expectedTables: [],
1176
+ missingTables: [],
1177
+ legacyCount: 0,
1178
+ error: "No bos.config.json"
1179
+ };
1180
+ const projectDir = (0, node_path.resolve)((0, node_path.dirname)(configPath));
1181
+ require_infra.loadProjectEnv(projectDir);
1182
+ const refreshed = await require_config.loadResolvedConfig({ cwd: projectDir });
1183
+ if (!refreshed) return {
1184
+ status: "error",
1185
+ plugin: input.plugin,
1186
+ slug: "",
1187
+ journalTable: "",
1188
+ journalSchema: "",
1189
+ diagnosis: "error",
1190
+ localMigrationCount: 0,
1191
+ appliedHashCount: 0,
1192
+ expectedTables: [],
1193
+ missingTables: [],
1194
+ legacyCount: 0,
1195
+ error: "Failed to load config"
1196
+ };
1197
+ const { resolvePluginDbInfo } = await Promise.resolve().then(() => require("./cli/db-studio.cjs"));
1198
+ const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);
1199
+ const { diagnosePlugin } = await Promise.resolve().then(() => require("./cli/db-doctor.cjs"));
1200
+ return {
1201
+ status: "success",
1202
+ ...await diagnosePlugin(info)
1203
+ };
1204
+ } catch (error) {
1205
+ return {
1206
+ status: "error",
1207
+ plugin: input.plugin,
1208
+ slug: "",
1209
+ journalTable: "",
1210
+ journalSchema: "",
1211
+ diagnosis: "error",
1212
+ localMigrationCount: 0,
1213
+ appliedHashCount: 0,
1214
+ expectedTables: [],
1215
+ missingTables: [],
1216
+ legacyCount: 0,
1217
+ error: error instanceof Error ? error.message : "Unknown error"
1218
+ };
1219
+ }
1220
+ }),
1221
+ dbRepair: builder.dbRepair.handler(async ({ input }) => {
1222
+ try {
1223
+ const configPath = require_config.findConfigPath();
1224
+ if (!configPath) return {
1225
+ status: "error",
1226
+ message: "No bos.config.json found",
1227
+ diagnosis: null,
1228
+ error: "No config"
1229
+ };
1230
+ const projectDir = (0, node_path.resolve)((0, node_path.dirname)(configPath));
1231
+ require_infra.loadProjectEnv(projectDir);
1232
+ const refreshed = await require_config.loadResolvedConfig({ cwd: projectDir });
1233
+ if (!refreshed) return {
1234
+ status: "error",
1235
+ message: "Failed to load config",
1236
+ diagnosis: null,
1237
+ error: "Config load failed"
1238
+ };
1239
+ const { resolvePluginDbInfo } = await Promise.resolve().then(() => require("./cli/db-studio.cjs"));
1240
+ const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);
1241
+ const { repairPlugin } = await Promise.resolve().then(() => require("./cli/db-repair.cjs"));
1242
+ const result = await repairPlugin(info, input.mode ?? "history-reset");
1243
+ return {
1244
+ ...result,
1245
+ error: result.status === "error" ? result.message : void 0
1246
+ };
1247
+ } catch (error) {
1248
+ return {
1249
+ status: "error",
1250
+ message: error instanceof Error ? error.message : "Unknown error",
1251
+ diagnosis: null,
1252
+ error: error instanceof Error ? error.message : "Unknown error"
1253
+ };
1254
+ }
1255
+ }),
1163
1256
  status: builder.status.handler(async () => {
1164
1257
  try {
1165
1258
  const configPath = require_config.findConfigPath();
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs","names":["EventEmitter","getPluginRef","fetchBosConfigFromFastKv","resolveExtendsRef","parseBosUrl","mergeBosConfigWithExtends","resolveConfigComposableEntries","BosConfigSchema","process","z","bosContract","Effect","loadResolvedConfig","getProjectRoot","loadLocalConfig","saveBosConfig","generateCodeArtifacts","fileExists","readJsonFile","run","parseDeployLines","extractPublishedUrl","computeSriHashForUrl","fetchRemotePluginManifest","detectLocalPackages","syncResolvedSharedDeps","buildEverythingDevQuietly","buildEveryPluginQuietly","getHostDevelopmentPort","buildRuntimeConfig","prepareDevelopmentRuntimeConfig","buildServiceDescriptorMap","buildDescription","buildRegistryConfigUrl","buildRuntimePluginsForConfig","findConfigPath","selectWorkspaceTargets","buildWorkspaceTargets","publishToFastKv","colors","getNetworkIdForAccount","getRegistryNamespaceForAccount","ensureNearCli","addFunctionCallAccessKey","fetchParentConfig","detectGitRemoteUrl","resolveSourceDir","scaffoldMinimalProject","personalizeConfig","buildInitPatterns","copyFilteredFiles","writeInitSnapshot","personalizeAgentsMd","runBunInstall","runTypesGen","generateDatabaseMigrations","syncTemplate","upgradeTemplate","getStatus"],"sources":["../src/plugin.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport process from \"node:process\";\nimport { Effect } from \"effect\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n buildEveryPluginQuietly,\n buildEverythingDevQuietly,\n buildWorkspaceTargets,\n fileExists,\n getPluginRef,\n readJsonFile,\n selectWorkspaceTargets,\n} from \"./build\";\nimport {\n ensureEnvFile,\n loadProjectEnv,\n syncGeneratedInfra,\n writeGeneratedInfra,\n} from \"./cli/infra\";\nimport {\n buildInitPatterns,\n copyFilteredFiles,\n detectGitRemoteUrl,\n fetchParentConfig,\n generateDatabaseMigrations,\n personalizeAgentsMd,\n personalizeConfig,\n removeInitLockfile,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n scaffoldMinimalProject,\n stripOrphanedWorkspacesFromLockfile,\n writeInitSnapshot,\n} from \"./cli/init\";\nimport { getStatus } from \"./cli/status\";\nimport { syncTemplate } from \"./cli/sync\";\nimport { upgradeTemplate } from \"./cli/upgrade\";\nimport { generateCodeArtifacts } from \"./code-artifacts\";\nimport {\n buildRuntimePluginsForConfig,\n drainConfigWarnings,\n findConfigPath,\n getHostDevelopmentPort,\n getProjectRoot,\n loadLocalConfig,\n loadResolvedConfig,\n resolveConfigComposableEntries,\n resumeWarnings,\n suppressWarnings,\n} from \"./config\";\nimport {\n type BosConfigResult,\n bosContract,\n type OverrideSection,\n type PhaseTiming,\n type PluginListResult,\n} from \"./contract\";\nimport {\n buildRegistryConfigUrl,\n fetchBosConfigFromFastKv,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n type PluginManifest,\n parseBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl, parseDeployLines } from \"./integrity\";\nimport { type BosEnv, mergeBosConfigWithExtends, resolveExtendsRef } from \"./merge\";\nimport { addFunctionCallAccessKey, ensureNearCli } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { extractPublishedUrl, publishToFastKv } from \"./publish\";\nimport { createPlugin, z } from \"./sdk\";\nimport {\n type AppOrchestrator,\n buildDescription,\n buildServiceDescriptorMap,\n type ServiceDescriptor,\n} from \"./service-descriptor\";\nimport { syncResolvedSharedDeps } from \"./shared-deps\";\nimport type { BosConfig, BosConfigInput, ExtendsConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { BosConfigSchema } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { saveBosConfig } from \"./utils/save-config\";\nimport { colors } from \"./utils/theme\";\n\nexport interface DevSessionData {\n orchestrator: AppOrchestrator;\n services: Map<string, ServiceDescriptor>;\n runtimeConfig: RuntimeConfig;\n}\n\nexport interface StartSummary {\n configSource: string;\n configSourceHttp?: string;\n account: string;\n domain?: string;\n modules: { host?: string; ui?: string; api?: string; auth?: string };\n warnings: string[];\n}\n\nexport type ProgressEvent = {\n phase: string;\n status: \"running\" | \"done\" | \"error\";\n durationMs?: number;\n message?: string;\n};\n\nexport const pluginEvents = new EventEmitter();\n\nlet pendingSession: DevSessionData | null = null;\nlet pendingStartSummary: StartSummary | null = null;\n\nexport function consumeDevSession(): (DevSessionData & { summary?: StartSummary }) | null {\n const data = pendingSession;\n const summary = pendingStartSummary;\n pendingSession = null;\n pendingStartSummary = null;\n if (!data) return null;\n return summary ? { ...data, summary } : data;\n}\n\nasync function timePhase<T>(\n timings: PhaseTiming[],\n name: string,\n fn: () => Promise<T>,\n): Promise<T> {\n pluginEvents.emit(\"progress\", { phase: name, status: \"running\" } satisfies ProgressEvent);\n const startedAt = Date.now();\n try {\n const result = await fn();\n timings.push({ name, durationMs: Date.now() - startedAt });\n pluginEvents.emit(\"progress\", {\n phase: name,\n status: \"done\",\n durationMs: Date.now() - startedAt,\n } satisfies ProgressEvent);\n return result;\n } catch (error) {\n pluginEvents.emit(\"progress\", {\n phase: name,\n status: \"error\",\n durationMs: Date.now() - startedAt,\n } satisfies ProgressEvent);\n throw error;\n }\n}\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildConfigResult(\n bosConfig: BosConfigInput | BosConfig | null,\n full = false,\n): BosConfigResult {\n const packages =\n bosConfig?.app && typeof bosConfig.app === \"object\" ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig ?? null,\n packages,\n remotes,\n full,\n };\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const ref = getPluginRef(attachment);\n const source = ref?.development ?? ref?.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => {\n const ref = getPluginRef(attachment);\n return {\n key,\n development: ref?.development,\n production: ref?.production,\n localPath: ref?.development?.startsWith(\"local:\")\n ? ref.development.slice(\"local:\".length)\n : undefined,\n source: ref?.development?.startsWith(\"local:\") ? (\"local\" as const) : (\"remote\" as const),\n integrity: ref?.integrity,\n version: ref?.version,\n name: ref?.name,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nexport async function resolveRemoteConfigChain(\n accountId: string,\n gatewayId: string,\n visited: Set<string>,\n): Promise<BosConfig> {\n const selfRef = `bos://${accountId}/${gatewayId}`;\n if (visited.has(selfRef)) {\n throw new Error(`Circular extends detected: ${selfRef}`);\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(selfRef);\n\n const config = await fetchBosConfigFromFastKv<BosConfigInput>(selfRef);\n const parentRef = config.extends\n ? resolveExtendsRef(config.extends as string | ExtendsConfig, \"production\")\n : undefined;\n\n let merged: BosConfigInput;\n if (!parentRef) {\n merged = config;\n } else {\n const { accountId: parentAccountId, gatewayId: parentGatewayId } = parseBosUrl(parentRef);\n const parentResolved = await resolveRemoteConfigChain(\n parentAccountId,\n parentGatewayId,\n nextVisited,\n );\n merged = mergeBosConfigWithExtends(parentResolved as BosConfigInput, config);\n }\n\n return resolveConfigComposableEntries(BosConfigSchema.parse(merged), process.cwd(), \"production\");\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await resolveRemoteConfigChain(accountId, gatewayId, new Set());\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"No config found\")) {\n return null;\n }\n throw error;\n }\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config) =>\n Effect.promise(async () => {\n const configResult = await loadResolvedConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps, builder) => ({\n config: builder.config.handler(async ({ input }) => {\n if (input.full) {\n return buildConfigResult(deps.bosConfig, true);\n }\n\n const localConfig = await loadLocalConfig({ cwd: deps.configDir });\n return buildConfigResult(localConfig?.config ?? null, false);\n }),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const isBosRef = input.source.startsWith(\"bos://\");\n const isLocal = input.source.startsWith(\"local:\");\n const key = sanitizePluginKey(\n input.as ??\n (isBosRef ? (input.source.split(\"/\").pop() ?? \"plugin\") : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const existingEntry = existing && typeof existing === \"object\" ? existing : {};\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n if (isBosRef) {\n nextPlugins[key] = {\n ...existingEntry,\n extends: input.source,\n };\n } else if (isLocal) {\n nextPlugins[key] = {\n ...existingEntry,\n development: input.source,\n ...(existingEntry.extends ? {} : {}),\n };\n } else {\n nextPlugins[key] = {\n ...existingEntry,\n production: input.production ?? input.source,\n };\n }\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n const stored = deps.bosConfig.plugins?.[key];\n const storedObj = stored && typeof stored === \"object\" ? stored : {};\n\n return {\n status: \"added\" as const,\n key,\n development: storedObj.development,\n production: storedObj.production,\n integrity: storedObj.integrity,\n version: storedObj.version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n }),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const attachmentRef = getPluginRef(attachment);\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await fileExists(pkgPath))) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = await readJsonFile<{\n scripts?: Record<string, string>;\n name?: string;\n version?: string;\n }>(pkgPath);\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n const output = `${stdout}\\n${stderr}`;\n const deployEntries = parseDeployLines(output);\n const deployEntry = deployEntries.find(\n (e) => e.urlField === `plugins.${input.key}.production`,\n );\n\n let publishedUrl: string | undefined;\n let integrity: string | undefined;\n if (deployEntry) {\n publishedUrl = deployEntry.url;\n integrity = deployEntry.integrity;\n } else {\n publishedUrl = extractPublishedUrl(output) ?? undefined;\n integrity = publishedUrl\n ? ((await computeSriHashForUrl(publishedUrl)) ?? undefined)\n : undefined;\n }\n\n let manifest: PluginManifest | null = null;\n if (publishedUrl) {\n manifest = await fetchRemotePluginManifest(publishedUrl);\n } else if (attachmentRef?.production) {\n manifest = await fetchRemotePluginManifest(attachmentRef.production);\n if (manifest) {\n publishedUrl = attachmentRef.production;\n }\n }\n\n const version = manifest?.plugin.version ?? pkgJson.version;\n\n if (publishedUrl) {\n const rootConfigPath = join(deps.configDir, \"bos.config.json\");\n try {\n const rootConfig = JSON.parse(readFileSync(rootConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n if (!rootConfig.plugins || typeof rootConfig.plugins !== \"object\") {\n rootConfig.plugins = {};\n }\n const plugins = rootConfig.plugins as Record<string, unknown>;\n if (!plugins[input.key] || typeof plugins[input.key] !== \"object\") {\n plugins[input.key] = {};\n }\n const entry = plugins[input.key] as Record<string, unknown>;\n entry.production = publishedUrl;\n if (integrity) {\n entry.integrity = integrity;\n } else {\n delete entry.integrity;\n }\n writeFileSync(rootConfigPath, `${JSON.stringify(rootConfig, null, 2)}\\n`);\n console.log(` ✅ Updated bos.config.json: plugins.${input.key}.production`);\n } catch (err) {\n console.error(\n ` ❌ Failed to update bos.config.json:`,\n err instanceof Error ? err.message : err,\n );\n }\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachmentRef?.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n }),\n\n dev: builder.dev.handler(async ({ input }) => {\n const devTimings: PhaseTiming[] = [];\n\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const hostSource: SourceMode = localPackages.includes(\"host\")\n ? parseSourceMode(input.host, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth, \"local\")\n : \"remote\";\n const ssr = input.ssr ?? false;\n const proxy = input.proxy ?? false;\n\n const sharedSync = await timePhase(devTimings, \"shared deps\", () =>\n syncResolvedSharedDeps({\n configDir: deps.configDir,\n hostMode: hostSource,\n bosConfig: deps.bosConfig ?? undefined,\n extendsChain: [],\n }),\n );\n let configMayHaveChanged = false;\n if (sharedSync.catalogChanged) {\n await timePhase(devTimings, \"install\", () =>\n run(\"bun\", [\"install\"], { cwd: deps.configDir }),\n );\n configMayHaveChanged = true;\n }\n const shouldBuildPlugin =\n (apiSource === \"local\" && !proxy) || localPackages.some((pkg) => pkg.startsWith(\"plugin:\"));\n\n await timePhase(devTimings, \"build\", async () => {\n const buildTasks: Promise<void>[] = [buildEverythingDevQuietly(deps.configDir)];\n if (shouldBuildPlugin) {\n buildTasks.push(buildEveryPluginQuietly(deps.configDir));\n }\n await Promise.all(buildTasks);\n });\n\n let devExtendsChain: string[] | undefined;\n if (configMayHaveChanged || input.remotePlugins?.length) {\n const refreshed = await timePhase(devTimings, \"resolve config\", () =>\n loadResolvedConfig({\n cwd: deps.configDir,\n remotePlugins: input.remotePlugins,\n }),\n );\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n devExtendsChain = refreshed?.source.extended;\n }\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n timings: devTimings,\n };\n }\n\n if (proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n timings: devTimings,\n };\n }\n\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n suppressWarnings();\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource,\n apiSource,\n authSource,\n hostSource,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n const runtimeConfig = await timePhase(devTimings, \"ports\", () =>\n prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr,\n }),\n );\n\n syncGeneratedInfra(deps.configDir, runtimeConfig);\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n await timePhase(devTimings, \"generate artifacts\", () =>\n generateCodeArtifacts(deps.configDir, deps.bosConfig!, {\n env: \"development\",\n extendsChain: devExtendsChain,\n runtimeConfig,\n }),\n );\n\n const services = buildServiceDescriptorMap(runtimeConfig, { ssr, proxy });\n const packages = [...services.keys()];\n if (process.env.DEBUG === \"true\" || process.env.DEBUG === \"1\") {\n console.error(\"[DEBUG dev] services keys:\", packages.join(\", \"));\n console.error(\n \"[DEBUG dev] services sources:\",\n packages.map((k) => `${k}=${services.get(k)?.source ?? \"?\"}`).join(\", \"),\n );\n console.error(\n \"[DEBUG dev] runtimeConfig.plugins keys:\",\n Object.keys(runtimeConfig.plugins ?? {}).join(\", \"),\n );\n console.error(\n \"[DEBUG dev] runtimeConfig.plugins sources:\",\n Object.entries(runtimeConfig.plugins ?? {})\n .map(([k, v]) => `${k}=${v.source}`)\n .join(\", \"),\n );\n }\n const displayEnv: Record<string, string> = {};\n const apiDescriptor = services.get(\"api\");\n if (apiDescriptor?.proxy) {\n const proxyUrl = resolveProxyUrl(deps.bosConfig);\n if (proxyUrl) displayEnv.API_PROXY = proxyUrl;\n }\n\n const orchestrator: AppOrchestrator = {\n packages,\n env: displayEnv,\n description: buildDescription(services),\n port: runtimeConfig.host.port,\n interactive: input.interactive,\n };\n\n pendingSession = { orchestrator, services, runtimeConfig };\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes: packages,\n timings: devTimings,\n };\n }),\n\n start: builder.start.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n pluginEvents.emit(\"progress\", { phase: \"config\", status: \"running\" } satisfies ProgressEvent);\n\n const bosEnv = input.env ?? (process.env.BOS_ENV === \"staging\" ? \"staging\" : \"production\");\n const account = input.account ?? process.env.BOS_ACCOUNT;\n const domain = input.domain ?? process.env.BOS_GATEWAY;\n\n let config: BosConfig | null = null;\n let remoteConfig: BosConfig | null = null;\n\n if (account && domain) {\n try {\n remoteConfig = await fetchPublishedConfig(account, domain);\n if (remoteConfig) {\n config = remoteConfig;\n } else {\n return {\n status: \"error\" as const,\n url: \"\",\n error: `No config found at bos://${account}/${domain}. Verify the account and gateway are correct and the config has been published.\\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`,\n };\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n url: \"\",\n error: `Failed to fetch config for bos://${account}/${domain}: ${error instanceof Error ? error.message : \"Unknown error\"}\\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`,\n };\n }\n } else {\n config = deps.bosConfig;\n }\n\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n error:\n \"No configuration found. Provide --account and --gateway flags, or create a local bos.config.json.\",\n };\n }\n\n // Apply runtime overrides from CLI flags / env vars\n if (account) {\n config = { ...config, account };\n }\n if (domain) {\n config = { ...config, domain };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const isStaging = bosEnv === \"staging\";\n const runtimePlugins = await buildRuntimePluginsForConfig(\n config,\n deps.configDir,\n \"production\",\n );\n suppressWarnings();\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n authSource: \"remote\",\n hostSource: \"remote\",\n env: \"production\",\n plugins: runtimePlugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n\n if (isStaging && config.staging?.domain) {\n runtimeConfig.domain = config.staging.domain;\n }\n\n if (isStaging) {\n runtimeConfig.env = \"staging\";\n }\n\n syncGeneratedInfra(deps.configDir, runtimeConfig);\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n pluginEvents.emit(\"progress\", {\n phase: \"generate artifacts\",\n status: \"running\",\n } satisfies ProgressEvent);\n await generateCodeArtifacts(deps.configDir, config, {\n env: \"production\",\n runtimeConfig,\n });\n pluginEvents.emit(\"progress\", {\n phase: \"generate artifacts\",\n status: \"done\",\n } satisfies ProgressEvent);\n\n // ── Production Readiness Validation ──\n const productionEnv: Record<string, string> = {};\n const warnings: string[] = [];\n\n // Default CORS_ORIGIN to the configured domain if not set\n if (!process.env.CORS_ORIGIN && config.domain) {\n const effectiveDomain = isStaging\n ? (config.staging?.domain ?? config.domain)\n : config.domain;\n const defaultOrigin = `https://${effectiveDomain}`;\n productionEnv.CORS_ORIGIN = defaultOrigin;\n warnings.push(`CORS_ORIGIN defaulting to ${defaultOrigin}`);\n }\n\n // Validate required secrets\n const requiredSecrets = new Set<string>();\n const missingSecrets: string[] = [];\n\n if (runtimeConfig.host.secrets) {\n for (const s of runtimeConfig.host.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.auth?.secrets) {\n for (const s of runtimeConfig.auth.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.api?.secrets) {\n for (const s of runtimeConfig.api.secrets) requiredSecrets.add(s);\n }\n for (const plugin of Object.values(runtimeConfig.plugins ?? {})) {\n if (plugin.secrets) {\n for (const s of plugin.secrets) requiredSecrets.add(s);\n }\n }\n\n for (const secret of requiredSecrets) {\n const value = process.env[secret];\n if (!value || value.length === 0) {\n missingSecrets.push(secret);\n }\n }\n\n if (missingSecrets.length > 0) {\n warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(\", \")}`);\n }\n\n const services = buildServiceDescriptorMap(runtimeConfig);\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const configSource = remoteConfig\n ? `bos://${account}/${domain}`\n : (findConfigPath() ?? \"bos.config.json\");\n\n const configSourceHttp =\n remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : undefined;\n\n const summary: StartSummary = {\n configSource,\n configSourceHttp,\n account: config.account,\n domain: config.domain ?? undefined,\n modules: {\n host: runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? \"local\",\n ui: runtimeConfig.ui.url ?? \"local\",\n api: runtimeConfig.api.url ?? \"local\",\n auth: runtimeConfig.auth?.url ?? undefined,\n },\n warnings,\n };\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...productionEnv,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n pendingSession = { orchestrator, services, runtimeConfig };\n pendingStartSummary = summary;\n\n pluginEvents.emit(\"progress\", { phase: \"config\", status: \"done\" } satisfies ProgressEvent);\n\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const buildEnv: BosEnv = input.deploy ? \"production\" : \"development\";\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n suppressWarnings();\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n authSource: deps.bosConfig.app.auth?.development ? \"local\" : \"remote\",\n hostSource: deps.bosConfig.app.host?.development ? \"local\" : \"remote\",\n env: buildEnv,\n plugins: deps.runtimeConfig?.plugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: buildEnv,\n runtimeConfig,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const result = await publishToFastKv({\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n configDir: deps.configDir,\n env: input.env,\n build: input.deploy,\n dryRun: input.dryRun,\n verbose: input.verbose,\n packages: input.packages,\n network: input.network,\n privateKey: input.privateKey,\n });\n\n if (result.publishConfig) {\n const refreshed = await loadResolvedConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n }\n }\n\n return {\n status: result.status,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n error: result.error,\n built: result.built,\n skipped: result.skipped,\n deployResults: result.deployResults,\n };\n }),\n\n deploy: builder.deploy.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n redeployed: false,\n error: \"No bos.config.json found\",\n };\n }\n\n const result = await publishToFastKv({\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n configDir: deps.configDir,\n env: input.env,\n build: input.build,\n dryRun: input.dryRun,\n verbose: input.verbose,\n packages: input.packages,\n network: input.network,\n privateKey: input.privateKey,\n });\n\n if (result.status === \"error\") {\n return {\n status: \"error\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n error: result.error,\n deployResults: result.deployResults,\n };\n }\n\n if (result.status === \"dry-run\") {\n return {\n status: \"dry-run\" as const,\n registryUrl: result.registryUrl,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n };\n }\n\n if (result.publishConfig) {\n const refreshed = await loadResolvedConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n }\n }\n\n let redeployed = false;\n let service: string | undefined;\n\n if (process.env.RAILWAY_TOKEN) {\n const railwayService = input.service ?? deps.bosConfig.ci?.railway?.service;\n if (!railwayService) {\n console.log();\n console.log(\n colors.yellow(\n \" Railway redeploy skipped: ci.railway.service is not configured in bos.config.json\",\n ),\n );\n return {\n status: \"published\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n deployResults: result.deployResults,\n error:\n \"Config published but Railway redeploy failed: ci.railway.service is not configured in bos.config.json\",\n };\n }\n\n service = railwayService;\n console.log();\n console.log(` Redeploying Railway service ${colors.cyan(railwayService)}...`);\n try {\n const railResult = await run(\n \"railway\",\n [\"redeploy\", \"--service\", railwayService, \"--yes\"],\n {\n capture: true,\n },\n );\n if (railResult?.stdout) {\n for (const line of railResult.stdout.split(\"\\n\")) {\n if (line.trim()) console.log(` ${colors.dim(line.trim())}`);\n }\n }\n redeployed = true;\n console.log(colors.green(` Railway redeploy complete`));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const railError =\n message.includes(\"not found\") || message.includes(\"ENOENT\")\n ? \"Railway CLI not found. Install it: npm i -g @railway/cli\"\n : `Railway redeploy failed: ${message}`;\n console.log(colors.yellow(` ${railError}`));\n return {\n status: \"published\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n service,\n deployResults: result.deployResults,\n error: `Config published but ${railError}`,\n };\n }\n } else {\n console.log();\n console.log(colors.yellow(\" Railway redeploy skipped (RAILWAY_TOKEN not set)\"));\n }\n\n return {\n status: \"deployed\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed,\n service,\n deployResults: result.deployResults,\n };\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }) => {\n try {\n const timings: PhaseTiming[] = [];\n let extendsAccount = \"\";\n let extendsGateway = \"\";\n let directory = input.directory;\n const account = input.account;\n const domain = input.domain;\n let overrides = input.overrides as OverrideSection[] | undefined;\n let plugins = input.plugins;\n\n if (input.extends) {\n const normalized = input.extends.startsWith(\"bos://\")\n ? input.extends\n : `bos://${input.extends}`;\n const match = normalized.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (match) {\n extendsAccount = match[1];\n extendsGateway = match[2];\n }\n }\n\n extendsAccount = extendsAccount || \"dev.everything.near\";\n extendsGateway = extendsGateway || \"everything.dev\";\n\n let parentPluginKeys: string[] = [];\n let parentConfig: BosConfig | null = null;\n try {\n parentConfig = await timePhase(timings, \"parent config\", () =>\n fetchParentConfig(extendsAccount, extendsGateway),\n );\n if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n parentPluginKeys = Object.keys(parentConfig.plugins);\n }\n } catch (e) {\n console.warn(\n `[init] Failed to fetch parent config from ${extendsAccount}/${extendsGateway}: ${e instanceof Error ? e.message : e}`,\n );\n }\n\n overrides = overrides?.length ? overrides : ([\"ui\", \"api\"] as OverrideSection[]);\n if (overrides.includes(\"plugins\") && plugins === undefined) {\n plugins = parentPluginKeys;\n }\n plugins = plugins ?? [];\n\n const pluginDirMap: Record<string, string> = {};\n if (parentConfig?.plugins) {\n for (const plugin of plugins) {\n const entry = (parentConfig.plugins as Record<string, unknown>)?.[plugin];\n if (entry && typeof entry === \"object\") {\n const dev = (entry as Record<string, unknown>).development;\n if (typeof dev === \"string\") {\n const match = dev.match(/^local:plugins\\/(.+)$/);\n if (match?.[1] && match[1] !== plugin) pluginDirMap[plugin] = match[1];\n }\n }\n }\n }\n\n directory = directory || domain || extendsGateway;\n const targetDir = resolve(directory);\n const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;\n\n const repository =\n (await detectGitRemoteUrl(process.cwd()).catch(() => undefined)) ??\n parentConfig?.repository;\n\n if (!parentConfig) {\n try {\n parentConfig = await timePhase(timings, \"parent config\", () =>\n fetchParentConfig(extendsAccount, extendsGateway),\n );\n } catch {\n return {\n status: \"error\" as const,\n directory,\n extendsRef,\n account,\n domain,\n extends: extendsRef,\n plugins,\n overrides,\n filesCopied: 0,\n timings,\n error: `No config found at ${extendsRef} — are you sure this is the right parent?`,\n };\n }\n }\n\n const {\n sourceDir,\n parentConfig: resolvedParentConfig,\n cleanup,\n } = await timePhase(timings, \"template source\", () =>\n resolveSourceDir({\n extendsAccount,\n extendsGateway,\n source: input.source,\n }),\n );\n\n parentConfig = resolvedParentConfig;\n\n const isMinimalScaffold = sourceDir === \"\";\n\n try {\n let filesCopied: number;\n\n if (isMinimalScaffold) {\n filesCopied = await timePhase(timings, \"scaffold project\", () =>\n scaffoldMinimalProject(targetDir, parentConfig as unknown as BosConfigInput, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain,\n plugins,\n overrides,\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n }),\n );\n\n await timePhase(timings, \"personalize config\", () =>\n personalizeConfig(targetDir, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n overrides,\n mode: \"init\",\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n testnet: parentConfig?.testnet,\n staging: parentConfig?.staging,\n }),\n );\n } else {\n const patterns = buildInitPatterns(overrides, plugins, pluginDirMap);\n\n filesCopied = await timePhase(timings, \"copy files\", () =>\n copyFilteredFiles(sourceDir, targetDir, patterns, {\n overrides,\n plugins,\n }),\n );\n\n await timePhase(timings, \"personalize config\", () =>\n personalizeConfig(targetDir, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n overrides,\n workspaceOpts: { sourceDir },\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n testnet: parentConfig?.testnet,\n staging: parentConfig?.staging,\n }),\n );\n\n await timePhase(timings, \"write snapshot\", () =>\n writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {\n overrides,\n plugins,\n }),\n );\n\n await timePhase(timings, \"personalize agents\", () =>\n personalizeAgentsMd(targetDir, { overrides, plugins }),\n );\n }\n\n await timePhase(timings, \"sync shared deps\", () =>\n syncResolvedSharedDeps({\n configDir: targetDir,\n hostMode: \"local\",\n }),\n );\n\n const lockfilePath = join(targetDir, \"bun.lock\");\n const allowedWorkspaces = computeAllowedWorkspaces(overrides, plugins);\n stripOrphanedWorkspacesFromLockfile(lockfilePath, allowedWorkspaces);\n removeInitLockfile(lockfilePath);\n\n const initConfig = await timePhase(timings, \"resolve config\", () =>\n loadResolvedConfig({ cwd: targetDir }),\n );\n if (initConfig?.runtime) {\n await timePhase(timings, \"generate env/docker\", async () => {\n writeGeneratedInfra(targetDir, initConfig.runtime);\n });\n }\n await timePhase(timings, \"create env file\", async () => {\n ensureEnvFile(targetDir);\n });\n\n if (!input.noInstall) {\n await timePhase(timings, \"install dependencies\", () => runBunInstall(targetDir));\n await timePhase(timings, \"generate types\", () => runTypesGen(targetDir));\n await timePhase(timings, \"generate migrations\", () =>\n generateDatabaseMigrations(targetDir),\n );\n }\n\n if (input.noInstall && initConfig?.config) {\n await timePhase(timings, \"generate code artifacts\", () =>\n generateCodeArtifacts(targetDir, initConfig.config),\n );\n }\n\n return {\n status: \"initialized\" as const,\n directory,\n extendsRef,\n account,\n domain,\n extends: extendsRef,\n plugins,\n overrides,\n filesCopied,\n timings,\n targetDir,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n const extendsRef = input.extends\n ? input.extends.startsWith(\"bos://\")\n ? input.extends\n : `bos://${input.extends}`\n : \"bos://dev.everything.near/everything.dev\";\n return {\n status: \"error\" as const,\n directory: input.directory ?? \"\",\n extendsRef,\n account: input.account,\n domain: input.domain,\n extends: extendsRef,\n plugins: input.plugins ?? [],\n overrides: input.overrides,\n filesCopied: 0,\n timings: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n sync: builder.sync.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const result = await syncTemplate(projectDir, input);\n\n if (result.status === \"synced\" || result.status === \"dry-run\") {\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.config) {\n await generateCodeArtifacts(projectDir, syncedConfig.config);\n }\n }\n\n return result;\n } catch (error) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n upgrade: builder.upgrade.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await upgradeTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n typesGen: builder.typesGen.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const env =\n input.env ?? (process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n\n const refreshed = await loadResolvedConfig({ cwd: projectDir, env });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"Failed to load bos.config.json\",\n };\n }\n\n if (input.dryRun) {\n const pluginEntries = Object.entries(refreshed.runtime.plugins ?? {});\n const fetched: string[] = [];\n const skipped: string[] = [];\n const hasLocalApiWorkspace = existsSync(join(projectDir, \"api\", \"src\"));\n\n if (refreshed.runtime.api.source !== \"local\") {\n fetched.push(`api (${refreshed.runtime.api.url})`);\n } else {\n skipped.push(\"api (local)\");\n }\n\n if (refreshed.runtime.auth) {\n if (refreshed.runtime.auth.source !== \"local\") {\n fetched.push(`auth (${refreshed.runtime.auth.url})`);\n } else {\n skipped.push(\"auth (local)\");\n }\n }\n\n for (const [key, plugin] of pluginEntries) {\n if (plugin.url && plugin.source !== \"local\") {\n fetched.push(`${key} (${plugin.url})`);\n } else if (plugin.localPath) {\n skipped.push(`${key} (local)`);\n } else {\n skipped.push(`${key} (no URL resolved)`);\n }\n }\n\n const generated = [\"ui/src/lib/api-types.gen.ts\", \"ui/src/lib/auth-types.gen.ts\"];\n if (hasLocalApiWorkspace) {\n generated.push(\"api/src/lib/plugins-types.gen.ts\", \"api/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const artifacts = await generateCodeArtifacts(projectDir, refreshed.config, {\n runtimeConfig: refreshed.runtime,\n });\n\n const hasLocalApiWorkspace = existsSync(join(projectDir, \"api\", \"src\"));\n const generated = [\"ui/src/lib/api-types.gen.ts\"];\n if (hasLocalApiWorkspace) {\n generated.push(\"api/src/lib/plugins-types.gen.ts\", \"api/src/lib/auth-types.gen.ts\");\n }\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n const contractStatus = artifacts?.contractStatus ?? [];\n const fetched: string[] = [];\n const skipped: string[] = [];\n const failed: string[] = [];\n for (const entry of contractStatus) {\n if (entry.source === \"remote\") {\n fetched.push(entry.url ? `${entry.key} (${entry.url})` : entry.key);\n } else if (entry.source === \"local\") {\n skipped.push(`${entry.key} (local)`);\n } else if (entry.source === \"skipped\") {\n skipped.push(`${entry.key} (no URL resolved)`);\n } else if (entry.source === \"failed\") {\n const detail = entry.error ? `: ${entry.error}` : \"\";\n failed.push(`${entry.key}${detail}`);\n }\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed,\n source: refreshed.runtime.api.source,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n dbStudio: builder.dbStudio.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n loadProjectEnv(projectDir);\n const refreshed = await loadResolvedConfig({ cwd: projectDir });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: \"Failed to load bos.config.json\",\n };\n }\n\n const { resolvePluginDbInfo } = await import(\"./cli/db-studio\");\n const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);\n\n return {\n status: \"success\" as const,\n plugin: info.key,\n source: info.source,\n section: info.section,\n databaseSecret: info.databaseSecret,\n databaseUrl: info.databaseUrl,\n workspaceDir: info.workspaceDir,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n status: builder.status.handler(async () => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await getStatus(projectDir);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction computeAllowedWorkspaces(overrides: string[], plugins?: string[]): string[] {\n const workspaces: string[] = [];\n for (const section of overrides) {\n if (section === \"host\") workspaces.push(\"host\");\n if (section === \"ui\") workspaces.push(\"ui\");\n if (section === \"api\") workspaces.push(\"api\");\n }\n if (plugins && plugins.length > 0) {\n workspaces.push(\"plugins/*\");\n }\n return workspaces;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs","names":["EventEmitter","getPluginRef","fetchBosConfigFromFastKv","resolveExtendsRef","parseBosUrl","mergeBosConfigWithExtends","resolveConfigComposableEntries","BosConfigSchema","process","z","bosContract","Effect","loadResolvedConfig","getProjectRoot","loadLocalConfig","saveBosConfig","generateCodeArtifacts","fileExists","readJsonFile","run","parseDeployLines","extractPublishedUrl","computeSriHashForUrl","fetchRemotePluginManifest","detectLocalPackages","syncResolvedSharedDeps","buildEverythingDevQuietly","buildEveryPluginQuietly","getHostDevelopmentPort","buildRuntimeConfig","prepareDevelopmentRuntimeConfig","buildServiceDescriptorMap","buildDescription","buildRegistryConfigUrl","buildRuntimePluginsForConfig","findConfigPath","selectWorkspaceTargets","buildWorkspaceTargets","publishToFastKv","colors","getNetworkIdForAccount","getRegistryNamespaceForAccount","ensureNearCli","addFunctionCallAccessKey","fetchParentConfig","detectGitRemoteUrl","resolveSourceDir","scaffoldMinimalProject","personalizeConfig","buildInitPatterns","copyFilteredFiles","writeInitSnapshot","personalizeAgentsMd","runBunInstall","runTypesGen","generateDatabaseMigrations","syncTemplate","upgradeTemplate","getStatus"],"sources":["../src/plugin.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport process from \"node:process\";\nimport { Effect } from \"effect\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n buildEveryPluginQuietly,\n buildEverythingDevQuietly,\n buildWorkspaceTargets,\n fileExists,\n getPluginRef,\n readJsonFile,\n selectWorkspaceTargets,\n} from \"./build\";\nimport {\n ensureEnvFile,\n loadProjectEnv,\n syncGeneratedInfra,\n writeGeneratedInfra,\n} from \"./cli/infra\";\nimport {\n buildInitPatterns,\n copyFilteredFiles,\n detectGitRemoteUrl,\n fetchParentConfig,\n generateDatabaseMigrations,\n personalizeAgentsMd,\n personalizeConfig,\n removeInitLockfile,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n scaffoldMinimalProject,\n stripOrphanedWorkspacesFromLockfile,\n writeInitSnapshot,\n} from \"./cli/init\";\nimport { getStatus } from \"./cli/status\";\nimport { syncTemplate } from \"./cli/sync\";\nimport { upgradeTemplate } from \"./cli/upgrade\";\nimport { generateCodeArtifacts } from \"./code-artifacts\";\nimport {\n buildRuntimePluginsForConfig,\n drainConfigWarnings,\n findConfigPath,\n getHostDevelopmentPort,\n getProjectRoot,\n loadLocalConfig,\n loadResolvedConfig,\n resolveConfigComposableEntries,\n resumeWarnings,\n suppressWarnings,\n} from \"./config\";\nimport {\n type BosConfigResult,\n bosContract,\n type OverrideSection,\n type PhaseTiming,\n type PluginListResult,\n} from \"./contract\";\nimport {\n buildRegistryConfigUrl,\n fetchBosConfigFromFastKv,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n type PluginManifest,\n parseBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl, parseDeployLines } from \"./integrity\";\nimport { type BosEnv, mergeBosConfigWithExtends, resolveExtendsRef } from \"./merge\";\nimport { addFunctionCallAccessKey, ensureNearCli } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { extractPublishedUrl, publishToFastKv } from \"./publish\";\nimport { createPlugin, z } from \"./sdk\";\nimport {\n type AppOrchestrator,\n buildDescription,\n buildServiceDescriptorMap,\n type ServiceDescriptor,\n} from \"./service-descriptor\";\nimport { syncResolvedSharedDeps } from \"./shared-deps\";\nimport type { BosConfig, BosConfigInput, ExtendsConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { BosConfigSchema } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { saveBosConfig } from \"./utils/save-config\";\nimport { colors } from \"./utils/theme\";\n\nexport interface DevSessionData {\n orchestrator: AppOrchestrator;\n services: Map<string, ServiceDescriptor>;\n runtimeConfig: RuntimeConfig;\n}\n\nexport interface StartSummary {\n configSource: string;\n configSourceHttp?: string;\n account: string;\n domain?: string;\n modules: { host?: string; ui?: string; api?: string; auth?: string };\n warnings: string[];\n}\n\nexport type ProgressEvent = {\n phase: string;\n status: \"running\" | \"done\" | \"error\";\n durationMs?: number;\n message?: string;\n};\n\nexport const pluginEvents = new EventEmitter();\n\nlet pendingSession: DevSessionData | null = null;\nlet pendingStartSummary: StartSummary | null = null;\n\nexport function consumeDevSession(): (DevSessionData & { summary?: StartSummary }) | null {\n const data = pendingSession;\n const summary = pendingStartSummary;\n pendingSession = null;\n pendingStartSummary = null;\n if (!data) return null;\n return summary ? { ...data, summary } : data;\n}\n\nasync function timePhase<T>(\n timings: PhaseTiming[],\n name: string,\n fn: () => Promise<T>,\n): Promise<T> {\n pluginEvents.emit(\"progress\", { phase: name, status: \"running\" } satisfies ProgressEvent);\n const startedAt = Date.now();\n try {\n const result = await fn();\n timings.push({ name, durationMs: Date.now() - startedAt });\n pluginEvents.emit(\"progress\", {\n phase: name,\n status: \"done\",\n durationMs: Date.now() - startedAt,\n } satisfies ProgressEvent);\n return result;\n } catch (error) {\n pluginEvents.emit(\"progress\", {\n phase: name,\n status: \"error\",\n durationMs: Date.now() - startedAt,\n } satisfies ProgressEvent);\n throw error;\n }\n}\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildConfigResult(\n bosConfig: BosConfigInput | BosConfig | null,\n full = false,\n): BosConfigResult {\n const packages =\n bosConfig?.app && typeof bosConfig.app === \"object\" ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig ?? null,\n packages,\n remotes,\n full,\n };\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const ref = getPluginRef(attachment);\n const source = ref?.development ?? ref?.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => {\n const ref = getPluginRef(attachment);\n return {\n key,\n development: ref?.development,\n production: ref?.production,\n localPath: ref?.development?.startsWith(\"local:\")\n ? ref.development.slice(\"local:\".length)\n : undefined,\n source: ref?.development?.startsWith(\"local:\") ? (\"local\" as const) : (\"remote\" as const),\n integrity: ref?.integrity,\n version: ref?.version,\n name: ref?.name,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nexport async function resolveRemoteConfigChain(\n accountId: string,\n gatewayId: string,\n visited: Set<string>,\n): Promise<BosConfig> {\n const selfRef = `bos://${accountId}/${gatewayId}`;\n if (visited.has(selfRef)) {\n throw new Error(`Circular extends detected: ${selfRef}`);\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(selfRef);\n\n const config = await fetchBosConfigFromFastKv<BosConfigInput>(selfRef);\n const parentRef = config.extends\n ? resolveExtendsRef(config.extends as string | ExtendsConfig, \"production\")\n : undefined;\n\n let merged: BosConfigInput;\n if (!parentRef) {\n merged = config;\n } else {\n const { accountId: parentAccountId, gatewayId: parentGatewayId } = parseBosUrl(parentRef);\n const parentResolved = await resolveRemoteConfigChain(\n parentAccountId,\n parentGatewayId,\n nextVisited,\n );\n merged = mergeBosConfigWithExtends(parentResolved as BosConfigInput, config);\n }\n\n return resolveConfigComposableEntries(BosConfigSchema.parse(merged), process.cwd(), \"production\");\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await resolveRemoteConfigChain(accountId, gatewayId, new Set());\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"No config found\")) {\n return null;\n }\n throw error;\n }\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config) =>\n Effect.promise(async () => {\n const configResult = await loadResolvedConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps, builder) => ({\n config: builder.config.handler(async ({ input }) => {\n if (input.full) {\n return buildConfigResult(deps.bosConfig, true);\n }\n\n const localConfig = await loadLocalConfig({ cwd: deps.configDir });\n return buildConfigResult(localConfig?.config ?? null, false);\n }),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const isBosRef = input.source.startsWith(\"bos://\");\n const isLocal = input.source.startsWith(\"local:\");\n const key = sanitizePluginKey(\n input.as ??\n (isBosRef ? (input.source.split(\"/\").pop() ?? \"plugin\") : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const existingEntry = existing && typeof existing === \"object\" ? existing : {};\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n if (isBosRef) {\n nextPlugins[key] = {\n ...existingEntry,\n extends: input.source,\n };\n } else if (isLocal) {\n nextPlugins[key] = {\n ...existingEntry,\n development: input.source,\n ...(existingEntry.extends ? {} : {}),\n };\n } else {\n nextPlugins[key] = {\n ...existingEntry,\n production: input.production ?? input.source,\n };\n }\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n const stored = deps.bosConfig.plugins?.[key];\n const storedObj = stored && typeof stored === \"object\" ? stored : {};\n\n return {\n status: \"added\" as const,\n key,\n development: storedObj.development,\n production: storedObj.production,\n integrity: storedObj.integrity,\n version: storedObj.version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n }),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const attachmentRef = getPluginRef(attachment);\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await fileExists(pkgPath))) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = await readJsonFile<{\n scripts?: Record<string, string>;\n name?: string;\n version?: string;\n }>(pkgPath);\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n const output = `${stdout}\\n${stderr}`;\n const deployEntries = parseDeployLines(output);\n const deployEntry = deployEntries.find(\n (e) => e.urlField === `plugins.${input.key}.production`,\n );\n\n let publishedUrl: string | undefined;\n let integrity: string | undefined;\n if (deployEntry) {\n publishedUrl = deployEntry.url;\n integrity = deployEntry.integrity;\n } else {\n publishedUrl = extractPublishedUrl(output) ?? undefined;\n integrity = publishedUrl\n ? ((await computeSriHashForUrl(publishedUrl)) ?? undefined)\n : undefined;\n }\n\n let manifest: PluginManifest | null = null;\n if (publishedUrl) {\n manifest = await fetchRemotePluginManifest(publishedUrl);\n } else if (attachmentRef?.production) {\n manifest = await fetchRemotePluginManifest(attachmentRef.production);\n if (manifest) {\n publishedUrl = attachmentRef.production;\n }\n }\n\n const version = manifest?.plugin.version ?? pkgJson.version;\n\n if (publishedUrl) {\n const rootConfigPath = join(deps.configDir, \"bos.config.json\");\n try {\n const rootConfig = JSON.parse(readFileSync(rootConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n if (!rootConfig.plugins || typeof rootConfig.plugins !== \"object\") {\n rootConfig.plugins = {};\n }\n const plugins = rootConfig.plugins as Record<string, unknown>;\n if (!plugins[input.key] || typeof plugins[input.key] !== \"object\") {\n plugins[input.key] = {};\n }\n const entry = plugins[input.key] as Record<string, unknown>;\n entry.production = publishedUrl;\n if (integrity) {\n entry.integrity = integrity;\n } else {\n delete entry.integrity;\n }\n writeFileSync(rootConfigPath, `${JSON.stringify(rootConfig, null, 2)}\\n`);\n console.log(` ✅ Updated bos.config.json: plugins.${input.key}.production`);\n } catch (err) {\n console.error(\n ` ❌ Failed to update bos.config.json:`,\n err instanceof Error ? err.message : err,\n );\n }\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachmentRef?.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n }),\n\n dev: builder.dev.handler(async ({ input }) => {\n const devTimings: PhaseTiming[] = [];\n\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const hostSource: SourceMode = localPackages.includes(\"host\")\n ? parseSourceMode(input.host, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth, \"local\")\n : \"remote\";\n const ssr = input.ssr ?? false;\n const proxy = input.proxy ?? false;\n\n const sharedSync = await timePhase(devTimings, \"shared deps\", () =>\n syncResolvedSharedDeps({\n configDir: deps.configDir,\n hostMode: hostSource,\n bosConfig: deps.bosConfig ?? undefined,\n extendsChain: [],\n }),\n );\n let configMayHaveChanged = false;\n if (sharedSync.catalogChanged) {\n await timePhase(devTimings, \"install\", () =>\n run(\"bun\", [\"install\"], { cwd: deps.configDir }),\n );\n configMayHaveChanged = true;\n }\n const shouldBuildPlugin =\n (apiSource === \"local\" && !proxy) || localPackages.some((pkg) => pkg.startsWith(\"plugin:\"));\n\n await timePhase(devTimings, \"build\", async () => {\n const buildTasks: Promise<void>[] = [buildEverythingDevQuietly(deps.configDir)];\n if (shouldBuildPlugin) {\n buildTasks.push(buildEveryPluginQuietly(deps.configDir));\n }\n await Promise.all(buildTasks);\n });\n\n let devExtendsChain: string[] | undefined;\n if (configMayHaveChanged || input.remotePlugins?.length) {\n const refreshed = await timePhase(devTimings, \"resolve config\", () =>\n loadResolvedConfig({\n cwd: deps.configDir,\n remotePlugins: input.remotePlugins,\n }),\n );\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n devExtendsChain = refreshed?.source.extended;\n }\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n timings: devTimings,\n };\n }\n\n if (proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n timings: devTimings,\n };\n }\n\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n suppressWarnings();\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource,\n apiSource,\n authSource,\n hostSource,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n const runtimeConfig = await timePhase(devTimings, \"ports\", () =>\n prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr,\n }),\n );\n\n syncGeneratedInfra(deps.configDir, runtimeConfig);\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n await timePhase(devTimings, \"generate artifacts\", () =>\n generateCodeArtifacts(deps.configDir, deps.bosConfig!, {\n env: \"development\",\n extendsChain: devExtendsChain,\n runtimeConfig,\n }),\n );\n\n const services = buildServiceDescriptorMap(runtimeConfig, { ssr, proxy });\n const packages = [...services.keys()];\n if (process.env.DEBUG === \"true\" || process.env.DEBUG === \"1\") {\n console.error(\"[DEBUG dev] services keys:\", packages.join(\", \"));\n console.error(\n \"[DEBUG dev] services sources:\",\n packages.map((k) => `${k}=${services.get(k)?.source ?? \"?\"}`).join(\", \"),\n );\n console.error(\n \"[DEBUG dev] runtimeConfig.plugins keys:\",\n Object.keys(runtimeConfig.plugins ?? {}).join(\", \"),\n );\n console.error(\n \"[DEBUG dev] runtimeConfig.plugins sources:\",\n Object.entries(runtimeConfig.plugins ?? {})\n .map(([k, v]) => `${k}=${v.source}`)\n .join(\", \"),\n );\n }\n const displayEnv: Record<string, string> = {};\n const apiDescriptor = services.get(\"api\");\n if (apiDescriptor?.proxy) {\n const proxyUrl = resolveProxyUrl(deps.bosConfig);\n if (proxyUrl) displayEnv.API_PROXY = proxyUrl;\n }\n\n const orchestrator: AppOrchestrator = {\n packages,\n env: displayEnv,\n description: buildDescription(services),\n port: runtimeConfig.host.port,\n interactive: input.interactive,\n };\n\n pendingSession = { orchestrator, services, runtimeConfig };\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes: packages,\n timings: devTimings,\n };\n }),\n\n start: builder.start.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n pluginEvents.emit(\"progress\", { phase: \"config\", status: \"running\" } satisfies ProgressEvent);\n\n const bosEnv = input.env ?? (process.env.BOS_ENV === \"staging\" ? \"staging\" : \"production\");\n const account = input.account ?? process.env.BOS_ACCOUNT;\n const domain = input.domain ?? process.env.BOS_GATEWAY;\n\n let config: BosConfig | null = null;\n let remoteConfig: BosConfig | null = null;\n\n if (account && domain) {\n try {\n remoteConfig = await fetchPublishedConfig(account, domain);\n if (remoteConfig) {\n config = remoteConfig;\n } else {\n return {\n status: \"error\" as const,\n url: \"\",\n error: `No config found at bos://${account}/${domain}. Verify the account and gateway are correct and the config has been published.\\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`,\n };\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n url: \"\",\n error: `Failed to fetch config for bos://${account}/${domain}: ${error instanceof Error ? error.message : \"Unknown error\"}\\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`,\n };\n }\n } else {\n config = deps.bosConfig;\n }\n\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n error:\n \"No configuration found. Provide --account and --gateway flags, or create a local bos.config.json.\",\n };\n }\n\n // Apply runtime overrides from CLI flags / env vars\n if (account) {\n config = { ...config, account };\n }\n if (domain) {\n config = { ...config, domain };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const isStaging = bosEnv === \"staging\";\n const runtimePlugins = await buildRuntimePluginsForConfig(\n config,\n deps.configDir,\n \"production\",\n );\n suppressWarnings();\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n authSource: \"remote\",\n hostSource: \"remote\",\n env: \"production\",\n plugins: runtimePlugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n\n if (isStaging && config.staging?.domain) {\n runtimeConfig.domain = config.staging.domain;\n }\n\n if (isStaging) {\n runtimeConfig.env = \"staging\";\n }\n\n syncGeneratedInfra(deps.configDir, runtimeConfig);\n ensureEnvFile(deps.configDir);\n loadProjectEnv(deps.configDir);\n\n pluginEvents.emit(\"progress\", {\n phase: \"generate artifacts\",\n status: \"running\",\n } satisfies ProgressEvent);\n await generateCodeArtifacts(deps.configDir, config, {\n env: \"production\",\n runtimeConfig,\n });\n pluginEvents.emit(\"progress\", {\n phase: \"generate artifacts\",\n status: \"done\",\n } satisfies ProgressEvent);\n\n // ── Production Readiness Validation ──\n const productionEnv: Record<string, string> = {};\n const warnings: string[] = [];\n\n // Default CORS_ORIGIN to the configured domain if not set\n if (!process.env.CORS_ORIGIN && config.domain) {\n const effectiveDomain = isStaging\n ? (config.staging?.domain ?? config.domain)\n : config.domain;\n const defaultOrigin = `https://${effectiveDomain}`;\n productionEnv.CORS_ORIGIN = defaultOrigin;\n warnings.push(`CORS_ORIGIN defaulting to ${defaultOrigin}`);\n }\n\n // Validate required secrets\n const requiredSecrets = new Set<string>();\n const missingSecrets: string[] = [];\n\n if (runtimeConfig.host.secrets) {\n for (const s of runtimeConfig.host.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.auth?.secrets) {\n for (const s of runtimeConfig.auth.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.api?.secrets) {\n for (const s of runtimeConfig.api.secrets) requiredSecrets.add(s);\n }\n for (const plugin of Object.values(runtimeConfig.plugins ?? {})) {\n if (plugin.secrets) {\n for (const s of plugin.secrets) requiredSecrets.add(s);\n }\n }\n\n for (const secret of requiredSecrets) {\n const value = process.env[secret];\n if (!value || value.length === 0) {\n missingSecrets.push(secret);\n }\n }\n\n if (missingSecrets.length > 0) {\n warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(\", \")}`);\n }\n\n const services = buildServiceDescriptorMap(runtimeConfig);\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const configSource = remoteConfig\n ? `bos://${account}/${domain}`\n : (findConfigPath() ?? \"bos.config.json\");\n\n const configSourceHttp =\n remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : undefined;\n\n const summary: StartSummary = {\n configSource,\n configSourceHttp,\n account: config.account,\n domain: config.domain ?? undefined,\n modules: {\n host: runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? \"local\",\n ui: runtimeConfig.ui.url ?? \"local\",\n api: runtimeConfig.api.url ?? \"local\",\n auth: runtimeConfig.auth?.url ?? undefined,\n },\n warnings,\n };\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...productionEnv,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n pendingSession = { orchestrator, services, runtimeConfig };\n pendingStartSummary = summary;\n\n pluginEvents.emit(\"progress\", { phase: \"config\", status: \"done\" } satisfies ProgressEvent);\n\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const buildEnv: BosEnv = input.deploy ? \"production\" : \"development\";\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n suppressWarnings();\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n authSource: deps.bosConfig.app.auth?.development ? \"local\" : \"remote\",\n hostSource: deps.bosConfig.app.host?.development ? \"local\" : \"remote\",\n env: buildEnv,\n plugins: deps.runtimeConfig?.plugins,\n });\n drainConfigWarnings();\n resumeWarnings();\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: buildEnv,\n runtimeConfig,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const result = await publishToFastKv({\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n configDir: deps.configDir,\n env: input.env,\n build: input.deploy,\n dryRun: input.dryRun,\n verbose: input.verbose,\n packages: input.packages,\n network: input.network,\n privateKey: input.privateKey,\n });\n\n if (result.publishConfig) {\n const refreshed = await loadResolvedConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n }\n }\n\n return {\n status: result.status,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n error: result.error,\n built: result.built,\n skipped: result.skipped,\n deployResults: result.deployResults,\n };\n }),\n\n deploy: builder.deploy.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n redeployed: false,\n error: \"No bos.config.json found\",\n };\n }\n\n const result = await publishToFastKv({\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n configDir: deps.configDir,\n env: input.env,\n build: input.build,\n dryRun: input.dryRun,\n verbose: input.verbose,\n packages: input.packages,\n network: input.network,\n privateKey: input.privateKey,\n });\n\n if (result.status === \"error\") {\n return {\n status: \"error\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n error: result.error,\n deployResults: result.deployResults,\n };\n }\n\n if (result.status === \"dry-run\") {\n return {\n status: \"dry-run\" as const,\n registryUrl: result.registryUrl,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n };\n }\n\n if (result.publishConfig) {\n const refreshed = await loadResolvedConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n }\n }\n\n let redeployed = false;\n let service: string | undefined;\n\n if (process.env.RAILWAY_TOKEN) {\n const railwayService = input.service ?? deps.bosConfig.ci?.railway?.service;\n if (!railwayService) {\n console.log();\n console.log(\n colors.yellow(\n \" Railway redeploy skipped: ci.railway.service is not configured in bos.config.json\",\n ),\n );\n return {\n status: \"published\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n deployResults: result.deployResults,\n error:\n \"Config published but Railway redeploy failed: ci.railway.service is not configured in bos.config.json\",\n };\n }\n\n service = railwayService;\n console.log();\n console.log(` Redeploying Railway service ${colors.cyan(railwayService)}...`);\n try {\n const railResult = await run(\n \"railway\",\n [\"redeploy\", \"--service\", railwayService, \"--yes\"],\n {\n capture: true,\n },\n );\n if (railResult?.stdout) {\n for (const line of railResult.stdout.split(\"\\n\")) {\n if (line.trim()) console.log(` ${colors.dim(line.trim())}`);\n }\n }\n redeployed = true;\n console.log(colors.green(` Railway redeploy complete`));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const railError =\n message.includes(\"not found\") || message.includes(\"ENOENT\")\n ? \"Railway CLI not found. Install it: npm i -g @railway/cli\"\n : `Railway redeploy failed: ${message}`;\n console.log(colors.yellow(` ${railError}`));\n return {\n status: \"published\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed: false,\n service,\n deployResults: result.deployResults,\n error: `Config published but ${railError}`,\n };\n }\n } else {\n console.log();\n console.log(colors.yellow(\" Railway redeploy skipped (RAILWAY_TOKEN not set)\"));\n }\n\n return {\n status: \"deployed\" as const,\n registryUrl: result.registryUrl,\n txHash: result.txHash,\n built: result.built,\n skipped: result.skipped,\n redeployed,\n service,\n deployResults: result.deployResults,\n };\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }) => {\n try {\n const timings: PhaseTiming[] = [];\n let extendsAccount = \"\";\n let extendsGateway = \"\";\n let directory = input.directory;\n const account = input.account;\n const domain = input.domain;\n let overrides = input.overrides as OverrideSection[] | undefined;\n let plugins = input.plugins;\n\n if (input.extends) {\n const normalized = input.extends.startsWith(\"bos://\")\n ? input.extends\n : `bos://${input.extends}`;\n const match = normalized.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (match) {\n extendsAccount = match[1];\n extendsGateway = match[2];\n }\n }\n\n extendsAccount = extendsAccount || \"dev.everything.near\";\n extendsGateway = extendsGateway || \"everything.dev\";\n\n let parentPluginKeys: string[] = [];\n let parentConfig: BosConfig | null = null;\n try {\n parentConfig = await timePhase(timings, \"parent config\", () =>\n fetchParentConfig(extendsAccount, extendsGateway),\n );\n if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n parentPluginKeys = Object.keys(parentConfig.plugins);\n }\n } catch (e) {\n console.warn(\n `[init] Failed to fetch parent config from ${extendsAccount}/${extendsGateway}: ${e instanceof Error ? e.message : e}`,\n );\n }\n\n overrides = overrides?.length ? overrides : ([\"ui\", \"api\"] as OverrideSection[]);\n if (overrides.includes(\"plugins\") && plugins === undefined) {\n plugins = parentPluginKeys;\n }\n plugins = plugins ?? [];\n\n const pluginDirMap: Record<string, string> = {};\n if (parentConfig?.plugins) {\n for (const plugin of plugins) {\n const entry = (parentConfig.plugins as Record<string, unknown>)?.[plugin];\n if (entry && typeof entry === \"object\") {\n const dev = (entry as Record<string, unknown>).development;\n if (typeof dev === \"string\") {\n const match = dev.match(/^local:plugins\\/(.+)$/);\n if (match?.[1] && match[1] !== plugin) pluginDirMap[plugin] = match[1];\n }\n }\n }\n }\n\n directory = directory || domain || extendsGateway;\n const targetDir = resolve(directory);\n const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;\n\n const repository =\n (await detectGitRemoteUrl(process.cwd()).catch(() => undefined)) ??\n parentConfig?.repository;\n\n if (!parentConfig) {\n try {\n parentConfig = await timePhase(timings, \"parent config\", () =>\n fetchParentConfig(extendsAccount, extendsGateway),\n );\n } catch {\n return {\n status: \"error\" as const,\n directory,\n extendsRef,\n account,\n domain,\n extends: extendsRef,\n plugins,\n overrides,\n filesCopied: 0,\n timings,\n error: `No config found at ${extendsRef} — are you sure this is the right parent?`,\n };\n }\n }\n\n const {\n sourceDir,\n parentConfig: resolvedParentConfig,\n cleanup,\n } = await timePhase(timings, \"template source\", () =>\n resolveSourceDir({\n extendsAccount,\n extendsGateway,\n source: input.source,\n }),\n );\n\n parentConfig = resolvedParentConfig;\n\n const isMinimalScaffold = sourceDir === \"\";\n\n try {\n let filesCopied: number;\n\n if (isMinimalScaffold) {\n filesCopied = await timePhase(timings, \"scaffold project\", () =>\n scaffoldMinimalProject(targetDir, parentConfig as unknown as BosConfigInput, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain,\n plugins,\n overrides,\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n }),\n );\n\n await timePhase(timings, \"personalize config\", () =>\n personalizeConfig(targetDir, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n overrides,\n mode: \"init\",\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n testnet: parentConfig?.testnet,\n staging: parentConfig?.staging,\n }),\n );\n } else {\n const patterns = buildInitPatterns(overrides, plugins, pluginDirMap);\n\n filesCopied = await timePhase(timings, \"copy files\", () =>\n copyFilteredFiles(sourceDir, targetDir, patterns, {\n overrides,\n plugins,\n }),\n );\n\n await timePhase(timings, \"personalize config\", () =>\n personalizeConfig(targetDir, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n overrides,\n workspaceOpts: { sourceDir },\n repository,\n title: parentConfig?.title,\n description: parentConfig?.description,\n testnet: parentConfig?.testnet,\n staging: parentConfig?.staging,\n }),\n );\n\n await timePhase(timings, \"write snapshot\", () =>\n writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {\n overrides,\n plugins,\n }),\n );\n\n await timePhase(timings, \"personalize agents\", () =>\n personalizeAgentsMd(targetDir, { overrides, plugins }),\n );\n }\n\n await timePhase(timings, \"sync shared deps\", () =>\n syncResolvedSharedDeps({\n configDir: targetDir,\n hostMode: \"local\",\n }),\n );\n\n const lockfilePath = join(targetDir, \"bun.lock\");\n const allowedWorkspaces = computeAllowedWorkspaces(overrides, plugins);\n stripOrphanedWorkspacesFromLockfile(lockfilePath, allowedWorkspaces);\n removeInitLockfile(lockfilePath);\n\n const initConfig = await timePhase(timings, \"resolve config\", () =>\n loadResolvedConfig({ cwd: targetDir }),\n );\n if (initConfig?.runtime) {\n await timePhase(timings, \"generate env/docker\", async () => {\n writeGeneratedInfra(targetDir, initConfig.runtime);\n });\n }\n await timePhase(timings, \"create env file\", async () => {\n ensureEnvFile(targetDir);\n });\n\n if (!input.noInstall) {\n await timePhase(timings, \"install dependencies\", () => runBunInstall(targetDir));\n await timePhase(timings, \"generate types\", () => runTypesGen(targetDir));\n await timePhase(timings, \"generate migrations\", () =>\n generateDatabaseMigrations(targetDir),\n );\n }\n\n if (input.noInstall && initConfig?.config) {\n await timePhase(timings, \"generate code artifacts\", () =>\n generateCodeArtifacts(targetDir, initConfig.config),\n );\n }\n\n return {\n status: \"initialized\" as const,\n directory,\n extendsRef,\n account,\n domain,\n extends: extendsRef,\n plugins,\n overrides,\n filesCopied,\n timings,\n targetDir,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n const extendsRef = input.extends\n ? input.extends.startsWith(\"bos://\")\n ? input.extends\n : `bos://${input.extends}`\n : \"bos://dev.everything.near/everything.dev\";\n return {\n status: \"error\" as const,\n directory: input.directory ?? \"\",\n extendsRef,\n account: input.account,\n domain: input.domain,\n extends: extendsRef,\n plugins: input.plugins ?? [],\n overrides: input.overrides,\n filesCopied: 0,\n timings: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n sync: builder.sync.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const result = await syncTemplate(projectDir, input);\n\n if (result.status === \"synced\" || result.status === \"dry-run\") {\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.config) {\n await generateCodeArtifacts(projectDir, syncedConfig.config);\n }\n }\n\n return result;\n } catch (error) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n upgrade: builder.upgrade.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await upgradeTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n typesGen: builder.typesGen.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const env =\n input.env ?? (process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n\n const refreshed = await loadResolvedConfig({ cwd: projectDir, env });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"Failed to load bos.config.json\",\n };\n }\n\n if (input.dryRun) {\n const pluginEntries = Object.entries(refreshed.runtime.plugins ?? {});\n const fetched: string[] = [];\n const skipped: string[] = [];\n const hasLocalApiWorkspace = existsSync(join(projectDir, \"api\", \"src\"));\n\n if (refreshed.runtime.api.source !== \"local\") {\n fetched.push(`api (${refreshed.runtime.api.url})`);\n } else {\n skipped.push(\"api (local)\");\n }\n\n if (refreshed.runtime.auth) {\n if (refreshed.runtime.auth.source !== \"local\") {\n fetched.push(`auth (${refreshed.runtime.auth.url})`);\n } else {\n skipped.push(\"auth (local)\");\n }\n }\n\n for (const [key, plugin] of pluginEntries) {\n if (plugin.url && plugin.source !== \"local\") {\n fetched.push(`${key} (${plugin.url})`);\n } else if (plugin.localPath) {\n skipped.push(`${key} (local)`);\n } else {\n skipped.push(`${key} (no URL resolved)`);\n }\n }\n\n const generated = [\"ui/src/lib/api-types.gen.ts\", \"ui/src/lib/auth-types.gen.ts\"];\n if (hasLocalApiWorkspace) {\n generated.push(\"api/src/lib/plugins-types.gen.ts\", \"api/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const artifacts = await generateCodeArtifacts(projectDir, refreshed.config, {\n runtimeConfig: refreshed.runtime,\n });\n\n const hasLocalApiWorkspace = existsSync(join(projectDir, \"api\", \"src\"));\n const generated = [\"ui/src/lib/api-types.gen.ts\"];\n if (hasLocalApiWorkspace) {\n generated.push(\"api/src/lib/plugins-types.gen.ts\", \"api/src/lib/auth-types.gen.ts\");\n }\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n const contractStatus = artifacts?.contractStatus ?? [];\n const fetched: string[] = [];\n const skipped: string[] = [];\n const failed: string[] = [];\n for (const entry of contractStatus) {\n if (entry.source === \"remote\") {\n fetched.push(entry.url ? `${entry.key} (${entry.url})` : entry.key);\n } else if (entry.source === \"local\") {\n skipped.push(`${entry.key} (local)`);\n } else if (entry.source === \"skipped\") {\n skipped.push(`${entry.key} (no URL resolved)`);\n } else if (entry.source === \"failed\") {\n const detail = entry.error ? `: ${entry.error}` : \"\";\n failed.push(`${entry.key}${detail}`);\n }\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed,\n source: refreshed.runtime.api.source,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n dbStudio: builder.dbStudio.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n loadProjectEnv(projectDir);\n const refreshed = await loadResolvedConfig({ cwd: projectDir });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: \"Failed to load bos.config.json\",\n };\n }\n\n const { resolvePluginDbInfo } = await import(\"./cli/db-studio\");\n const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);\n\n return {\n status: \"success\" as const,\n plugin: info.key,\n source: info.source,\n section: info.section,\n databaseSecret: info.databaseSecret,\n databaseUrl: info.databaseUrl,\n workspaceDir: info.workspaceDir,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n source: \"remote\" as const,\n section: \"\",\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n dbDoctor: builder.dbDoctor.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n slug: \"\",\n journalTable: \"\",\n journalSchema: \"\",\n diagnosis: \"error\",\n localMigrationCount: 0,\n appliedHashCount: 0,\n expectedTables: [],\n missingTables: [],\n legacyCount: 0,\n error: \"No bos.config.json\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n loadProjectEnv(projectDir);\n const refreshed = await loadResolvedConfig({ cwd: projectDir });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n slug: \"\",\n journalTable: \"\",\n journalSchema: \"\",\n diagnosis: \"error\",\n localMigrationCount: 0,\n appliedHashCount: 0,\n expectedTables: [],\n missingTables: [],\n legacyCount: 0,\n error: \"Failed to load config\",\n };\n }\n\n const { resolvePluginDbInfo } = await import(\"./cli/db-studio\");\n const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);\n\n const { diagnosePlugin } = await import(\"./cli/db-doctor\");\n const report = await diagnosePlugin(info);\n\n return {\n status: \"success\" as const,\n ...report,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n plugin: input.plugin,\n slug: \"\",\n journalTable: \"\",\n journalSchema: \"\",\n diagnosis: \"error\",\n localMigrationCount: 0,\n appliedHashCount: 0,\n expectedTables: [],\n missingTables: [],\n legacyCount: 0,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n dbRepair: builder.dbRepair.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n message: \"No bos.config.json found\",\n diagnosis: null,\n error: \"No config\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n loadProjectEnv(projectDir);\n const refreshed = await loadResolvedConfig({ cwd: projectDir });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n message: \"Failed to load config\",\n diagnosis: null,\n error: \"Config load failed\",\n };\n }\n\n const { resolvePluginDbInfo } = await import(\"./cli/db-studio\");\n const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);\n\n const { repairPlugin } = await import(\"./cli/db-repair\");\n const result = await repairPlugin(info, input.mode ?? \"history-reset\");\n\n return {\n ...result,\n error: result.status === \"error\" ? result.message : undefined,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n message: error instanceof Error ? error.message : \"Unknown error\",\n diagnosis: null,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n status: builder.status.handler(async () => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await getStatus(projectDir);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction computeAllowedWorkspaces(overrides: string[], plugins?: string[]): string[] {\n const workspaces: string[] = [];\n for (const section of overrides) {\n if (section === \"host\") workspaces.push(\"host\");\n if (section === \"ui\") workspaces.push(\"ui\");\n if (section === \"api\") workspaces.push(\"api\");\n }\n if (plugins && plugins.length > 0) {\n workspaces.push(\"plugins/*\");\n }\n return workspaces;\n}\n"],"mappings":"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"}
package/dist/plugin.d.cts CHANGED
@@ -60,8 +60,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
60
60
  interactive: z.ZodOptional<z.ZodBoolean>;
61
61
  }, z.core.$strip>, z.ZodObject<{
62
62
  status: z.ZodEnum<{
63
- started: "started";
64
63
  error: "error";
64
+ started: "started";
65
65
  }>;
66
66
  description: z.ZodString;
67
67
  processes: z.ZodArray<z.ZodString>;
@@ -386,10 +386,10 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
386
386
  source: z.ZodOptional<z.ZodString>;
387
387
  plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
388
388
  overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
389
- host: "host";
389
+ plugins: "plugins";
390
390
  ui: "ui";
391
+ host: "host";
391
392
  api: "api";
392
- plugins: "plugins";
393
393
  }>>>;
394
394
  noInteractive: z.ZodDefault<z.ZodBoolean>;
395
395
  noInstall: z.ZodDefault<z.ZodBoolean>;
@@ -405,10 +405,10 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
405
405
  extends: z.ZodString;
406
406
  plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
407
407
  overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
408
- host: "host";
408
+ plugins: "plugins";
409
409
  ui: "ui";
410
+ host: "host";
410
411
  api: "api";
411
- plugins: "plugins";
412
412
  }>>>;
413
413
  filesCopied: z.ZodNumber;
414
414
  timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -492,8 +492,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
492
492
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
493
493
  typesGen: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
494
494
  env: z.ZodOptional<z.ZodEnum<{
495
- production: "production";
496
495
  development: "development";
496
+ production: "production";
497
497
  }>>;
498
498
  dryRun: z.ZodDefault<z.ZodBoolean>;
499
499
  }, z.core.$strip>, z.ZodObject<{
@@ -529,6 +529,45 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
529
529
  workspaceDir: z.ZodOptional<z.ZodString>;
530
530
  error: z.ZodOptional<z.ZodString>;
531
531
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
532
+ dbDoctor: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
533
+ plugin: z.ZodString;
534
+ }, z.core.$strip>, z.ZodObject<{
535
+ status: z.ZodEnum<{
536
+ success: "success";
537
+ error: "error";
538
+ }>;
539
+ plugin: z.ZodString;
540
+ slug: z.ZodString;
541
+ journalTable: z.ZodString;
542
+ journalSchema: z.ZodString;
543
+ diagnosis: z.ZodString;
544
+ localMigrationCount: z.ZodNumber;
545
+ appliedHashCount: z.ZodNumber;
546
+ expectedTables: z.ZodArray<z.ZodString>;
547
+ missingTables: z.ZodArray<z.ZodString>;
548
+ legacyCount: z.ZodNumber;
549
+ workspaceDir: z.ZodOptional<z.ZodString>;
550
+ dbSecret: z.ZodOptional<z.ZodString>;
551
+ dbUrl: z.ZodOptional<z.ZodString>;
552
+ error: z.ZodOptional<z.ZodString>;
553
+ }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
554
+ dbRepair: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
555
+ plugin: z.ZodString;
556
+ mode: z.ZodDefault<z.ZodEnum<{
557
+ "history-reset": "history-reset";
558
+ recreate: "recreate";
559
+ }>>;
560
+ yes: z.ZodOptional<z.ZodBoolean>;
561
+ }, z.core.$strip>, z.ZodObject<{
562
+ status: z.ZodEnum<{
563
+ error: "error";
564
+ repaired: "repaired";
565
+ refused: "refused";
566
+ }>;
567
+ message: z.ZodString;
568
+ diagnosis: z.ZodAny;
569
+ error: z.ZodOptional<z.ZodString>;
570
+ }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
532
571
  }, z.ZodObject<{
533
572
  configPath: z.ZodOptional<z.ZodString>;
534
573
  }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>, undefined, {
@@ -642,7 +681,7 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
642
681
  }> | undefined;
643
682
  } | null;
644
683
  runtimeConfig: {
645
- env: "production" | "staging" | "development";
684
+ env: "development" | "production" | "staging";
646
685
  account: string;
647
686
  networkId: "testnet" | "mainnet";
648
687
  host: {