{"version":3,"file":"prepare.cjs","names":["syncStateRootMatches","computeInputsHash","recordResolvedEntries","createLayerResolvers","os","resolveSyncLocation","buildHarnessContext","ensureLayerPackages","buildRuntimeBundle","readSyncState","projectRegistersDoom"],"sources":["../../../src/builders/cli/prepare.ts"],"sourcesContent":["import os from 'node:os';\n\nimport type { MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport type { HarnessTelemetry } from '@agimon-ai/doompi-core/runtime-log-sink-telemetry';\nimport { resolveSyncLocation } from '@agimon-ai/doompi-core/sync-location';\n\nimport { ensureLayerPackages } from '../../composition/layerPackageInstaller';\nimport {\n  computeInputsHash,\n  readSyncState,\n  recordResolvedEntries,\n  type SyncState,\n  syncStateRootMatches,\n} from '../../composition/syncState';\nimport type { HarnessOptions } from '../../composition/types/harness';\nimport { createLayerResolvers } from './extensionAssembler';\nimport { buildHarnessContext } from './harnessContext';\nimport type { SyncedRuntimeBuild } from './index';\nimport { projectRegistersDoom } from './projectSettings';\nimport { buildRuntimeBundle } from './runtimeBundle';\nexport interface BuildResult {\n  bundle: string;\n  manifest: string;\n  extensionCount: number;\n  skillCount: number;\n  agentCount: number;\n  syncedBootstrap?: string;\n  syncedBundleCount?: number;\n  /** Set when the repository registers DoomPi the user scope already provides. */\n  duplicateRegistration?: boolean;\n}\n\nfunction syncStateIsCurrent(\n  repoRoot: string,\n  state: SyncState,\n  majorModesConfig: MajorModesConfig,\n  compositionFingerprint: string,\n  homeDirectory: string,\n): boolean {\n  if (!syncStateRootMatches(repoRoot, state.root)) return false;\n  if (state.compositionFingerprint !== compositionFingerprint) return false;\n  if (computeInputsHash(repoRoot, state.selection, homeDirectory) !== state.inputsHash) return false;\n  const resolved = recordResolvedEntries(majorModesConfig, createLayerResolvers(repoRoot));\n  return JSON.stringify(resolved) === JSON.stringify(state.resolved);\n}\n\nexport async function buildPreparedRuntime(\n  options: HarnessOptions,\n  environment: NodeJS.ProcessEnv,\n  telemetry?: HarnessTelemetry,\n): Promise<BuildResult> {\n  const { repoRoot } = options;\n  const homeDirectory = options.homeDirectory ?? environment.HOME ?? os.homedir();\n  const location = resolveSyncLocation(repoRoot, homeDirectory);\n  const context = await buildHarnessContext({ ...options, repoRoot, homeDirectory }, telemetry);\n  try {\n    await ensureLayerPackages({\n      repoRoot,\n      config: context.majorModesConfig,\n      layers: context.selectedLayers,\n      environment,\n    });\n    const built = await buildRuntimeBundle(context, undefined, location);\n    let synced: SyncedRuntimeBuild | undefined;\n    let syncState: ReturnType<typeof readSyncState>;\n    try {\n      syncState = readSyncState(repoRoot, homeDirectory);\n    } catch {\n      // The private build phase runs before `doompi sync` replaces stale state.\n      // An obsolete state must not prevent that repair path from completing.\n      syncState = undefined;\n    }\n    if (\n      syncState &&\n      syncStateIsCurrent(repoRoot, syncState, context.majorModesConfig, built.fingerprint, homeDirectory)\n    ) {\n      const { buildSyncedRuntime } = await import('./index');\n      synced = await buildSyncedRuntime(repoRoot, environment, homeDirectory);\n    }\n    return {\n      bundle: built.bundle,\n      manifest: built.manifest,\n      extensionCount: built.extensions.length,\n      skillCount: context.resources.skillCount,\n      agentCount: context.resources.agentCount,\n      syncedBootstrap: synced?.bootstrap,\n      syncedBundleCount: synced ? Object.keys(synced.bundles).length : undefined,\n      duplicateRegistration: projectRegistersDoom(repoRoot),\n    };\n  } finally {\n    await context.cleanup();\n  }\n}\n"],"mappings":";;;;;;;;;;;AAgCA,SAAS,mBACP,UACA,OACA,kBACA,wBACA,eACS;CACT,IAAI,CAACA,gBAAAA,qBAAqB,UAAU,MAAM,IAAI,GAAG,OAAO;CACxD,IAAI,MAAM,2BAA2B,wBAAwB,OAAO;CACpE,IAAIC,gBAAAA,kBAAkB,UAAU,MAAM,WAAW,aAAa,MAAM,MAAM,YAAY,OAAO;CAC7F,MAAM,WAAWC,gBAAAA,sBAAsB,kBAAkBC,8CAAAA,qBAAqB,QAAQ,CAAC;CACvF,OAAO,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,MAAM,QAAQ;AACnE;AAEA,eAAsB,qBACpB,SACA,aACA,WACsB;CACtB,MAAM,EAAE,aAAa;CACrB,MAAM,gBAAgB,QAAQ,iBAAiB,YAAY,QAAQC,QAAAA,QAAG,QAAQ;CAC9E,MAAM,YAAA,GAAWC,qCAAAA,oBAAAA,CAAoB,UAAU,aAAa;CAC5D,MAAM,UAAU,MAAMC,uBAAAA,oBAAoB;EAAE,GAAG;EAAS;EAAU;CAAc,GAAG,SAAS;CAC5F,IAAI;EACF,MAAMC,cAAAA,oBAAoB;GACxB;GACA,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;GAChB;EACF,CAAC;EACD,MAAM,QAAQ,MAAMC,gBAAAA,mBAAmB,SAAS,KAAA,GAAW,QAAQ;EACnE,IAAI;EACJ,IAAI;EACJ,IAAI;GACF,YAAYC,gBAAAA,cAAc,UAAU,aAAa;EACnD,QAAQ;GAGN,YAAY,KAAA;EACd;EACA,IACE,aACA,mBAAmB,UAAU,WAAW,QAAQ,kBAAkB,MAAM,aAAa,aAAa,GAClG;GACA,MAAM,EAAE,uBAAuB,MAAA,QAAA,QAAA,CAAA,CAAA,WAAA,QAAM,aAAA,CAAA;GACrC,SAAS,MAAM,mBAAmB,UAAU,aAAa,aAAa;EACxE;EACA,OAAO;GACL,QAAQ,MAAM;GACd,UAAU,MAAM;GAChB,gBAAgB,MAAM,WAAW;GACjC,YAAY,QAAQ,UAAU;GAC9B,YAAY,QAAQ,UAAU;GAC9B,iBAAiB,QAAQ;GACzB,mBAAmB,SAAS,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,SAAS,KAAA;GACjE,uBAAuBC,wBAAAA,qBAAqB,QAAQ;EACtD;CACF,UAAU;EACR,MAAM,QAAQ,QAAQ;CACxB;AACF"}