everything-dev 1.47.2 → 1.47.3
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.
- package/dist/cli/sync.cjs +8 -1
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +8 -1
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/contract.d.cts +19 -19
- package/dist/contract.d.mts +19 -19
- package/dist/plugin.d.cts +8 -8
- package/dist/plugin.d.mts +8 -8
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/package.json +2 -2
package/dist/cli/sync.cjs
CHANGED
|
@@ -46,7 +46,8 @@ const FRAMEWORK_OWNED_SYNC_FILES = new Set([
|
|
|
46
46
|
"api/src/lib/context.ts",
|
|
47
47
|
"api/src/db/index.ts",
|
|
48
48
|
"api/src/db/layer.ts",
|
|
49
|
-
"api/src/db/migrate.ts"
|
|
49
|
+
"api/src/db/migrate.ts",
|
|
50
|
+
"api/src/global.d.ts"
|
|
50
51
|
]);
|
|
51
52
|
function computeHash(content) {
|
|
52
53
|
return (0, node_crypto.createHash)("sha256").update(content).digest("hex").substring(0, 16);
|
|
@@ -265,6 +266,12 @@ async function syncTemplate(projectDir, options) {
|
|
|
265
266
|
destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);
|
|
266
267
|
}
|
|
267
268
|
}
|
|
269
|
+
for (const pluginKey of childPlugins) {
|
|
270
|
+
if (!(0, node_fs.existsSync)((0, node_path.join)(projectDir, "plugins", pluginKey, "src"))) continue;
|
|
271
|
+
const sourceFile = "api/src/global.d.ts";
|
|
272
|
+
if (!(0, node_fs.existsSync)((0, node_path.join)(sourceDir, sourceFile))) continue;
|
|
273
|
+
destToSource.set(`plugins/${pluginKey}/src/global.d.ts`, sourceFile);
|
|
274
|
+
}
|
|
268
275
|
for (const pluginKey of childPlugins) {
|
|
269
276
|
if (!(0, node_fs.existsSync)((0, node_path.join)(projectDir, "plugins", pluginKey, "src", "db"))) continue;
|
|
270
277
|
for (const dbFile of [
|
package/dist/cli/sync.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.cjs","names":["mergeBosConfigWithTemplate","isPlainObjectFromMerge","resolveExtendsRef","resolveSourceDir","extractSkillsBlock","buildChildAgentsMd","personalizeConfig","syncResolvedSharedDeps","loadResolvedConfig","writeSnapshot","runBunInstall","runTypesGen"],"sources":["../../src/cli/sync.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { SyncOptions, SyncResult } from \"../contract\";\nimport {\n isPlainObject as isPlainObjectFromMerge,\n mergeBosConfigWithTemplate,\n resolveExtendsRef,\n} from \"../merge\";\nimport { syncResolvedSharedDeps } from \"../shared-deps\";\nimport { writeGeneratedInfra } from \"./infra\";\nimport {\n buildChildAgentsMd,\n extractSkillsBlock,\n personalizeConfig,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n} from \"./init\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst FRAMEWORK_OWNED_SYNC_FILES = new Set([\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bos.config.json\",\n \"bunfig.toml\",\n \"package.json\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \".github/workflows/ci.yml\",\n \".github/workflows/deploy.yml\",\n \".github/workflows/staging.yml\",\n \".github/workflows/release.yml\",\n \"railway.toml\",\n \"ui/package.json\",\n \"ui/postcss.config.mjs\",\n \"ui/rsbuild.config.ts\",\n \"ui/tsconfig.json\",\n \"ui/src/app.ts\",\n \"ui/src/globals.d.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/lib/api.ts\",\n \"ui/src/lib/auth.ts\",\n \"ui/src/router.server.tsx\",\n \"ui/src/router.tsx\",\n \"ui/src/routes/__root.tsx\",\n \"api/package.json\",\n \"api/plugin.dev.ts\",\n \"api/rspack.config.js\",\n \"api/tsconfig.contract.json\",\n \"api/tsconfig.json\",\n \"api/src/lib/auth.ts\",\n \"api/src/lib/context.ts\",\n \"api/src/db/index.ts\",\n \"api/src/db/layer.ts\",\n \"api/src/db/migrate.ts\",\n]);\n\ntype PackageJson = Record<string, unknown>;\n\nfunction computeHash(content: string | Uint8Array): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\nexport function isFrameworkOwnedSyncFile(filePath: string): boolean {\n if (FRAMEWORK_OWNED_SYNC_FILES.has(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/lib\\/(auth|context)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/db\\/(index|layer|migrate)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/rspack\\.config\\.js$/.test(filePath)) return true;\n return false;\n}\n\nfunction computeLocalHash(projectDir: string, filePath: string): string | null {\n const fullPath = join(projectDir, filePath);\n if (!existsSync(fullPath)) return null;\n try {\n const content = readFileSync(fullPath);\n return computeHash(content);\n } catch {\n return null;\n }\n}\n\nfunction backupFiles(projectDir: string, filePaths: string[]): string | null {\n const filesToBackup = filePaths.filter((f) => existsSync(join(projectDir, f)));\n if (filesToBackup.length === 0) return null;\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const backupDir = join(projectDir, \".bos\", \"sync-backup\", timestamp);\n\n for (const filePath of filesToBackup) {\n const src = join(projectDir, filePath);\n const dest = join(backupDir, filePath);\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n\n return backupDir;\n}\n\nfunction mergeStringMaps(\n local: Record<string, string> | undefined,\n template: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!local && !template) return undefined;\n\n const merged: Record<string, string> = { ...(local ?? {}) };\n for (const [name, value] of Object.entries(template ?? {})) {\n merged[name] = value;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeWorkspacePackages(local: unknown, template: unknown): string[] | undefined {\n const localPackages = Array.isArray(local) ? local : [];\n const templatePackages = Array.isArray(template) ? template : [];\n if (localPackages.length === 0 && templatePackages.length === 0) return undefined;\n\n const ordered = new Set<string>();\n for (const entry of templatePackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n for (const entry of localPackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n\n const hasPluginEntry = [...ordered].some((e) => e.startsWith(\"plugins/\") && e !== \"plugins/*\");\n if (hasPluginEntry) {\n for (const entry of [...ordered]) {\n if (entry.startsWith(\"plugins/\") && entry !== \"plugins/*\") {\n ordered.delete(entry);\n }\n }\n ordered.add(\"plugins/*\");\n }\n\n return ordered.size > 0 ? [...ordered] : undefined;\n}\n\nexport function mergePackageJson(\n filePath: string,\n local: PackageJson,\n template: PackageJson,\n): PackageJson {\n const merged: PackageJson = { ...local, ...template };\n\n if (filePath === \"package.json\") {\n for (const key of [\"name\", \"private\", \"version\"] as const) {\n if (key in local) {\n merged[key] = local[key];\n }\n }\n } else if (\"version\" in local) {\n merged.version = local.version;\n }\n\n for (const depField of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"overrides\",\n ] as const) {\n const localDeps = local[depField] as Record<string, string> | undefined;\n const templateDeps = template[depField] as Record<string, string> | undefined;\n\n const mergedDeps = mergeStringMaps(localDeps, templateDeps);\n if (mergedDeps) {\n merged[depField] = mergedDeps;\n } else {\n delete merged[depField];\n }\n }\n\n if (\n (local.scripts && typeof local.scripts === \"object\") ||\n (template.scripts && typeof template.scripts === \"object\")\n ) {\n const mergedScripts = mergeStringMaps(\n local.scripts as Record<string, string> | undefined,\n template.scripts as Record<string, string> | undefined,\n );\n if (mergedScripts) {\n merged.scripts = mergedScripts;\n } else {\n delete merged.scripts;\n }\n }\n\n if (\n (local.workspaces && typeof local.workspaces === \"object\") ||\n (template.workspaces && typeof template.workspaces === \"object\")\n ) {\n const localWorkspaces = (local.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n const templateWorkspaces = (template.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n\n const mergedWorkspaces: { packages?: string[]; catalog?: Record<string, string> } = {\n ...localWorkspaces,\n ...templateWorkspaces,\n };\n\n const mergedPackages = mergeWorkspacePackages(\n localWorkspaces.packages,\n templateWorkspaces.packages,\n );\n if (mergedPackages) {\n mergedWorkspaces.packages = mergedPackages;\n } else {\n delete mergedWorkspaces.packages;\n }\n\n const mergedCatalog = mergeStringMaps(localWorkspaces.catalog, templateWorkspaces.catalog);\n if (mergedCatalog) {\n mergedWorkspaces.catalog = mergedCatalog;\n } else {\n delete mergedWorkspaces.catalog;\n }\n\n if (Object.keys(mergedWorkspaces).length > 0) {\n merged.workspaces = mergedWorkspaces;\n } else {\n delete merged.workspaces;\n }\n }\n\n return merged;\n}\n\nfunction toSourcePath(sourceDir: string, destPath: string): string | null {\n if (destPath.startsWith(\".github/\")) {\n const templatePath = destPath.replace(/^\\.github\\//, \".github/templates/\");\n if (existsSync(join(sourceDir, templatePath))) {\n return templatePath;\n }\n }\n\n const directPath = join(sourceDir, destPath);\n if (existsSync(directPath)) {\n return destPath;\n }\n\n return null;\n}\n\nfunction buildSyncedFileContent(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): string | Uint8Array {\n const src = join(sourceDir, filePath);\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n\n if (filePath.endsWith(\"bos.config.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergeBosConfigWithTemplate(local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n if (filePath.endsWith(\"package.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergePackageJson(destPath, local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n return readFileSync(src);\n}\n\nfunction writeSyncedFile(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): void {\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n writeFileSync(dest, buildSyncedFileContent(sourceDir, projectDir, filePath, destPath));\n}\n\nasync function getSelectedChildPlugins(\n projectDir: string,\n localConfig: Record<string, unknown>,\n): Promise<string[]> {\n if (!localConfig.plugins || typeof localConfig.plugins !== \"object\") {\n return [];\n }\n\n const pluginDirs = new Set(\n (\n await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n })\n )\n .map((file) => file.match(/^plugins\\/([^/]+)\\/package\\.json$/)?.[1])\n .filter((key): key is string => Boolean(key)),\n );\n\n const selected: string[] = [];\n for (const [pluginKey, rawEntry] of Object.entries(\n localConfig.plugins as Record<string, unknown>,\n )) {\n if (typeof rawEntry === \"string\") {\n if (!rawEntry.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, rawEntry.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n continue;\n }\n\n if (!rawEntry || typeof rawEntry !== \"object\") {\n selected.push(pluginKey);\n continue;\n }\n\n const entry = rawEntry as Record<string, unknown>;\n const development = typeof entry.development === \"string\" ? entry.development : undefined;\n if (!development?.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, development.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n }\n\n return selected;\n}\n\nfunction hasPluginsWorkspace(projectDir: string): boolean {\n const packageJsonPath = join(projectDir, \"package.json\");\n if (!existsSync(packageJsonPath)) return false;\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n workspaces?: { packages?: string[] } | string[];\n };\n const workspaces = pkg.workspaces;\n const packages = Array.isArray(workspaces)\n ? workspaces\n : Array.isArray(workspaces?.packages)\n ? workspaces.packages\n : [];\n return packages.includes(\"plugins/*\");\n } catch {\n return false;\n }\n}\n\nexport async function syncTemplate(projectDir: string, options: SyncOptions): Promise<SyncResult> {\n // Sync reads the raw bos.config.json (not the resolved config) because it needs\n // the user's explicit local settings: their extends ref, selected plugins, etc.\n // The resolved config is the merged result and would include inherited parent\n // values that the user didn't explicitly choose, which would break sync filtering.\n const localConfig = JSON.parse(\n readFileSync(join(projectDir, \"bos.config.json\"), \"utf-8\"),\n ) as Record<string, unknown>;\n\n let extendsRef: string | undefined;\n if (typeof localConfig.extends === \"string\") {\n extendsRef = localConfig.extends;\n } else if (isPlainObjectFromMerge(localConfig.extends)) {\n extendsRef = resolveExtendsRef(localConfig.extends as Record<string, string>, \"production\");\n }\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: \"No extends field found in bos.config.json — cannot determine parent\",\n };\n }\n\n const extendsMatch = extendsRef.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!extendsMatch) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: `Invalid extends reference: ${extendsRef}`,\n };\n }\n\n const extendsAccount = extendsMatch[1];\n const extendsGateway = extendsMatch[2];\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n });\n\n try {\n const childPlugins = await getSelectedChildPlugins(projectDir, localConfig);\n const withUi = existsSync(join(projectDir, \"ui\", \"package.json\"));\n const withApi = existsSync(join(projectDir, \"api\", \"package.json\"));\n const withHost = existsSync(join(projectDir, \"host\", \"package.json\"));\n const withPlugins = childPlugins.length > 0 || hasPluginsWorkspace(projectDir);\n\n const destToSource = new Map<string, string>();\n for (const destPath of FRAMEWORK_OWNED_SYNC_FILES) {\n if (destPath.startsWith(\"ui/\") && !withUi) continue;\n if (destPath.startsWith(\"api/\") && !withApi) continue;\n if (destPath.startsWith(\"host/\") && !withHost) continue;\n const sourcePath = toSourcePath(sourceDir, destPath);\n if (!sourcePath) continue;\n destToSource.set(destPath, sourcePath);\n }\n\n // Sync api/src/lib/{auth,context}.ts into each plugin's src/lib/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n for (const libFile of [\"auth.ts\", \"context.ts\"]) {\n const sourceFile = `api/src/lib/${libFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);\n }\n }\n\n // Sync api/src/db/{index,layer,migrate}.ts into each plugin's src/db/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\", \"db\"))) continue;\n for (const dbFile of [\"index.ts\", \"layer.ts\", \"migrate.ts\"]) {\n const sourceFile = `api/src/db/${dbFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/db/${dbFile}`, sourceFile);\n }\n }\n\n // Sync rspack.config.js from the template into each plugin\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey))) continue;\n const sourceFile = \"plugins/_template/rspack.config.js\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/rspack.config.js`, sourceFile);\n }\n\n const updated: string[] = [];\n const skipped: string[] = [];\n const added: string[] = [];\n\n for (const [destPath, filePath] of destToSource.entries()) {\n const localHash = computeLocalHash(projectDir, destPath);\n const sourceHash = computeHash(buildSyncedFileContent(sourceDir, projectDir, filePath));\n\n if (localHash === null) {\n added.push(destPath);\n continue;\n }\n\n if (localHash !== sourceHash) {\n updated.push(destPath);\n }\n }\n\n const account = (localConfig.account as string) || extendsAccount;\n const domain = (localConfig.domain as string) || extendsGateway;\n const overrides: Array<\"ui\" | \"api\" | \"host\" | \"plugins\"> = [];\n if (withUi) overrides.push(\"ui\");\n if (withApi) overrides.push(\"api\");\n if (withHost) overrides.push(\"host\");\n if (withPlugins) overrides.push(\"plugins\");\n\n if (options.dryRun) {\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n updated.push(\"AGENTS.md\");\n }\n }\n }\n\n return {\n status: \"dry-run\",\n updated,\n skipped,\n added,\n };\n }\n\n const filesToWrite = [...updated, ...added];\n\n if (filesToWrite.length > 0) {\n backupFiles(projectDir, filesToWrite);\n\n for (const destPath of filesToWrite) {\n const sourcePath = destToSource.get(destPath) ?? destPath;\n writeSyncedFile(sourceDir, projectDir, sourcePath, destPath);\n }\n }\n\n await personalizeConfig(projectDir, {\n extendsAccount,\n extendsGateway,\n account,\n domain,\n overrides,\n plugins: childPlugins,\n workspaceOpts: { sourceDir },\n mode: \"sync\",\n existingConfig: localConfig,\n });\n\n await syncResolvedSharedDeps({\n configDir: projectDir,\n hostMode: \"local\",\n });\n\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.runtime) {\n writeGeneratedInfra(projectDir, syncedConfig.runtime);\n }\n\n const newSnapshotFiles: Record<string, string> = {};\n for (const destPath of destToSource.keys()) {\n const hash = computeLocalHash(projectDir, destPath);\n if (hash) {\n newSnapshotFiles[destPath] = hash;\n }\n }\n\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n writeFileSync(join(projectDir, \"AGENTS.md\"), expectedContent);\n updated.push(\"AGENTS.md\");\n }\n\n newSnapshotFiles[\"AGENTS.md\"] = expectedHash;\n }\n }\n\n await writeSnapshot(projectDir, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: newSnapshotFiles,\n });\n\n if (!options.noInstall) {\n await runBunInstall(projectDir);\n await runTypesGen(projectDir);\n }\n\n return {\n status: \"synced\",\n updated,\n skipped,\n added,\n };\n } finally {\n await cleanup();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.cjs","names":["mergeBosConfigWithTemplate","isPlainObjectFromMerge","resolveExtendsRef","resolveSourceDir","extractSkillsBlock","buildChildAgentsMd","personalizeConfig","syncResolvedSharedDeps","loadResolvedConfig","writeSnapshot","runBunInstall","runTypesGen"],"sources":["../../src/cli/sync.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { SyncOptions, SyncResult } from \"../contract\";\nimport {\n isPlainObject as isPlainObjectFromMerge,\n mergeBosConfigWithTemplate,\n resolveExtendsRef,\n} from \"../merge\";\nimport { syncResolvedSharedDeps } from \"../shared-deps\";\nimport { writeGeneratedInfra } from \"./infra\";\nimport {\n buildChildAgentsMd,\n extractSkillsBlock,\n personalizeConfig,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n} from \"./init\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst FRAMEWORK_OWNED_SYNC_FILES = new Set([\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bos.config.json\",\n \"bunfig.toml\",\n \"package.json\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \".github/workflows/ci.yml\",\n \".github/workflows/deploy.yml\",\n \".github/workflows/staging.yml\",\n \".github/workflows/release.yml\",\n \"railway.toml\",\n \"ui/package.json\",\n \"ui/postcss.config.mjs\",\n \"ui/rsbuild.config.ts\",\n \"ui/tsconfig.json\",\n \"ui/src/app.ts\",\n \"ui/src/globals.d.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/lib/api.ts\",\n \"ui/src/lib/auth.ts\",\n \"ui/src/router.server.tsx\",\n \"ui/src/router.tsx\",\n \"ui/src/routes/__root.tsx\",\n \"api/package.json\",\n \"api/plugin.dev.ts\",\n \"api/rspack.config.js\",\n \"api/tsconfig.contract.json\",\n \"api/tsconfig.json\",\n \"api/src/lib/auth.ts\",\n \"api/src/lib/context.ts\",\n \"api/src/db/index.ts\",\n \"api/src/db/layer.ts\",\n \"api/src/db/migrate.ts\",\n \"api/src/global.d.ts\",\n]);\n\ntype PackageJson = Record<string, unknown>;\n\nfunction computeHash(content: string | Uint8Array): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\nexport function isFrameworkOwnedSyncFile(filePath: string): boolean {\n if (FRAMEWORK_OWNED_SYNC_FILES.has(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/lib\\/(auth|context)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/db\\/(index|layer|migrate)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/rspack\\.config\\.js$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/global\\.d\\.ts$/.test(filePath)) return true;\n return false;\n}\n\nfunction computeLocalHash(projectDir: string, filePath: string): string | null {\n const fullPath = join(projectDir, filePath);\n if (!existsSync(fullPath)) return null;\n try {\n const content = readFileSync(fullPath);\n return computeHash(content);\n } catch {\n return null;\n }\n}\n\nfunction backupFiles(projectDir: string, filePaths: string[]): string | null {\n const filesToBackup = filePaths.filter((f) => existsSync(join(projectDir, f)));\n if (filesToBackup.length === 0) return null;\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const backupDir = join(projectDir, \".bos\", \"sync-backup\", timestamp);\n\n for (const filePath of filesToBackup) {\n const src = join(projectDir, filePath);\n const dest = join(backupDir, filePath);\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n\n return backupDir;\n}\n\nfunction mergeStringMaps(\n local: Record<string, string> | undefined,\n template: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!local && !template) return undefined;\n\n const merged: Record<string, string> = { ...(local ?? {}) };\n for (const [name, value] of Object.entries(template ?? {})) {\n merged[name] = value;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeWorkspacePackages(local: unknown, template: unknown): string[] | undefined {\n const localPackages = Array.isArray(local) ? local : [];\n const templatePackages = Array.isArray(template) ? template : [];\n if (localPackages.length === 0 && templatePackages.length === 0) return undefined;\n\n const ordered = new Set<string>();\n for (const entry of templatePackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n for (const entry of localPackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n\n const hasPluginEntry = [...ordered].some((e) => e.startsWith(\"plugins/\") && e !== \"plugins/*\");\n if (hasPluginEntry) {\n for (const entry of [...ordered]) {\n if (entry.startsWith(\"plugins/\") && entry !== \"plugins/*\") {\n ordered.delete(entry);\n }\n }\n ordered.add(\"plugins/*\");\n }\n\n return ordered.size > 0 ? [...ordered] : undefined;\n}\n\nexport function mergePackageJson(\n filePath: string,\n local: PackageJson,\n template: PackageJson,\n): PackageJson {\n const merged: PackageJson = { ...local, ...template };\n\n if (filePath === \"package.json\") {\n for (const key of [\"name\", \"private\", \"version\"] as const) {\n if (key in local) {\n merged[key] = local[key];\n }\n }\n } else if (\"version\" in local) {\n merged.version = local.version;\n }\n\n for (const depField of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"overrides\",\n ] as const) {\n const localDeps = local[depField] as Record<string, string> | undefined;\n const templateDeps = template[depField] as Record<string, string> | undefined;\n\n const mergedDeps = mergeStringMaps(localDeps, templateDeps);\n if (mergedDeps) {\n merged[depField] = mergedDeps;\n } else {\n delete merged[depField];\n }\n }\n\n if (\n (local.scripts && typeof local.scripts === \"object\") ||\n (template.scripts && typeof template.scripts === \"object\")\n ) {\n const mergedScripts = mergeStringMaps(\n local.scripts as Record<string, string> | undefined,\n template.scripts as Record<string, string> | undefined,\n );\n if (mergedScripts) {\n merged.scripts = mergedScripts;\n } else {\n delete merged.scripts;\n }\n }\n\n if (\n (local.workspaces && typeof local.workspaces === \"object\") ||\n (template.workspaces && typeof template.workspaces === \"object\")\n ) {\n const localWorkspaces = (local.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n const templateWorkspaces = (template.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n\n const mergedWorkspaces: { packages?: string[]; catalog?: Record<string, string> } = {\n ...localWorkspaces,\n ...templateWorkspaces,\n };\n\n const mergedPackages = mergeWorkspacePackages(\n localWorkspaces.packages,\n templateWorkspaces.packages,\n );\n if (mergedPackages) {\n mergedWorkspaces.packages = mergedPackages;\n } else {\n delete mergedWorkspaces.packages;\n }\n\n const mergedCatalog = mergeStringMaps(localWorkspaces.catalog, templateWorkspaces.catalog);\n if (mergedCatalog) {\n mergedWorkspaces.catalog = mergedCatalog;\n } else {\n delete mergedWorkspaces.catalog;\n }\n\n if (Object.keys(mergedWorkspaces).length > 0) {\n merged.workspaces = mergedWorkspaces;\n } else {\n delete merged.workspaces;\n }\n }\n\n return merged;\n}\n\nfunction toSourcePath(sourceDir: string, destPath: string): string | null {\n if (destPath.startsWith(\".github/\")) {\n const templatePath = destPath.replace(/^\\.github\\//, \".github/templates/\");\n if (existsSync(join(sourceDir, templatePath))) {\n return templatePath;\n }\n }\n\n const directPath = join(sourceDir, destPath);\n if (existsSync(directPath)) {\n return destPath;\n }\n\n return null;\n}\n\nfunction buildSyncedFileContent(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): string | Uint8Array {\n const src = join(sourceDir, filePath);\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n\n if (filePath.endsWith(\"bos.config.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergeBosConfigWithTemplate(local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n if (filePath.endsWith(\"package.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergePackageJson(destPath, local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n return readFileSync(src);\n}\n\nfunction writeSyncedFile(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): void {\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n writeFileSync(dest, buildSyncedFileContent(sourceDir, projectDir, filePath, destPath));\n}\n\nasync function getSelectedChildPlugins(\n projectDir: string,\n localConfig: Record<string, unknown>,\n): Promise<string[]> {\n if (!localConfig.plugins || typeof localConfig.plugins !== \"object\") {\n return [];\n }\n\n const pluginDirs = new Set(\n (\n await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n })\n )\n .map((file) => file.match(/^plugins\\/([^/]+)\\/package\\.json$/)?.[1])\n .filter((key): key is string => Boolean(key)),\n );\n\n const selected: string[] = [];\n for (const [pluginKey, rawEntry] of Object.entries(\n localConfig.plugins as Record<string, unknown>,\n )) {\n if (typeof rawEntry === \"string\") {\n if (!rawEntry.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, rawEntry.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n continue;\n }\n\n if (!rawEntry || typeof rawEntry !== \"object\") {\n selected.push(pluginKey);\n continue;\n }\n\n const entry = rawEntry as Record<string, unknown>;\n const development = typeof entry.development === \"string\" ? entry.development : undefined;\n if (!development?.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, development.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n }\n\n return selected;\n}\n\nfunction hasPluginsWorkspace(projectDir: string): boolean {\n const packageJsonPath = join(projectDir, \"package.json\");\n if (!existsSync(packageJsonPath)) return false;\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n workspaces?: { packages?: string[] } | string[];\n };\n const workspaces = pkg.workspaces;\n const packages = Array.isArray(workspaces)\n ? workspaces\n : Array.isArray(workspaces?.packages)\n ? workspaces.packages\n : [];\n return packages.includes(\"plugins/*\");\n } catch {\n return false;\n }\n}\n\nexport async function syncTemplate(projectDir: string, options: SyncOptions): Promise<SyncResult> {\n // Sync reads the raw bos.config.json (not the resolved config) because it needs\n // the user's explicit local settings: their extends ref, selected plugins, etc.\n // The resolved config is the merged result and would include inherited parent\n // values that the user didn't explicitly choose, which would break sync filtering.\n const localConfig = JSON.parse(\n readFileSync(join(projectDir, \"bos.config.json\"), \"utf-8\"),\n ) as Record<string, unknown>;\n\n let extendsRef: string | undefined;\n if (typeof localConfig.extends === \"string\") {\n extendsRef = localConfig.extends;\n } else if (isPlainObjectFromMerge(localConfig.extends)) {\n extendsRef = resolveExtendsRef(localConfig.extends as Record<string, string>, \"production\");\n }\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: \"No extends field found in bos.config.json — cannot determine parent\",\n };\n }\n\n const extendsMatch = extendsRef.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!extendsMatch) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: `Invalid extends reference: ${extendsRef}`,\n };\n }\n\n const extendsAccount = extendsMatch[1];\n const extendsGateway = extendsMatch[2];\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n });\n\n try {\n const childPlugins = await getSelectedChildPlugins(projectDir, localConfig);\n const withUi = existsSync(join(projectDir, \"ui\", \"package.json\"));\n const withApi = existsSync(join(projectDir, \"api\", \"package.json\"));\n const withHost = existsSync(join(projectDir, \"host\", \"package.json\"));\n const withPlugins = childPlugins.length > 0 || hasPluginsWorkspace(projectDir);\n\n const destToSource = new Map<string, string>();\n for (const destPath of FRAMEWORK_OWNED_SYNC_FILES) {\n if (destPath.startsWith(\"ui/\") && !withUi) continue;\n if (destPath.startsWith(\"api/\") && !withApi) continue;\n if (destPath.startsWith(\"host/\") && !withHost) continue;\n const sourcePath = toSourcePath(sourceDir, destPath);\n if (!sourcePath) continue;\n destToSource.set(destPath, sourcePath);\n }\n\n // Sync api/src/lib/{auth,context}.ts into each plugin's src/lib/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n for (const libFile of [\"auth.ts\", \"context.ts\"]) {\n const sourceFile = `api/src/lib/${libFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);\n }\n }\n\n // Sync api/src/global.d.ts into each plugin's src/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n const sourceFile = \"api/src/global.d.ts\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/global.d.ts`, sourceFile);\n }\n\n // Sync api/src/db/{index,layer,migrate}.ts into each plugin's src/db/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\", \"db\"))) continue;\n for (const dbFile of [\"index.ts\", \"layer.ts\", \"migrate.ts\"]) {\n const sourceFile = `api/src/db/${dbFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/db/${dbFile}`, sourceFile);\n }\n }\n\n // Sync rspack.config.js from the template into each plugin\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey))) continue;\n const sourceFile = \"plugins/_template/rspack.config.js\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/rspack.config.js`, sourceFile);\n }\n\n const updated: string[] = [];\n const skipped: string[] = [];\n const added: string[] = [];\n\n for (const [destPath, filePath] of destToSource.entries()) {\n const localHash = computeLocalHash(projectDir, destPath);\n const sourceHash = computeHash(buildSyncedFileContent(sourceDir, projectDir, filePath));\n\n if (localHash === null) {\n added.push(destPath);\n continue;\n }\n\n if (localHash !== sourceHash) {\n updated.push(destPath);\n }\n }\n\n const account = (localConfig.account as string) || extendsAccount;\n const domain = (localConfig.domain as string) || extendsGateway;\n const overrides: Array<\"ui\" | \"api\" | \"host\" | \"plugins\"> = [];\n if (withUi) overrides.push(\"ui\");\n if (withApi) overrides.push(\"api\");\n if (withHost) overrides.push(\"host\");\n if (withPlugins) overrides.push(\"plugins\");\n\n if (options.dryRun) {\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n updated.push(\"AGENTS.md\");\n }\n }\n }\n\n return {\n status: \"dry-run\",\n updated,\n skipped,\n added,\n };\n }\n\n const filesToWrite = [...updated, ...added];\n\n if (filesToWrite.length > 0) {\n backupFiles(projectDir, filesToWrite);\n\n for (const destPath of filesToWrite) {\n const sourcePath = destToSource.get(destPath) ?? destPath;\n writeSyncedFile(sourceDir, projectDir, sourcePath, destPath);\n }\n }\n\n await personalizeConfig(projectDir, {\n extendsAccount,\n extendsGateway,\n account,\n domain,\n overrides,\n plugins: childPlugins,\n workspaceOpts: { sourceDir },\n mode: \"sync\",\n existingConfig: localConfig,\n });\n\n await syncResolvedSharedDeps({\n configDir: projectDir,\n hostMode: \"local\",\n });\n\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.runtime) {\n writeGeneratedInfra(projectDir, syncedConfig.runtime);\n }\n\n const newSnapshotFiles: Record<string, string> = {};\n for (const destPath of destToSource.keys()) {\n const hash = computeLocalHash(projectDir, destPath);\n if (hash) {\n newSnapshotFiles[destPath] = hash;\n }\n }\n\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n writeFileSync(join(projectDir, \"AGENTS.md\"), expectedContent);\n updated.push(\"AGENTS.md\");\n }\n\n newSnapshotFiles[\"AGENTS.md\"] = expectedHash;\n }\n }\n\n await writeSnapshot(projectDir, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: newSnapshotFiles,\n });\n\n if (!options.noInstall) {\n await runBunInstall(projectDir);\n await runTypesGen(projectDir);\n }\n\n return {\n status: \"synced\",\n updated,\n skipped,\n added,\n };\n } finally {\n await cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,MAAM,6BAA6B,IAAI,IAAI;CACzC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAIF,SAAS,YAAY,SAAsC;AACzD,oCAAkB,SAAS,CAAC,OAAO,QAAQ,CAAC,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG;;AAY5E,SAAS,iBAAiB,YAAoB,UAAiC;CAC7E,MAAM,+BAAgB,YAAY,SAAS;AAC3C,KAAI,yBAAY,SAAS,CAAE,QAAO;AAClC,KAAI;AAEF,SAAO,sCADsB,SACH,CAAC;SACrB;AACN,SAAO;;;AAIX,SAAS,YAAY,YAAoB,WAAoC;CAC3E,MAAM,gBAAgB,UAAU,QAAQ,kDAAsB,YAAY,EAAE,CAAC,CAAC;AAC9E,KAAI,cAAc,WAAW,EAAG,QAAO;CAGvC,MAAM,gCAAiB,YAAY,QAAQ,gCADzB,IAAI,MAAM,EAAC,aAAa,CAAC,QAAQ,SAAS,IACO,CAAC;AAEpE,MAAK,MAAM,YAAY,eAAe;EACpC,MAAM,0BAAW,YAAY,SAAS;EACtC,MAAM,2BAAY,WAAW,SAAS;AACtC,gDAAkB,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;AAC7C,4BAAa,KAAK,KAAK;;AAGzB,QAAO;;AAGT,SAAS,gBACP,OACA,UACoC;AACpC,KAAI,CAAC,SAAS,CAAC,SAAU,QAAO;CAEhC,MAAM,SAAiC,EAAE,GAAI,SAAS,EAAE,EAAG;AAC3D,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,YAAY,EAAE,CAAC,CACxD,QAAO,QAAQ;AAGjB,QAAO,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,SAAS;;AAGnD,SAAS,uBAAuB,OAAgB,UAAyC;CACvF,MAAM,gBAAgB,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE;CACvD,MAAM,mBAAmB,MAAM,QAAQ,SAAS,GAAG,WAAW,EAAE;AAChE,KAAI,cAAc,WAAW,KAAK,iBAAiB,WAAW,EAAG,QAAO;CAExE,MAAM,0BAAU,IAAI,KAAa;AACjC,MAAK,MAAM,SAAS,iBAClB,KAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,SAAQ,IAAI,MAAM;AAEvE,MAAK,MAAM,SAAS,cAClB,KAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,SAAQ,IAAI,MAAM;AAIvE,KADuB,CAAC,GAAG,QAAQ,CAAC,MAAM,MAAM,EAAE,WAAW,WAAW,IAAI,MAAM,YAChE,EAAE;AAClB,OAAK,MAAM,SAAS,CAAC,GAAG,QAAQ,CAC9B,KAAI,MAAM,WAAW,WAAW,IAAI,UAAU,YAC5C,SAAQ,OAAO,MAAM;AAGzB,UAAQ,IAAI,YAAY;;AAG1B,QAAO,QAAQ,OAAO,IAAI,CAAC,GAAG,QAAQ,GAAG;;AAG3C,SAAgB,iBACd,UACA,OACA,UACa;CACb,MAAM,SAAsB;EAAE,GAAG;EAAO,GAAG;EAAU;AAErD,KAAI,aAAa,gBACf;OAAK,MAAM,OAAO;GAAC;GAAQ;GAAW;GAAU,CAC9C,KAAI,OAAO,MACT,QAAO,OAAO,MAAM;YAGf,aAAa,MACtB,QAAO,UAAU,MAAM;AAGzB,MAAK,MAAM,YAAY;EACrB;EACA;EACA;EACA;EACD,EAAW;EACV,MAAM,YAAY,MAAM;EACxB,MAAM,eAAe,SAAS;EAE9B,MAAM,aAAa,gBAAgB,WAAW,aAAa;AAC3D,MAAI,WACF,QAAO,YAAY;MAEnB,QAAO,OAAO;;AAIlB,KACG,MAAM,WAAW,OAAO,MAAM,YAAY,YAC1C,SAAS,WAAW,OAAO,SAAS,YAAY,UACjD;EACA,MAAM,gBAAgB,gBACpB,MAAM,SACN,SAAS,QACV;AACD,MAAI,cACF,QAAO,UAAU;MAEjB,QAAO,OAAO;;AAIlB,KACG,MAAM,cAAc,OAAO,MAAM,eAAe,YAChD,SAAS,cAAc,OAAO,SAAS,eAAe,UACvD;EACA,MAAM,kBAAmB,MAAM,cAAc,EAAE;EAI/C,MAAM,qBAAsB,SAAS,cAAc,EAAE;EAKrD,MAAM,mBAA8E;GAClF,GAAG;GACH,GAAG;GACJ;EAED,MAAM,iBAAiB,uBACrB,gBAAgB,UAChB,mBAAmB,SACpB;AACD,MAAI,eACF,kBAAiB,WAAW;MAE5B,QAAO,iBAAiB;EAG1B,MAAM,gBAAgB,gBAAgB,gBAAgB,SAAS,mBAAmB,QAAQ;AAC1F,MAAI,cACF,kBAAiB,UAAU;MAE3B,QAAO,iBAAiB;AAG1B,MAAI,OAAO,KAAK,iBAAiB,CAAC,SAAS,EACzC,QAAO,aAAa;MAEpB,QAAO,OAAO;;AAIlB,QAAO;;AAGT,SAAS,aAAa,WAAmB,UAAiC;AACxE,KAAI,SAAS,WAAW,WAAW,EAAE;EACnC,MAAM,eAAe,SAAS,QAAQ,eAAe,qBAAqB;AAC1E,kDAAoB,WAAW,aAAa,CAAC,CAC3C,QAAO;;AAKX,iDADwB,WAAW,SACV,CAAC,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,uBACP,WACA,YACA,UACA,kBACqB;CACrB,MAAM,0BAAW,WAAW,SAAS;CACrC,MAAM,WACJ,qBACC,SAAS,WAAW,qBAAqB,GACtC,SAAS,QAAQ,0BAA0B,WAAW,GACtD;CACN,MAAM,2BAAY,YAAY,SAAS;AAEvC,KAAI,SAAS,SAAS,kBAAkB,EAAE;EACxC,MAAM,uCAA0B,KAAK,6BAAgB,MAAM,QAAQ,GAAG;EACtE,MAAM,4CAA+B,KAAK,QAAQ;AAElD,MAAI,cAAc;GAGhB,MAAM,SAASA,yCAFD,KAAK,MAAM,aAEsB,EAD9B,KAAK,MAAM,gBAC6B,CAAC;AAC1D,UAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,EAAE,CAAC;;;AAI9C,KAAI,SAAS,SAAS,eAAe,EAAE;EACrC,MAAM,uCAA0B,KAAK,6BAAgB,MAAM,QAAQ,GAAG;EACtE,MAAM,4CAA+B,KAAK,QAAQ;AAElD,MAAI,cAAc;GAGhB,MAAM,SAAS,iBAAiB,UAFlB,KAAK,MAAM,aAEsB,EAD9B,KAAK,MAAM,gBAC6B,CAAC;AAC1D,UAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,EAAE,CAAC;;;AAI9C,kCAAoB,IAAI;;AAG1B,SAAS,gBACP,WACA,YACA,UACA,kBACM;CACN,MAAM,WACJ,qBACC,SAAS,WAAW,qBAAqB,GACtC,SAAS,QAAQ,0BAA0B,WAAW,GACtD;CACN,MAAM,2BAAY,YAAY,SAAS;AACvC,+CAAkB,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;AAC7C,4BAAc,MAAM,uBAAuB,WAAW,YAAY,UAAU,SAAS,CAAC;;AAGxF,eAAe,wBACb,YACA,aACmB;AACnB,KAAI,CAAC,YAAY,WAAW,OAAO,YAAY,YAAY,SACzD,QAAO,EAAE;CAGX,MAAM,aAAa,IAAI,KAEnB,qBAAW,0BAA0B;EACnC,KAAK;EACL,OAAO;EACP,KAAK;EACL,UAAU;EACX,CAAC,EAED,KAAK,SAAS,KAAK,MAAM,oCAAoC,GAAG,GAAG,CACnE,QAAQ,QAAuB,QAAQ,IAAI,CAAC,CAChD;CAED,MAAM,WAAqB,EAAE;AAC7B,MAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QACzC,YAAY,QACb,EAAE;AACD,MAAI,OAAO,aAAa,UAAU;AAChC,OAAI,CAAC,SAAS,WAAW,SAAS,EAAE;AAClC,aAAS,KAAK,UAAU;AACxB;;AAIF,mDADuB,YAAY,SAAS,MAAM,EAAgB,CAAC,MAAM,CACjD,CAAC,IAAI,WAAW,IAAI,UAAU,CACpD,UAAS,KAAK,UAAU;AAE1B;;AAGF,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,YAAS,KAAK,UAAU;AACxB;;EAGF,MAAM,QAAQ;EACd,MAAM,cAAc,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAChF,MAAI,CAAC,aAAa,WAAW,SAAS,EAAE;AACtC,YAAS,KAAK,UAAU;AACxB;;AAIF,kDADuB,YAAY,YAAY,MAAM,EAAgB,CAAC,MAAM,CACpD,CAAC,IAAI,WAAW,IAAI,UAAU,CACpD,UAAS,KAAK,UAAU;;AAI5B,QAAO;;AAGT,SAAS,oBAAoB,YAA6B;CACxD,MAAM,sCAAuB,YAAY,eAAe;AACxD,KAAI,yBAAY,gBAAgB,CAAE,QAAO;AAEzC,KAAI;EAIF,MAAM,aAHM,KAAK,gCAAmB,iBAAiB,QAAQ,CAGvC,CAAC;AAMvB,UALiB,MAAM,QAAQ,WAAW,GACtC,aACA,MAAM,QAAQ,YAAY,SAAS,GACjC,WAAW,WACX,EAAE,EACQ,SAAS,YAAY;SAC/B;AACN,SAAO;;;AAIX,eAAsB,aAAa,YAAoB,SAA2C;CAKhG,MAAM,cAAc,KAAK,oDACL,YAAY,kBAAkB,EAAE,QAAQ,CAC3D;CAED,IAAI;AACJ,KAAI,OAAO,YAAY,YAAY,SACjC,cAAa,YAAY;UAChBC,4BAAuB,YAAY,QAAQ,CACpD,cAAaC,gCAAkB,YAAY,SAAmC,aAAa;AAE7F,KAAI,CAAC,YAAY,WAAW,SAAS,CACnC,QAAO;EACL,QAAQ;EACR,SAAS,EAAE;EACX,SAAS,EAAE;EACX,OAAO,EAAE;EACT,OAAO;EACR;CAGH,MAAM,eAAe,WAAW,MAAM,0BAA0B;AAChE,KAAI,CAAC,aACH,QAAO;EACL,QAAQ;EACR,SAAS,EAAE;EACX,SAAS,EAAE;EACX,OAAO,EAAE;EACT,OAAO,8BAA8B;EACtC;CAGH,MAAM,iBAAiB,aAAa;CACpC,MAAM,iBAAiB,aAAa;CAEpC,MAAM,EAAE,WAAW,YAAY,MAAMC,kCAAiB;EACpD;EACA;EACD,CAAC;AAEF,KAAI;EACF,MAAM,eAAe,MAAM,wBAAwB,YAAY,YAAY;EAC3E,MAAM,qDAAyB,YAAY,MAAM,eAAe,CAAC;EACjE,MAAM,sDAA0B,YAAY,OAAO,eAAe,CAAC;EACnE,MAAM,uDAA2B,YAAY,QAAQ,eAAe,CAAC;EACrE,MAAM,cAAc,aAAa,SAAS,KAAK,oBAAoB,WAAW;EAE9E,MAAM,+BAAe,IAAI,KAAqB;AAC9C,OAAK,MAAM,YAAY,4BAA4B;AACjD,OAAI,SAAS,WAAW,MAAM,IAAI,CAAC,OAAQ;AAC3C,OAAI,SAAS,WAAW,OAAO,IAAI,CAAC,QAAS;AAC7C,OAAI,SAAS,WAAW,QAAQ,IAAI,CAAC,SAAU;GAC/C,MAAM,aAAa,aAAa,WAAW,SAAS;AACpD,OAAI,CAAC,WAAY;AACjB,gBAAa,IAAI,UAAU,WAAW;;AAIxC,OAAK,MAAM,aAAa,cAAc;AACpC,OAAI,6CAAiB,YAAY,WAAW,WAAW,MAAM,CAAC,CAAE;AAChE,QAAK,MAAM,WAAW,CAAC,WAAW,aAAa,EAAE;IAC/C,MAAM,aAAa,eAAe;AAClC,QAAI,6CAAiB,WAAW,WAAW,CAAC,CAAE;AAC9C,iBAAa,IAAI,WAAW,UAAU,WAAW,WAAW,WAAW;;;AAK3E,OAAK,MAAM,aAAa,cAAc;AACpC,OAAI,6CAAiB,YAAY,WAAW,WAAW,MAAM,CAAC,CAAE;GAChE,MAAM,aAAa;AACnB,OAAI,6CAAiB,WAAW,WAAW,CAAC,CAAE;AAC9C,gBAAa,IAAI,WAAW,UAAU,mBAAmB,WAAW;;AAItE,OAAK,MAAM,aAAa,cAAc;AACpC,OAAI,6CAAiB,YAAY,WAAW,WAAW,OAAO,KAAK,CAAC,CAAE;AACtE,QAAK,MAAM,UAAU;IAAC;IAAY;IAAY;IAAa,EAAE;IAC3D,MAAM,aAAa,cAAc;AACjC,QAAI,6CAAiB,WAAW,WAAW,CAAC,CAAE;AAC9C,iBAAa,IAAI,WAAW,UAAU,UAAU,UAAU,WAAW;;;AAKzE,OAAK,MAAM,aAAa,cAAc;AACpC,OAAI,6CAAiB,YAAY,WAAW,UAAU,CAAC,CAAE;GACzD,MAAM,aAAa;AACnB,OAAI,6CAAiB,WAAW,WAAW,CAAC,CAAE;AAC9C,gBAAa,IAAI,WAAW,UAAU,oBAAoB,WAAW;;EAGvE,MAAM,UAAoB,EAAE;EAC5B,MAAM,UAAoB,EAAE;EAC5B,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,CAAC,UAAU,aAAa,aAAa,SAAS,EAAE;GACzD,MAAM,YAAY,iBAAiB,YAAY,SAAS;GACxD,MAAM,aAAa,YAAY,uBAAuB,WAAW,YAAY,SAAS,CAAC;AAEvF,OAAI,cAAc,MAAM;AACtB,UAAM,KAAK,SAAS;AACpB;;AAGF,OAAI,cAAc,WAChB,SAAQ,KAAK,SAAS;;EAI1B,MAAM,UAAW,YAAY,WAAsB;EACnD,MAAM,SAAU,YAAY,UAAqB;EACjD,MAAM,YAAsD,EAAE;AAC9D,MAAI,OAAQ,WAAU,KAAK,KAAK;AAChC,MAAI,QAAS,WAAU,KAAK,MAAM;AAClC,MAAI,SAAU,WAAU,KAAK,OAAO;AACpC,MAAI,YAAa,WAAU,KAAK,UAAU;AAE1C,MAAI,QAAQ,QAAQ;GAClB,MAAM,qBAAqB,aAAa,WAAW,YAAY;AAC/D,OAAI,oBAAoB;IAEtB,MAAM,cAAcC,kFAD4B,WAAW,mBAAmB,EAAE,QACpB,CAAC;AAC7D,QAAI,aAAa;KAKf,MAAM,eAAe,YAJGC,oCAAmB,aAAa;MACtD;MACA,SAAS;MACV,CAC+C,CAAC;AAEjD,SAD0B,iBAAiB,YAAY,YAClC,KAAK,aACxB,SAAQ,KAAK,YAAY;;;AAK/B,UAAO;IACL,QAAQ;IACR;IACA;IACA;IACD;;EAGH,MAAM,eAAe,CAAC,GAAG,SAAS,GAAG,MAAM;AAE3C,MAAI,aAAa,SAAS,GAAG;AAC3B,eAAY,YAAY,aAAa;AAErC,QAAK,MAAM,YAAY,aAErB,iBAAgB,WAAW,YADR,aAAa,IAAI,SAAS,IAAI,UACE,SAAS;;AAIhE,QAAMC,mCAAkB,YAAY;GAClC;GACA;GACA;GACA;GACA;GACA,SAAS;GACT,eAAe,EAAE,WAAW;GAC5B,MAAM;GACN,gBAAgB;GACjB,CAAC;AAEF,QAAMC,2CAAuB;GAC3B,WAAW;GACX,UAAU;GACX,CAAC;EAEF,MAAM,eAAe,MAAMC,kCAAmB,EAAE,KAAK,YAAY,CAAC;AAClE,MAAI,cAAc,QAChB,mCAAoB,YAAY,aAAa,QAAQ;EAGvD,MAAM,mBAA2C,EAAE;AACnD,OAAK,MAAM,YAAY,aAAa,MAAM,EAAE;GAC1C,MAAM,OAAO,iBAAiB,YAAY,SAAS;AACnD,OAAI,KACF,kBAAiB,YAAY;;EAIjC,MAAM,qBAAqB,aAAa,WAAW,YAAY;AAC/D,MAAI,oBAAoB;GAEtB,MAAM,cAAcJ,kFAD4B,WAAW,mBAAmB,EAAE,QACpB,CAAC;AAC7D,OAAI,aAAa;IACf,MAAM,kBAAkBC,oCAAmB,aAAa;KACtD;KACA,SAAS;KACV,CAAC;IACF,MAAM,eAAe,YAAY,gBAAgB;AAGjD,QAD0B,iBAAiB,YAAY,YAClC,KAAK,cAAc;AACtC,oDAAmB,YAAY,YAAY,EAAE,gBAAgB;AAC7D,aAAQ,KAAK,YAAY;;AAG3B,qBAAiB,eAAe;;;AAIpC,QAAMI,+BAAc,YAAY;GAC9B,WAAW,SAAS,eAAe,GAAG;GACtC,OAAO;GACR,CAAC;AAEF,MAAI,CAAC,QAAQ,WAAW;AACtB,SAAMC,+BAAc,WAAW;AAC/B,SAAMC,6BAAY,WAAW;;AAG/B,SAAO;GACL,QAAQ;GACR;GACA;GACA;GACD;WACO;AACR,QAAM,SAAS"}
|
package/dist/cli/sync.mjs
CHANGED
|
@@ -45,7 +45,8 @@ const FRAMEWORK_OWNED_SYNC_FILES = new Set([
|
|
|
45
45
|
"api/src/lib/context.ts",
|
|
46
46
|
"api/src/db/index.ts",
|
|
47
47
|
"api/src/db/layer.ts",
|
|
48
|
-
"api/src/db/migrate.ts"
|
|
48
|
+
"api/src/db/migrate.ts",
|
|
49
|
+
"api/src/global.d.ts"
|
|
49
50
|
]);
|
|
50
51
|
function computeHash(content) {
|
|
51
52
|
return createHash("sha256").update(content).digest("hex").substring(0, 16);
|
|
@@ -264,6 +265,12 @@ async function syncTemplate(projectDir, options) {
|
|
|
264
265
|
destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);
|
|
265
266
|
}
|
|
266
267
|
}
|
|
268
|
+
for (const pluginKey of childPlugins) {
|
|
269
|
+
if (!existsSync(join(projectDir, "plugins", pluginKey, "src"))) continue;
|
|
270
|
+
const sourceFile = "api/src/global.d.ts";
|
|
271
|
+
if (!existsSync(join(sourceDir, sourceFile))) continue;
|
|
272
|
+
destToSource.set(`plugins/${pluginKey}/src/global.d.ts`, sourceFile);
|
|
273
|
+
}
|
|
267
274
|
for (const pluginKey of childPlugins) {
|
|
268
275
|
if (!existsSync(join(projectDir, "plugins", pluginKey, "src", "db"))) continue;
|
|
269
276
|
for (const dbFile of [
|
package/dist/cli/sync.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.mjs","names":["isPlainObjectFromMerge"],"sources":["../../src/cli/sync.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { SyncOptions, SyncResult } from \"../contract\";\nimport {\n isPlainObject as isPlainObjectFromMerge,\n mergeBosConfigWithTemplate,\n resolveExtendsRef,\n} from \"../merge\";\nimport { syncResolvedSharedDeps } from \"../shared-deps\";\nimport { writeGeneratedInfra } from \"./infra\";\nimport {\n buildChildAgentsMd,\n extractSkillsBlock,\n personalizeConfig,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n} from \"./init\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst FRAMEWORK_OWNED_SYNC_FILES = new Set([\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bos.config.json\",\n \"bunfig.toml\",\n \"package.json\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \".github/workflows/ci.yml\",\n \".github/workflows/deploy.yml\",\n \".github/workflows/staging.yml\",\n \".github/workflows/release.yml\",\n \"railway.toml\",\n \"ui/package.json\",\n \"ui/postcss.config.mjs\",\n \"ui/rsbuild.config.ts\",\n \"ui/tsconfig.json\",\n \"ui/src/app.ts\",\n \"ui/src/globals.d.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/lib/api.ts\",\n \"ui/src/lib/auth.ts\",\n \"ui/src/router.server.tsx\",\n \"ui/src/router.tsx\",\n \"ui/src/routes/__root.tsx\",\n \"api/package.json\",\n \"api/plugin.dev.ts\",\n \"api/rspack.config.js\",\n \"api/tsconfig.contract.json\",\n \"api/tsconfig.json\",\n \"api/src/lib/auth.ts\",\n \"api/src/lib/context.ts\",\n \"api/src/db/index.ts\",\n \"api/src/db/layer.ts\",\n \"api/src/db/migrate.ts\",\n]);\n\ntype PackageJson = Record<string, unknown>;\n\nfunction computeHash(content: string | Uint8Array): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\nexport function isFrameworkOwnedSyncFile(filePath: string): boolean {\n if (FRAMEWORK_OWNED_SYNC_FILES.has(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/lib\\/(auth|context)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/db\\/(index|layer|migrate)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/rspack\\.config\\.js$/.test(filePath)) return true;\n return false;\n}\n\nfunction computeLocalHash(projectDir: string, filePath: string): string | null {\n const fullPath = join(projectDir, filePath);\n if (!existsSync(fullPath)) return null;\n try {\n const content = readFileSync(fullPath);\n return computeHash(content);\n } catch {\n return null;\n }\n}\n\nfunction backupFiles(projectDir: string, filePaths: string[]): string | null {\n const filesToBackup = filePaths.filter((f) => existsSync(join(projectDir, f)));\n if (filesToBackup.length === 0) return null;\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const backupDir = join(projectDir, \".bos\", \"sync-backup\", timestamp);\n\n for (const filePath of filesToBackup) {\n const src = join(projectDir, filePath);\n const dest = join(backupDir, filePath);\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n\n return backupDir;\n}\n\nfunction mergeStringMaps(\n local: Record<string, string> | undefined,\n template: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!local && !template) return undefined;\n\n const merged: Record<string, string> = { ...(local ?? {}) };\n for (const [name, value] of Object.entries(template ?? {})) {\n merged[name] = value;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeWorkspacePackages(local: unknown, template: unknown): string[] | undefined {\n const localPackages = Array.isArray(local) ? local : [];\n const templatePackages = Array.isArray(template) ? template : [];\n if (localPackages.length === 0 && templatePackages.length === 0) return undefined;\n\n const ordered = new Set<string>();\n for (const entry of templatePackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n for (const entry of localPackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n\n const hasPluginEntry = [...ordered].some((e) => e.startsWith(\"plugins/\") && e !== \"plugins/*\");\n if (hasPluginEntry) {\n for (const entry of [...ordered]) {\n if (entry.startsWith(\"plugins/\") && entry !== \"plugins/*\") {\n ordered.delete(entry);\n }\n }\n ordered.add(\"plugins/*\");\n }\n\n return ordered.size > 0 ? [...ordered] : undefined;\n}\n\nexport function mergePackageJson(\n filePath: string,\n local: PackageJson,\n template: PackageJson,\n): PackageJson {\n const merged: PackageJson = { ...local, ...template };\n\n if (filePath === \"package.json\") {\n for (const key of [\"name\", \"private\", \"version\"] as const) {\n if (key in local) {\n merged[key] = local[key];\n }\n }\n } else if (\"version\" in local) {\n merged.version = local.version;\n }\n\n for (const depField of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"overrides\",\n ] as const) {\n const localDeps = local[depField] as Record<string, string> | undefined;\n const templateDeps = template[depField] as Record<string, string> | undefined;\n\n const mergedDeps = mergeStringMaps(localDeps, templateDeps);\n if (mergedDeps) {\n merged[depField] = mergedDeps;\n } else {\n delete merged[depField];\n }\n }\n\n if (\n (local.scripts && typeof local.scripts === \"object\") ||\n (template.scripts && typeof template.scripts === \"object\")\n ) {\n const mergedScripts = mergeStringMaps(\n local.scripts as Record<string, string> | undefined,\n template.scripts as Record<string, string> | undefined,\n );\n if (mergedScripts) {\n merged.scripts = mergedScripts;\n } else {\n delete merged.scripts;\n }\n }\n\n if (\n (local.workspaces && typeof local.workspaces === \"object\") ||\n (template.workspaces && typeof template.workspaces === \"object\")\n ) {\n const localWorkspaces = (local.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n const templateWorkspaces = (template.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n\n const mergedWorkspaces: { packages?: string[]; catalog?: Record<string, string> } = {\n ...localWorkspaces,\n ...templateWorkspaces,\n };\n\n const mergedPackages = mergeWorkspacePackages(\n localWorkspaces.packages,\n templateWorkspaces.packages,\n );\n if (mergedPackages) {\n mergedWorkspaces.packages = mergedPackages;\n } else {\n delete mergedWorkspaces.packages;\n }\n\n const mergedCatalog = mergeStringMaps(localWorkspaces.catalog, templateWorkspaces.catalog);\n if (mergedCatalog) {\n mergedWorkspaces.catalog = mergedCatalog;\n } else {\n delete mergedWorkspaces.catalog;\n }\n\n if (Object.keys(mergedWorkspaces).length > 0) {\n merged.workspaces = mergedWorkspaces;\n } else {\n delete merged.workspaces;\n }\n }\n\n return merged;\n}\n\nfunction toSourcePath(sourceDir: string, destPath: string): string | null {\n if (destPath.startsWith(\".github/\")) {\n const templatePath = destPath.replace(/^\\.github\\//, \".github/templates/\");\n if (existsSync(join(sourceDir, templatePath))) {\n return templatePath;\n }\n }\n\n const directPath = join(sourceDir, destPath);\n if (existsSync(directPath)) {\n return destPath;\n }\n\n return null;\n}\n\nfunction buildSyncedFileContent(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): string | Uint8Array {\n const src = join(sourceDir, filePath);\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n\n if (filePath.endsWith(\"bos.config.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergeBosConfigWithTemplate(local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n if (filePath.endsWith(\"package.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergePackageJson(destPath, local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n return readFileSync(src);\n}\n\nfunction writeSyncedFile(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): void {\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n writeFileSync(dest, buildSyncedFileContent(sourceDir, projectDir, filePath, destPath));\n}\n\nasync function getSelectedChildPlugins(\n projectDir: string,\n localConfig: Record<string, unknown>,\n): Promise<string[]> {\n if (!localConfig.plugins || typeof localConfig.plugins !== \"object\") {\n return [];\n }\n\n const pluginDirs = new Set(\n (\n await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n })\n )\n .map((file) => file.match(/^plugins\\/([^/]+)\\/package\\.json$/)?.[1])\n .filter((key): key is string => Boolean(key)),\n );\n\n const selected: string[] = [];\n for (const [pluginKey, rawEntry] of Object.entries(\n localConfig.plugins as Record<string, unknown>,\n )) {\n if (typeof rawEntry === \"string\") {\n if (!rawEntry.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, rawEntry.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n continue;\n }\n\n if (!rawEntry || typeof rawEntry !== \"object\") {\n selected.push(pluginKey);\n continue;\n }\n\n const entry = rawEntry as Record<string, unknown>;\n const development = typeof entry.development === \"string\" ? entry.development : undefined;\n if (!development?.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, development.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n }\n\n return selected;\n}\n\nfunction hasPluginsWorkspace(projectDir: string): boolean {\n const packageJsonPath = join(projectDir, \"package.json\");\n if (!existsSync(packageJsonPath)) return false;\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n workspaces?: { packages?: string[] } | string[];\n };\n const workspaces = pkg.workspaces;\n const packages = Array.isArray(workspaces)\n ? workspaces\n : Array.isArray(workspaces?.packages)\n ? workspaces.packages\n : [];\n return packages.includes(\"plugins/*\");\n } catch {\n return false;\n }\n}\n\nexport async function syncTemplate(projectDir: string, options: SyncOptions): Promise<SyncResult> {\n // Sync reads the raw bos.config.json (not the resolved config) because it needs\n // the user's explicit local settings: their extends ref, selected plugins, etc.\n // The resolved config is the merged result and would include inherited parent\n // values that the user didn't explicitly choose, which would break sync filtering.\n const localConfig = JSON.parse(\n readFileSync(join(projectDir, \"bos.config.json\"), \"utf-8\"),\n ) as Record<string, unknown>;\n\n let extendsRef: string | undefined;\n if (typeof localConfig.extends === \"string\") {\n extendsRef = localConfig.extends;\n } else if (isPlainObjectFromMerge(localConfig.extends)) {\n extendsRef = resolveExtendsRef(localConfig.extends as Record<string, string>, \"production\");\n }\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: \"No extends field found in bos.config.json — cannot determine parent\",\n };\n }\n\n const extendsMatch = extendsRef.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!extendsMatch) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: `Invalid extends reference: ${extendsRef}`,\n };\n }\n\n const extendsAccount = extendsMatch[1];\n const extendsGateway = extendsMatch[2];\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n });\n\n try {\n const childPlugins = await getSelectedChildPlugins(projectDir, localConfig);\n const withUi = existsSync(join(projectDir, \"ui\", \"package.json\"));\n const withApi = existsSync(join(projectDir, \"api\", \"package.json\"));\n const withHost = existsSync(join(projectDir, \"host\", \"package.json\"));\n const withPlugins = childPlugins.length > 0 || hasPluginsWorkspace(projectDir);\n\n const destToSource = new Map<string, string>();\n for (const destPath of FRAMEWORK_OWNED_SYNC_FILES) {\n if (destPath.startsWith(\"ui/\") && !withUi) continue;\n if (destPath.startsWith(\"api/\") && !withApi) continue;\n if (destPath.startsWith(\"host/\") && !withHost) continue;\n const sourcePath = toSourcePath(sourceDir, destPath);\n if (!sourcePath) continue;\n destToSource.set(destPath, sourcePath);\n }\n\n // Sync api/src/lib/{auth,context}.ts into each plugin's src/lib/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n for (const libFile of [\"auth.ts\", \"context.ts\"]) {\n const sourceFile = `api/src/lib/${libFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);\n }\n }\n\n // Sync api/src/db/{index,layer,migrate}.ts into each plugin's src/db/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\", \"db\"))) continue;\n for (const dbFile of [\"index.ts\", \"layer.ts\", \"migrate.ts\"]) {\n const sourceFile = `api/src/db/${dbFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/db/${dbFile}`, sourceFile);\n }\n }\n\n // Sync rspack.config.js from the template into each plugin\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey))) continue;\n const sourceFile = \"plugins/_template/rspack.config.js\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/rspack.config.js`, sourceFile);\n }\n\n const updated: string[] = [];\n const skipped: string[] = [];\n const added: string[] = [];\n\n for (const [destPath, filePath] of destToSource.entries()) {\n const localHash = computeLocalHash(projectDir, destPath);\n const sourceHash = computeHash(buildSyncedFileContent(sourceDir, projectDir, filePath));\n\n if (localHash === null) {\n added.push(destPath);\n continue;\n }\n\n if (localHash !== sourceHash) {\n updated.push(destPath);\n }\n }\n\n const account = (localConfig.account as string) || extendsAccount;\n const domain = (localConfig.domain as string) || extendsGateway;\n const overrides: Array<\"ui\" | \"api\" | \"host\" | \"plugins\"> = [];\n if (withUi) overrides.push(\"ui\");\n if (withApi) overrides.push(\"api\");\n if (withHost) overrides.push(\"host\");\n if (withPlugins) overrides.push(\"plugins\");\n\n if (options.dryRun) {\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n updated.push(\"AGENTS.md\");\n }\n }\n }\n\n return {\n status: \"dry-run\",\n updated,\n skipped,\n added,\n };\n }\n\n const filesToWrite = [...updated, ...added];\n\n if (filesToWrite.length > 0) {\n backupFiles(projectDir, filesToWrite);\n\n for (const destPath of filesToWrite) {\n const sourcePath = destToSource.get(destPath) ?? destPath;\n writeSyncedFile(sourceDir, projectDir, sourcePath, destPath);\n }\n }\n\n await personalizeConfig(projectDir, {\n extendsAccount,\n extendsGateway,\n account,\n domain,\n overrides,\n plugins: childPlugins,\n workspaceOpts: { sourceDir },\n mode: \"sync\",\n existingConfig: localConfig,\n });\n\n await syncResolvedSharedDeps({\n configDir: projectDir,\n hostMode: \"local\",\n });\n\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.runtime) {\n writeGeneratedInfra(projectDir, syncedConfig.runtime);\n }\n\n const newSnapshotFiles: Record<string, string> = {};\n for (const destPath of destToSource.keys()) {\n const hash = computeLocalHash(projectDir, destPath);\n if (hash) {\n newSnapshotFiles[destPath] = hash;\n }\n }\n\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n writeFileSync(join(projectDir, \"AGENTS.md\"), expectedContent);\n updated.push(\"AGENTS.md\");\n }\n\n newSnapshotFiles[\"AGENTS.md\"] = expectedHash;\n }\n }\n\n await writeSnapshot(projectDir, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: newSnapshotFiles,\n });\n\n if (!options.noInstall) {\n await runBunInstall(projectDir);\n await runTypesGen(projectDir);\n }\n\n return {\n status: \"synced\",\n updated,\n skipped,\n added,\n };\n } finally {\n await cleanup();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.mjs","names":["isPlainObjectFromMerge"],"sources":["../../src/cli/sync.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { SyncOptions, SyncResult } from \"../contract\";\nimport {\n isPlainObject as isPlainObjectFromMerge,\n mergeBosConfigWithTemplate,\n resolveExtendsRef,\n} from \"../merge\";\nimport { syncResolvedSharedDeps } from \"../shared-deps\";\nimport { writeGeneratedInfra } from \"./infra\";\nimport {\n buildChildAgentsMd,\n extractSkillsBlock,\n personalizeConfig,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n} from \"./init\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst FRAMEWORK_OWNED_SYNC_FILES = new Set([\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bos.config.json\",\n \"bunfig.toml\",\n \"package.json\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \".github/workflows/ci.yml\",\n \".github/workflows/deploy.yml\",\n \".github/workflows/staging.yml\",\n \".github/workflows/release.yml\",\n \"railway.toml\",\n \"ui/package.json\",\n \"ui/postcss.config.mjs\",\n \"ui/rsbuild.config.ts\",\n \"ui/tsconfig.json\",\n \"ui/src/app.ts\",\n \"ui/src/globals.d.ts\",\n \"ui/src/hydrate.tsx\",\n \"ui/src/lib/api.ts\",\n \"ui/src/lib/auth.ts\",\n \"ui/src/router.server.tsx\",\n \"ui/src/router.tsx\",\n \"ui/src/routes/__root.tsx\",\n \"api/package.json\",\n \"api/plugin.dev.ts\",\n \"api/rspack.config.js\",\n \"api/tsconfig.contract.json\",\n \"api/tsconfig.json\",\n \"api/src/lib/auth.ts\",\n \"api/src/lib/context.ts\",\n \"api/src/db/index.ts\",\n \"api/src/db/layer.ts\",\n \"api/src/db/migrate.ts\",\n \"api/src/global.d.ts\",\n]);\n\ntype PackageJson = Record<string, unknown>;\n\nfunction computeHash(content: string | Uint8Array): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\nexport function isFrameworkOwnedSyncFile(filePath: string): boolean {\n if (FRAMEWORK_OWNED_SYNC_FILES.has(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/lib\\/(auth|context)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/db\\/(index|layer|migrate)\\.ts$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/rspack\\.config\\.js$/.test(filePath)) return true;\n if (/^plugins\\/[^/]+\\/src\\/global\\.d\\.ts$/.test(filePath)) return true;\n return false;\n}\n\nfunction computeLocalHash(projectDir: string, filePath: string): string | null {\n const fullPath = join(projectDir, filePath);\n if (!existsSync(fullPath)) return null;\n try {\n const content = readFileSync(fullPath);\n return computeHash(content);\n } catch {\n return null;\n }\n}\n\nfunction backupFiles(projectDir: string, filePaths: string[]): string | null {\n const filesToBackup = filePaths.filter((f) => existsSync(join(projectDir, f)));\n if (filesToBackup.length === 0) return null;\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const backupDir = join(projectDir, \".bos\", \"sync-backup\", timestamp);\n\n for (const filePath of filesToBackup) {\n const src = join(projectDir, filePath);\n const dest = join(backupDir, filePath);\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n\n return backupDir;\n}\n\nfunction mergeStringMaps(\n local: Record<string, string> | undefined,\n template: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!local && !template) return undefined;\n\n const merged: Record<string, string> = { ...(local ?? {}) };\n for (const [name, value] of Object.entries(template ?? {})) {\n merged[name] = value;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeWorkspacePackages(local: unknown, template: unknown): string[] | undefined {\n const localPackages = Array.isArray(local) ? local : [];\n const templatePackages = Array.isArray(template) ? template : [];\n if (localPackages.length === 0 && templatePackages.length === 0) return undefined;\n\n const ordered = new Set<string>();\n for (const entry of templatePackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n for (const entry of localPackages) {\n if (typeof entry === \"string\" && entry.length > 0) ordered.add(entry);\n }\n\n const hasPluginEntry = [...ordered].some((e) => e.startsWith(\"plugins/\") && e !== \"plugins/*\");\n if (hasPluginEntry) {\n for (const entry of [...ordered]) {\n if (entry.startsWith(\"plugins/\") && entry !== \"plugins/*\") {\n ordered.delete(entry);\n }\n }\n ordered.add(\"plugins/*\");\n }\n\n return ordered.size > 0 ? [...ordered] : undefined;\n}\n\nexport function mergePackageJson(\n filePath: string,\n local: PackageJson,\n template: PackageJson,\n): PackageJson {\n const merged: PackageJson = { ...local, ...template };\n\n if (filePath === \"package.json\") {\n for (const key of [\"name\", \"private\", \"version\"] as const) {\n if (key in local) {\n merged[key] = local[key];\n }\n }\n } else if (\"version\" in local) {\n merged.version = local.version;\n }\n\n for (const depField of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"overrides\",\n ] as const) {\n const localDeps = local[depField] as Record<string, string> | undefined;\n const templateDeps = template[depField] as Record<string, string> | undefined;\n\n const mergedDeps = mergeStringMaps(localDeps, templateDeps);\n if (mergedDeps) {\n merged[depField] = mergedDeps;\n } else {\n delete merged[depField];\n }\n }\n\n if (\n (local.scripts && typeof local.scripts === \"object\") ||\n (template.scripts && typeof template.scripts === \"object\")\n ) {\n const mergedScripts = mergeStringMaps(\n local.scripts as Record<string, string> | undefined,\n template.scripts as Record<string, string> | undefined,\n );\n if (mergedScripts) {\n merged.scripts = mergedScripts;\n } else {\n delete merged.scripts;\n }\n }\n\n if (\n (local.workspaces && typeof local.workspaces === \"object\") ||\n (template.workspaces && typeof template.workspaces === \"object\")\n ) {\n const localWorkspaces = (local.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n const templateWorkspaces = (template.workspaces ?? {}) as {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n\n const mergedWorkspaces: { packages?: string[]; catalog?: Record<string, string> } = {\n ...localWorkspaces,\n ...templateWorkspaces,\n };\n\n const mergedPackages = mergeWorkspacePackages(\n localWorkspaces.packages,\n templateWorkspaces.packages,\n );\n if (mergedPackages) {\n mergedWorkspaces.packages = mergedPackages;\n } else {\n delete mergedWorkspaces.packages;\n }\n\n const mergedCatalog = mergeStringMaps(localWorkspaces.catalog, templateWorkspaces.catalog);\n if (mergedCatalog) {\n mergedWorkspaces.catalog = mergedCatalog;\n } else {\n delete mergedWorkspaces.catalog;\n }\n\n if (Object.keys(mergedWorkspaces).length > 0) {\n merged.workspaces = mergedWorkspaces;\n } else {\n delete merged.workspaces;\n }\n }\n\n return merged;\n}\n\nfunction toSourcePath(sourceDir: string, destPath: string): string | null {\n if (destPath.startsWith(\".github/\")) {\n const templatePath = destPath.replace(/^\\.github\\//, \".github/templates/\");\n if (existsSync(join(sourceDir, templatePath))) {\n return templatePath;\n }\n }\n\n const directPath = join(sourceDir, destPath);\n if (existsSync(directPath)) {\n return destPath;\n }\n\n return null;\n}\n\nfunction buildSyncedFileContent(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): string | Uint8Array {\n const src = join(sourceDir, filePath);\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n\n if (filePath.endsWith(\"bos.config.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergeBosConfigWithTemplate(local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n if (filePath.endsWith(\"package.json\")) {\n const localContent = existsSync(dest) ? readFileSync(dest, \"utf-8\") : null;\n const templateContent = readFileSync(src, \"utf-8\");\n\n if (localContent) {\n const local = JSON.parse(localContent) as Record<string, unknown>;\n const template = JSON.parse(templateContent) as Record<string, unknown>;\n const merged = mergePackageJson(destPath, local, template);\n return `${JSON.stringify(merged, null, 2)}\\n`;\n }\n }\n\n return readFileSync(src);\n}\n\nfunction writeSyncedFile(\n sourceDir: string,\n projectDir: string,\n filePath: string,\n explicitDestPath?: string,\n): void {\n const destPath =\n explicitDestPath ??\n (filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath);\n const dest = join(projectDir, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n writeFileSync(dest, buildSyncedFileContent(sourceDir, projectDir, filePath, destPath));\n}\n\nasync function getSelectedChildPlugins(\n projectDir: string,\n localConfig: Record<string, unknown>,\n): Promise<string[]> {\n if (!localConfig.plugins || typeof localConfig.plugins !== \"object\") {\n return [];\n }\n\n const pluginDirs = new Set(\n (\n await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n })\n )\n .map((file) => file.match(/^plugins\\/([^/]+)\\/package\\.json$/)?.[1])\n .filter((key): key is string => Boolean(key)),\n );\n\n const selected: string[] = [];\n for (const [pluginKey, rawEntry] of Object.entries(\n localConfig.plugins as Record<string, unknown>,\n )) {\n if (typeof rawEntry === \"string\") {\n if (!rawEntry.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, rawEntry.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n continue;\n }\n\n if (!rawEntry || typeof rawEntry !== \"object\") {\n selected.push(pluginKey);\n continue;\n }\n\n const entry = rawEntry as Record<string, unknown>;\n const development = typeof entry.development === \"string\" ? entry.development : undefined;\n if (!development?.startsWith(\"local:\")) {\n selected.push(pluginKey);\n continue;\n }\n\n const localPath = join(projectDir, development.slice(\"local:\".length).trim());\n if (existsSync(localPath) || pluginDirs.has(pluginKey)) {\n selected.push(pluginKey);\n }\n }\n\n return selected;\n}\n\nfunction hasPluginsWorkspace(projectDir: string): boolean {\n const packageJsonPath = join(projectDir, \"package.json\");\n if (!existsSync(packageJsonPath)) return false;\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n workspaces?: { packages?: string[] } | string[];\n };\n const workspaces = pkg.workspaces;\n const packages = Array.isArray(workspaces)\n ? workspaces\n : Array.isArray(workspaces?.packages)\n ? workspaces.packages\n : [];\n return packages.includes(\"plugins/*\");\n } catch {\n return false;\n }\n}\n\nexport async function syncTemplate(projectDir: string, options: SyncOptions): Promise<SyncResult> {\n // Sync reads the raw bos.config.json (not the resolved config) because it needs\n // the user's explicit local settings: their extends ref, selected plugins, etc.\n // The resolved config is the merged result and would include inherited parent\n // values that the user didn't explicitly choose, which would break sync filtering.\n const localConfig = JSON.parse(\n readFileSync(join(projectDir, \"bos.config.json\"), \"utf-8\"),\n ) as Record<string, unknown>;\n\n let extendsRef: string | undefined;\n if (typeof localConfig.extends === \"string\") {\n extendsRef = localConfig.extends;\n } else if (isPlainObjectFromMerge(localConfig.extends)) {\n extendsRef = resolveExtendsRef(localConfig.extends as Record<string, string>, \"production\");\n }\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: \"No extends field found in bos.config.json — cannot determine parent\",\n };\n }\n\n const extendsMatch = extendsRef.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!extendsMatch) {\n return {\n status: \"error\",\n updated: [],\n skipped: [],\n added: [],\n error: `Invalid extends reference: ${extendsRef}`,\n };\n }\n\n const extendsAccount = extendsMatch[1];\n const extendsGateway = extendsMatch[2];\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n });\n\n try {\n const childPlugins = await getSelectedChildPlugins(projectDir, localConfig);\n const withUi = existsSync(join(projectDir, \"ui\", \"package.json\"));\n const withApi = existsSync(join(projectDir, \"api\", \"package.json\"));\n const withHost = existsSync(join(projectDir, \"host\", \"package.json\"));\n const withPlugins = childPlugins.length > 0 || hasPluginsWorkspace(projectDir);\n\n const destToSource = new Map<string, string>();\n for (const destPath of FRAMEWORK_OWNED_SYNC_FILES) {\n if (destPath.startsWith(\"ui/\") && !withUi) continue;\n if (destPath.startsWith(\"api/\") && !withApi) continue;\n if (destPath.startsWith(\"host/\") && !withHost) continue;\n const sourcePath = toSourcePath(sourceDir, destPath);\n if (!sourcePath) continue;\n destToSource.set(destPath, sourcePath);\n }\n\n // Sync api/src/lib/{auth,context}.ts into each plugin's src/lib/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n for (const libFile of [\"auth.ts\", \"context.ts\"]) {\n const sourceFile = `api/src/lib/${libFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/lib/${libFile}`, sourceFile);\n }\n }\n\n // Sync api/src/global.d.ts into each plugin's src/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\"))) continue;\n const sourceFile = \"api/src/global.d.ts\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/global.d.ts`, sourceFile);\n }\n\n // Sync api/src/db/{index,layer,migrate}.ts into each plugin's src/db/\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey, \"src\", \"db\"))) continue;\n for (const dbFile of [\"index.ts\", \"layer.ts\", \"migrate.ts\"]) {\n const sourceFile = `api/src/db/${dbFile}`;\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/src/db/${dbFile}`, sourceFile);\n }\n }\n\n // Sync rspack.config.js from the template into each plugin\n for (const pluginKey of childPlugins) {\n if (!existsSync(join(projectDir, \"plugins\", pluginKey))) continue;\n const sourceFile = \"plugins/_template/rspack.config.js\";\n if (!existsSync(join(sourceDir, sourceFile))) continue;\n destToSource.set(`plugins/${pluginKey}/rspack.config.js`, sourceFile);\n }\n\n const updated: string[] = [];\n const skipped: string[] = [];\n const added: string[] = [];\n\n for (const [destPath, filePath] of destToSource.entries()) {\n const localHash = computeLocalHash(projectDir, destPath);\n const sourceHash = computeHash(buildSyncedFileContent(sourceDir, projectDir, filePath));\n\n if (localHash === null) {\n added.push(destPath);\n continue;\n }\n\n if (localHash !== sourceHash) {\n updated.push(destPath);\n }\n }\n\n const account = (localConfig.account as string) || extendsAccount;\n const domain = (localConfig.domain as string) || extendsGateway;\n const overrides: Array<\"ui\" | \"api\" | \"host\" | \"plugins\"> = [];\n if (withUi) overrides.push(\"ui\");\n if (withApi) overrides.push(\"api\");\n if (withHost) overrides.push(\"host\");\n if (withPlugins) overrides.push(\"plugins\");\n\n if (options.dryRun) {\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n updated.push(\"AGENTS.md\");\n }\n }\n }\n\n return {\n status: \"dry-run\",\n updated,\n skipped,\n added,\n };\n }\n\n const filesToWrite = [...updated, ...added];\n\n if (filesToWrite.length > 0) {\n backupFiles(projectDir, filesToWrite);\n\n for (const destPath of filesToWrite) {\n const sourcePath = destToSource.get(destPath) ?? destPath;\n writeSyncedFile(sourceDir, projectDir, sourcePath, destPath);\n }\n }\n\n await personalizeConfig(projectDir, {\n extendsAccount,\n extendsGateway,\n account,\n domain,\n overrides,\n plugins: childPlugins,\n workspaceOpts: { sourceDir },\n mode: \"sync\",\n existingConfig: localConfig,\n });\n\n await syncResolvedSharedDeps({\n configDir: projectDir,\n hostMode: \"local\",\n });\n\n const syncedConfig = await loadResolvedConfig({ cwd: projectDir });\n if (syncedConfig?.runtime) {\n writeGeneratedInfra(projectDir, syncedConfig.runtime);\n }\n\n const newSnapshotFiles: Record<string, string> = {};\n for (const destPath of destToSource.keys()) {\n const hash = computeLocalHash(projectDir, destPath);\n if (hash) {\n newSnapshotFiles[destPath] = hash;\n }\n }\n\n const agentsMdSourcePath = toSourcePath(sourceDir, \"AGENTS.md\");\n if (agentsMdSourcePath) {\n const agentsMdSourceContent = readFileSync(join(sourceDir, agentsMdSourcePath), \"utf-8\");\n const skillsBlock = extractSkillsBlock(agentsMdSourceContent);\n if (skillsBlock) {\n const expectedContent = buildChildAgentsMd(skillsBlock, {\n overrides,\n plugins: childPlugins,\n });\n const expectedHash = computeHash(expectedContent);\n\n const agentsMdLocalHash = computeLocalHash(projectDir, \"AGENTS.md\");\n if (agentsMdLocalHash !== expectedHash) {\n writeFileSync(join(projectDir, \"AGENTS.md\"), expectedContent);\n updated.push(\"AGENTS.md\");\n }\n\n newSnapshotFiles[\"AGENTS.md\"] = expectedHash;\n }\n }\n\n await writeSnapshot(projectDir, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: newSnapshotFiles,\n });\n\n if (!options.noInstall) {\n await runBunInstall(projectDir);\n await runTypesGen(projectDir);\n }\n\n return {\n status: \"synced\",\n updated,\n skipped,\n added,\n };\n } finally {\n await cleanup();\n }\n}\n"],"mappings":"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"}
|
package/dist/contract.d.cts
CHANGED
|
@@ -32,8 +32,8 @@ declare const DevOptionsSchema: z.ZodObject<{
|
|
|
32
32
|
}, z.core.$strip>;
|
|
33
33
|
declare const DevResultSchema: z.ZodObject<{
|
|
34
34
|
status: z.ZodEnum<{
|
|
35
|
-
started: "started";
|
|
36
35
|
error: "error";
|
|
36
|
+
started: "started";
|
|
37
37
|
}>;
|
|
38
38
|
description: z.ZodString;
|
|
39
39
|
processes: z.ZodArray<z.ZodString>;
|
|
@@ -258,8 +258,8 @@ declare const PluginPublishResultSchema: z.ZodObject<{
|
|
|
258
258
|
declare const WorkspaceDeployResultSchema: z.ZodObject<{
|
|
259
259
|
key: z.ZodString;
|
|
260
260
|
kind: z.ZodEnum<{
|
|
261
|
-
app: "app";
|
|
262
261
|
plugin: "plugin";
|
|
262
|
+
app: "app";
|
|
263
263
|
}>;
|
|
264
264
|
success: z.ZodBoolean;
|
|
265
265
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -297,8 +297,8 @@ declare const PublishResultSchema: z.ZodObject<{
|
|
|
297
297
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
298
298
|
key: z.ZodString;
|
|
299
299
|
kind: z.ZodEnum<{
|
|
300
|
-
app: "app";
|
|
301
300
|
plugin: "plugin";
|
|
301
|
+
app: "app";
|
|
302
302
|
}>;
|
|
303
303
|
success: z.ZodBoolean;
|
|
304
304
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -341,8 +341,8 @@ declare const DeployResultSchema: z.ZodObject<{
|
|
|
341
341
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
342
342
|
key: z.ZodString;
|
|
343
343
|
kind: z.ZodEnum<{
|
|
344
|
-
app: "app";
|
|
345
344
|
plugin: "plugin";
|
|
345
|
+
app: "app";
|
|
346
346
|
}>;
|
|
347
347
|
success: z.ZodBoolean;
|
|
348
348
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -373,20 +373,20 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
373
373
|
error: z.ZodOptional<z.ZodString>;
|
|
374
374
|
}, z.core.$strip>;
|
|
375
375
|
declare const OverrideSectionSchema: z.ZodEnum<{
|
|
376
|
-
|
|
376
|
+
plugins: "plugins";
|
|
377
377
|
ui: "ui";
|
|
378
|
+
host: "host";
|
|
378
379
|
api: "api";
|
|
379
|
-
plugins: "plugins";
|
|
380
380
|
}>;
|
|
381
381
|
declare const RuntimeOverrideTargetBaseSchema: z.ZodEnum<{
|
|
382
|
+
plugins: "plugins";
|
|
382
383
|
ui: "ui";
|
|
383
384
|
api: "api";
|
|
384
|
-
plugins: "plugins";
|
|
385
385
|
}>;
|
|
386
386
|
declare const RuntimeOverrideTargetSchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
387
|
+
plugins: "plugins";
|
|
387
388
|
ui: "ui";
|
|
388
389
|
api: "api";
|
|
389
|
-
plugins: "plugins";
|
|
390
390
|
}>, z.ZodString]>;
|
|
391
391
|
declare const InitOptionsSchema: z.ZodObject<{
|
|
392
392
|
extends: z.ZodOptional<z.ZodString>;
|
|
@@ -396,10 +396,10 @@ declare const InitOptionsSchema: z.ZodObject<{
|
|
|
396
396
|
source: z.ZodOptional<z.ZodString>;
|
|
397
397
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
398
398
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
399
|
-
|
|
399
|
+
plugins: "plugins";
|
|
400
400
|
ui: "ui";
|
|
401
|
+
host: "host";
|
|
401
402
|
api: "api";
|
|
402
|
-
plugins: "plugins";
|
|
403
403
|
}>>>;
|
|
404
404
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
405
405
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -416,10 +416,10 @@ declare const InitResultSchema: z.ZodObject<{
|
|
|
416
416
|
extends: z.ZodString;
|
|
417
417
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
418
418
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
419
|
-
|
|
419
|
+
plugins: "plugins";
|
|
420
420
|
ui: "ui";
|
|
421
|
+
host: "host";
|
|
421
422
|
api: "api";
|
|
422
|
-
plugins: "plugins";
|
|
423
423
|
}>>>;
|
|
424
424
|
filesCopied: z.ZodNumber;
|
|
425
425
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -569,8 +569,8 @@ declare const bosContract: {
|
|
|
569
569
|
interactive: z.ZodOptional<z.ZodBoolean>;
|
|
570
570
|
}, z.core.$strip>, z.ZodObject<{
|
|
571
571
|
status: z.ZodEnum<{
|
|
572
|
-
started: "started";
|
|
573
572
|
error: "error";
|
|
573
|
+
started: "started";
|
|
574
574
|
}>;
|
|
575
575
|
description: z.ZodString;
|
|
576
576
|
processes: z.ZodArray<z.ZodString>;
|
|
@@ -814,8 +814,8 @@ declare const bosContract: {
|
|
|
814
814
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
815
815
|
key: z.ZodString;
|
|
816
816
|
kind: z.ZodEnum<{
|
|
817
|
-
app: "app";
|
|
818
817
|
plugin: "plugin";
|
|
818
|
+
app: "app";
|
|
819
819
|
}>;
|
|
820
820
|
success: z.ZodBoolean;
|
|
821
821
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -857,8 +857,8 @@ declare const bosContract: {
|
|
|
857
857
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
858
858
|
key: z.ZodString;
|
|
859
859
|
kind: z.ZodEnum<{
|
|
860
|
-
app: "app";
|
|
861
860
|
plugin: "plugin";
|
|
861
|
+
app: "app";
|
|
862
862
|
}>;
|
|
863
863
|
success: z.ZodBoolean;
|
|
864
864
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -895,10 +895,10 @@ declare const bosContract: {
|
|
|
895
895
|
source: z.ZodOptional<z.ZodString>;
|
|
896
896
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
897
897
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
898
|
-
|
|
898
|
+
plugins: "plugins";
|
|
899
899
|
ui: "ui";
|
|
900
|
+
host: "host";
|
|
900
901
|
api: "api";
|
|
901
|
-
plugins: "plugins";
|
|
902
902
|
}>>>;
|
|
903
903
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
904
904
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -914,10 +914,10 @@ declare const bosContract: {
|
|
|
914
914
|
extends: z.ZodString;
|
|
915
915
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
916
916
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
917
|
-
|
|
917
|
+
plugins: "plugins";
|
|
918
918
|
ui: "ui";
|
|
919
|
+
host: "host";
|
|
919
920
|
api: "api";
|
|
920
|
-
plugins: "plugins";
|
|
921
921
|
}>>>;
|
|
922
922
|
filesCopied: z.ZodNumber;
|
|
923
923
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
package/dist/contract.d.mts
CHANGED
|
@@ -32,8 +32,8 @@ declare const DevOptionsSchema: z.ZodObject<{
|
|
|
32
32
|
}, z.core.$strip>;
|
|
33
33
|
declare const DevResultSchema: z.ZodObject<{
|
|
34
34
|
status: z.ZodEnum<{
|
|
35
|
-
started: "started";
|
|
36
35
|
error: "error";
|
|
36
|
+
started: "started";
|
|
37
37
|
}>;
|
|
38
38
|
description: z.ZodString;
|
|
39
39
|
processes: z.ZodArray<z.ZodString>;
|
|
@@ -258,8 +258,8 @@ declare const PluginPublishResultSchema: z.ZodObject<{
|
|
|
258
258
|
declare const WorkspaceDeployResultSchema: z.ZodObject<{
|
|
259
259
|
key: z.ZodString;
|
|
260
260
|
kind: z.ZodEnum<{
|
|
261
|
-
app: "app";
|
|
262
261
|
plugin: "plugin";
|
|
262
|
+
app: "app";
|
|
263
263
|
}>;
|
|
264
264
|
success: z.ZodBoolean;
|
|
265
265
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -297,8 +297,8 @@ declare const PublishResultSchema: z.ZodObject<{
|
|
|
297
297
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
298
298
|
key: z.ZodString;
|
|
299
299
|
kind: z.ZodEnum<{
|
|
300
|
-
app: "app";
|
|
301
300
|
plugin: "plugin";
|
|
301
|
+
app: "app";
|
|
302
302
|
}>;
|
|
303
303
|
success: z.ZodBoolean;
|
|
304
304
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -341,8 +341,8 @@ declare const DeployResultSchema: z.ZodObject<{
|
|
|
341
341
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
342
342
|
key: z.ZodString;
|
|
343
343
|
kind: z.ZodEnum<{
|
|
344
|
-
app: "app";
|
|
345
344
|
plugin: "plugin";
|
|
345
|
+
app: "app";
|
|
346
346
|
}>;
|
|
347
347
|
success: z.ZodBoolean;
|
|
348
348
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -373,20 +373,20 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
373
373
|
error: z.ZodOptional<z.ZodString>;
|
|
374
374
|
}, z.core.$strip>;
|
|
375
375
|
declare const OverrideSectionSchema: z.ZodEnum<{
|
|
376
|
-
|
|
376
|
+
plugins: "plugins";
|
|
377
377
|
ui: "ui";
|
|
378
|
+
host: "host";
|
|
378
379
|
api: "api";
|
|
379
|
-
plugins: "plugins";
|
|
380
380
|
}>;
|
|
381
381
|
declare const RuntimeOverrideTargetBaseSchema: z.ZodEnum<{
|
|
382
|
+
plugins: "plugins";
|
|
382
383
|
ui: "ui";
|
|
383
384
|
api: "api";
|
|
384
|
-
plugins: "plugins";
|
|
385
385
|
}>;
|
|
386
386
|
declare const RuntimeOverrideTargetSchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
387
|
+
plugins: "plugins";
|
|
387
388
|
ui: "ui";
|
|
388
389
|
api: "api";
|
|
389
|
-
plugins: "plugins";
|
|
390
390
|
}>, z.ZodString]>;
|
|
391
391
|
declare const InitOptionsSchema: z.ZodObject<{
|
|
392
392
|
extends: z.ZodOptional<z.ZodString>;
|
|
@@ -396,10 +396,10 @@ declare const InitOptionsSchema: z.ZodObject<{
|
|
|
396
396
|
source: z.ZodOptional<z.ZodString>;
|
|
397
397
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
398
398
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
399
|
-
|
|
399
|
+
plugins: "plugins";
|
|
400
400
|
ui: "ui";
|
|
401
|
+
host: "host";
|
|
401
402
|
api: "api";
|
|
402
|
-
plugins: "plugins";
|
|
403
403
|
}>>>;
|
|
404
404
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
405
405
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -416,10 +416,10 @@ declare const InitResultSchema: z.ZodObject<{
|
|
|
416
416
|
extends: z.ZodString;
|
|
417
417
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
418
418
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
419
|
-
|
|
419
|
+
plugins: "plugins";
|
|
420
420
|
ui: "ui";
|
|
421
|
+
host: "host";
|
|
421
422
|
api: "api";
|
|
422
|
-
plugins: "plugins";
|
|
423
423
|
}>>>;
|
|
424
424
|
filesCopied: z.ZodNumber;
|
|
425
425
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -569,8 +569,8 @@ declare const bosContract: {
|
|
|
569
569
|
interactive: z.ZodOptional<z.ZodBoolean>;
|
|
570
570
|
}, z.core.$strip>, z.ZodObject<{
|
|
571
571
|
status: z.ZodEnum<{
|
|
572
|
-
started: "started";
|
|
573
572
|
error: "error";
|
|
573
|
+
started: "started";
|
|
574
574
|
}>;
|
|
575
575
|
description: z.ZodString;
|
|
576
576
|
processes: z.ZodArray<z.ZodString>;
|
|
@@ -814,8 +814,8 @@ declare const bosContract: {
|
|
|
814
814
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
815
815
|
key: z.ZodString;
|
|
816
816
|
kind: z.ZodEnum<{
|
|
817
|
-
app: "app";
|
|
818
817
|
plugin: "plugin";
|
|
818
|
+
app: "app";
|
|
819
819
|
}>;
|
|
820
820
|
success: z.ZodBoolean;
|
|
821
821
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -857,8 +857,8 @@ declare const bosContract: {
|
|
|
857
857
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
858
858
|
key: z.ZodString;
|
|
859
859
|
kind: z.ZodEnum<{
|
|
860
|
-
app: "app";
|
|
861
860
|
plugin: "plugin";
|
|
861
|
+
app: "app";
|
|
862
862
|
}>;
|
|
863
863
|
success: z.ZodBoolean;
|
|
864
864
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -895,10 +895,10 @@ declare const bosContract: {
|
|
|
895
895
|
source: z.ZodOptional<z.ZodString>;
|
|
896
896
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
897
897
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
898
|
-
|
|
898
|
+
plugins: "plugins";
|
|
899
899
|
ui: "ui";
|
|
900
|
+
host: "host";
|
|
900
901
|
api: "api";
|
|
901
|
-
plugins: "plugins";
|
|
902
902
|
}>>>;
|
|
903
903
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
904
904
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -914,10 +914,10 @@ declare const bosContract: {
|
|
|
914
914
|
extends: z.ZodString;
|
|
915
915
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
916
916
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
917
|
-
|
|
917
|
+
plugins: "plugins";
|
|
918
918
|
ui: "ui";
|
|
919
|
+
host: "host";
|
|
919
920
|
api: "api";
|
|
920
|
-
plugins: "plugins";
|
|
921
921
|
}>>>;
|
|
922
922
|
filesCopied: z.ZodNumber;
|
|
923
923
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
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>;
|
|
@@ -305,8 +305,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
305
305
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
306
306
|
key: z.ZodString;
|
|
307
307
|
kind: z.ZodEnum<{
|
|
308
|
-
app: "app";
|
|
309
308
|
plugin: "plugin";
|
|
309
|
+
app: "app";
|
|
310
310
|
}>;
|
|
311
311
|
success: z.ZodBoolean;
|
|
312
312
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -348,8 +348,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
348
348
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
349
349
|
key: z.ZodString;
|
|
350
350
|
kind: z.ZodEnum<{
|
|
351
|
-
app: "app";
|
|
352
351
|
plugin: "plugin";
|
|
352
|
+
app: "app";
|
|
353
353
|
}>;
|
|
354
354
|
success: z.ZodBoolean;
|
|
355
355
|
url: z.ZodOptional<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
|
-
|
|
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
|
-
|
|
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<{
|
|
@@ -642,7 +642,7 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
642
642
|
}> | undefined;
|
|
643
643
|
} | null;
|
|
644
644
|
runtimeConfig: {
|
|
645
|
-
env: "production" | "
|
|
645
|
+
env: "production" | "development" | "staging";
|
|
646
646
|
account: string;
|
|
647
647
|
networkId: "testnet" | "mainnet";
|
|
648
648
|
host: {
|
package/dist/plugin.d.mts
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>;
|
|
@@ -305,8 +305,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
305
305
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
306
306
|
key: z.ZodString;
|
|
307
307
|
kind: z.ZodEnum<{
|
|
308
|
-
app: "app";
|
|
309
308
|
plugin: "plugin";
|
|
309
|
+
app: "app";
|
|
310
310
|
}>;
|
|
311
311
|
success: z.ZodBoolean;
|
|
312
312
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -348,8 +348,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
348
348
|
deployResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
349
349
|
key: z.ZodString;
|
|
350
350
|
kind: z.ZodEnum<{
|
|
351
|
-
app: "app";
|
|
352
351
|
plugin: "plugin";
|
|
352
|
+
app: "app";
|
|
353
353
|
}>;
|
|
354
354
|
success: z.ZodBoolean;
|
|
355
355
|
url: z.ZodOptional<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
|
-
|
|
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
|
-
|
|
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<{
|
|
@@ -642,7 +642,7 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
|
|
|
642
642
|
}> | undefined;
|
|
643
643
|
} | null;
|
|
644
644
|
runtimeConfig: {
|
|
645
|
-
env: "production" | "
|
|
645
|
+
env: "production" | "development" | "staging";
|
|
646
646
|
account: string;
|
|
647
647
|
networkId: "testnet" | "mainnet";
|
|
648
648
|
host: {
|
package/dist/types.d.cts
CHANGED
|
@@ -380,8 +380,8 @@ type BosConfig = z.infer<typeof BosConfigSchema>;
|
|
|
380
380
|
declare const RuntimeConfigSchema: z.ZodObject<{
|
|
381
381
|
env: z.ZodEnum<{
|
|
382
382
|
production: "production";
|
|
383
|
-
staging: "staging";
|
|
384
383
|
development: "development";
|
|
384
|
+
staging: "staging";
|
|
385
385
|
}>;
|
|
386
386
|
account: z.ZodString;
|
|
387
387
|
domain: z.ZodOptional<z.ZodString>;
|
|
@@ -509,8 +509,8 @@ type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
|
|
|
509
509
|
declare const ClientRuntimeConfigSchema: z.ZodObject<{
|
|
510
510
|
env: z.ZodEnum<{
|
|
511
511
|
production: "production";
|
|
512
|
-
staging: "staging";
|
|
513
512
|
development: "development";
|
|
513
|
+
staging: "staging";
|
|
514
514
|
}>;
|
|
515
515
|
account: z.ZodString;
|
|
516
516
|
networkId: z.ZodEnum<{
|
package/dist/types.d.mts
CHANGED
|
@@ -380,8 +380,8 @@ type BosConfig = z.infer<typeof BosConfigSchema>;
|
|
|
380
380
|
declare const RuntimeConfigSchema: z.ZodObject<{
|
|
381
381
|
env: z.ZodEnum<{
|
|
382
382
|
production: "production";
|
|
383
|
-
staging: "staging";
|
|
384
383
|
development: "development";
|
|
384
|
+
staging: "staging";
|
|
385
385
|
}>;
|
|
386
386
|
account: z.ZodString;
|
|
387
387
|
domain: z.ZodOptional<z.ZodString>;
|
|
@@ -509,8 +509,8 @@ type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
|
|
|
509
509
|
declare const ClientRuntimeConfigSchema: z.ZodObject<{
|
|
510
510
|
env: z.ZodEnum<{
|
|
511
511
|
production: "production";
|
|
512
|
-
staging: "staging";
|
|
513
512
|
development: "development";
|
|
513
|
+
staging: "staging";
|
|
514
514
|
}>;
|
|
515
515
|
account: z.ZodString;
|
|
516
516
|
networkId: z.ZodEnum<{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "everything-dev",
|
|
3
|
-
"version": "1.47.
|
|
3
|
+
"version": "1.47.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"dotenv": "^17.3.1",
|
|
133
133
|
"effect": "^3.21.0",
|
|
134
134
|
"execa": "^9.5.2",
|
|
135
|
-
"every-plugin": "^2.9.
|
|
135
|
+
"every-plugin": "^2.9.1",
|
|
136
136
|
"glob": "^13.0.6",
|
|
137
137
|
"gradient-string": "^3.0.0",
|
|
138
138
|
"ink": "^6.8.0",
|