{"version":3,"file":"run.cjs","names":["parseServeOptions","readSyncDrift","runSync","globalDoomConfigDirectory","os","runServerRuntime"],"sources":["../../../src/cli/server/run.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { globalDoomConfigDirectory } from '@agimon-ai/doompi-config/config';\n\nimport { runServerRuntime } from '../../builders/server/runtime';\nimport { readSyncDrift } from '../../composition/syncDrift';\nimport { runSync } from '../commands/sync/workflow';\nimport { resolveHarnessOptions } from '../harnessOptions';\nimport { parseServeOptions } from './options';\n\nconst DOOMPI_ROOT_ENV = 'DOOMPI_ROOT';\n\nexport async function runServer(args: readonly string[]): Promise<number> {\n  const options = parseServeOptions(args);\n  const environment = Object.freeze({ ...process.env });\n  const syncRuntime = async (root: string, syncEnvironment: NodeJS.ProcessEnv, global = false): Promise<void> => {\n    const runtimeDrift = readSyncDrift({\n      repoRoot: root,\n      homeDirectory: syncEnvironment.HOME,\n      requireFreshSources: false,\n      requireWebBundle: true,\n    });\n    if (runtimeDrift.fresh) return;\n    let output = '';\n    const environment = global ? { ...syncEnvironment, [DOOMPI_ROOT_ENV]: root } : syncEnvironment;\n    const code = await runSync(global ? ['sync', '--global'] : ['sync'], environment, root, {\n      write(chunk) {\n        output += String(chunk);\n        return true;\n      },\n    });\n    if (code !== 0) throw new Error(output.trim() || `Workspace sync exited with code ${String(code)}`);\n  };\n  const controller = new AbortController();\n  const stop = () => controller.abort();\n  process.on('SIGINT', stop);\n  process.on('SIGTERM', stop);\n  // An IPC parent owns this server's lifetime. Its channel closes even when the\n  // parent is killed before it can forward a termination signal.\n  process.on('disconnect', stop);\n  try {\n    await syncRuntime(globalDoomConfigDirectory(environment.HOME ?? os.homedir()), environment, true);\n    return await runServerRuntime(options, {\n      cwd: process.cwd(),\n      environment,\n      signal: controller.signal,\n      resolveHarnessOptions,\n      notice: (message) => void process.stderr.write(`[doompi-server] ${message}\\n`),\n      syncWorkspace: syncRuntime,\n    });\n  } finally {\n    process.off('SIGINT', stop);\n    process.off('SIGTERM', stop);\n    process.off('disconnect', stop);\n  }\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAM,kBAAkB;AAExB,eAAsB,UAAU,MAA0C;CACxE,MAAM,UAAUA,gBAAAA,kBAAkB,IAAI;CACtC,MAAM,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpD,MAAM,cAAc,OAAO,MAAc,iBAAoC,SAAS,UAAyB;EAO7G,IANqBC,cAAAA,cAAc;GACjC,UAAU;GACV,eAAe,gBAAgB;GAC/B,qBAAqB;GACrB,kBAAkB;EACpB,CACe,CAAC,CAAC,OAAO;EACxB,IAAI,SAAS;EACb,MAAM,cAAc,SAAS;GAAE,GAAG;IAAkB,kBAAkB;EAAK,IAAI;EAC/E,MAAM,OAAO,MAAMC,iBAAAA,QAAQ,SAAS,CAAC,QAAQ,UAAU,IAAI,CAAC,MAAM,GAAG,aAAa,MAAM,EACtF,MAAM,OAAO;GACX,UAAU,OAAO,KAAK;GACtB,OAAO;EACT,EACF,CAAC;EACD,IAAI,SAAS,GAAG,MAAM,IAAI,MAAM,OAAO,KAAK,KAAK,mCAAmC,OAAO,IAAI,GAAG;CACpG;CACA,MAAM,aAAa,IAAI,gBAAgB;CACvC,MAAM,aAAa,WAAW,MAAM;CACpC,QAAQ,GAAG,UAAU,IAAI;CACzB,QAAQ,GAAG,WAAW,IAAI;CAG1B,QAAQ,GAAG,cAAc,IAAI;CAC7B,IAAI;EACF,MAAM,aAAA,GAAYC,gCAAAA,0BAAAA,CAA0B,YAAY,QAAQC,QAAAA,QAAG,QAAQ,CAAC,GAAG,aAAa,IAAI;EAChG,OAAO,MAAMC,kBAAAA,iBAAiB,SAAS;GACrC,KAAK,QAAQ,IAAI;GACjB;GACA,QAAQ,WAAW;GACnB,uBAAA,uBAAA;GACA,SAAS,YAAY,KAAK,QAAQ,OAAO,MAAM,mBAAmB,QAAQ,GAAG;GAC7E,eAAe;EACjB,CAAC;CACH,UAAU;EACR,QAAQ,IAAI,UAAU,IAAI;EAC1B,QAAQ,IAAI,WAAW,IAAI;EAC3B,QAAQ,IAAI,cAAc,IAAI;CAChC;AACF"}