{"version":3,"file":"harnessOptions.cjs","names":["findRepositoryRoot","path","parseHarnessArgs","readHarnessState","os","loadDoomConfig","HARNESS_STATE_KEYS","loadMajorModesConfig","loadDomains","loadProfileCatalog"],"sources":["../../src/cli/harnessOptions.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { loadDoomConfig } from '@agimon-ai/doompi-config/config';\nimport { loadDomains } from '@agimon-ai/doompi-config/domains';\nimport { HARNESS_STATE_KEYS } from '@agimon-ai/doompi-config/harnessState';\nimport { loadMajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { loadProfileCatalog } from '@agimon-ai/doompi-config/profiles';\nimport type { HarnessFailureReporter } from '@agimon-ai/doompi-core/runtime-log-sink-telemetry';\n\nimport { readHarnessState } from '../composition/harnessState';\nimport { findRepositoryRoot } from '../composition/repository';\nimport type { HarnessOptions } from '../composition/types/harness';\nimport { parseHarnessArgs } from './options';\n\nexport interface ResolveHarnessOptionsInput {\n  /** Raw launcher arguments, as the binary received them. */\n  args: readonly string[];\n  environment?: NodeJS.ProcessEnv;\n  cwd?: string;\n  /** Reports a malformed inherited harness state without failing the run. */\n  report?: HarnessFailureReporter;\n}\n\n/** Uses the nearest configured repository, or the selected directory for an unconfigured workspace. */\nfunction resolveConfigurationRoot(cwd: string): string {\n  try {\n    return findRepositoryRoot(cwd);\n  } catch {\n    return path.resolve(cwd);\n  }\n}\n\n/**\n * Settles the configuration root and the full option matrix for one run.\n *\n * Two passes are required: the first reads --cwd without touching repository\n * configuration, which keeps a run resolvable even when modes.yaml is\n * malformed, and the second applies the defaults that root supplies. An\n * inherited root wins, which is how a nested run stays pinned to the outer\n * repository rather than re-deriving one from its own cwd. When no configured\n * repository exists, the selected working directory is the configuration root.\n */\nexport function resolveHarnessOptions(input: ResolveHarnessOptionsInput): HarnessOptions {\n  const environment = input.environment ?? process.env;\n  const cwd = input.cwd ?? process.cwd();\n  const args = [...input.args];\n\n  const initial = parseHarnessArgs(args, environment, cwd);\n  const inheritedRoot = readHarnessState(environment, input.report).root;\n  const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : resolveConfigurationRoot(initial.options.cwd);\n  const homeDirectory = initial.options.homeDirectory ?? environment.HOME ?? os.homedir();\n  const defaults = loadDoomConfig(repoRoot, homeDirectory).selection;\n  const selectedEnvironment = { ...environment };\n  for (const axis of ['majorMode', 'domains', 'profile'] as const) {\n    const value = defaults?.[axis];\n    if (value !== undefined && selectedEnvironment[HARNESS_STATE_KEYS[axis]] === undefined)\n      selectedEnvironment[HARNESS_STATE_KEYS[axis]] = Array.isArray(value) ? value.join(',') : value;\n  }\n  const parsed = parseHarnessArgs(\n    args,\n    selectedEnvironment,\n    cwd,\n    loadMajorModesConfig(repoRoot, homeDirectory).defaultMajorMode,\n    loadDomains(repoRoot, homeDirectory).defaultDomains,\n    loadProfileCatalog(repoRoot, homeDirectory).defaultProfile,\n  );\n  return { repoRoot, ...parsed.options, homeDirectory };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,SAAS,yBAAyB,KAAqB;CACrD,IAAI;EACF,OAAOA,gBAAAA,mBAAmB,GAAG;CAC/B,QAAQ;EACN,OAAOC,UAAAA,QAAK,QAAQ,GAAG;CACzB;AACF;;;;;;;;;;;AAYA,SAAgB,sBAAsB,OAAmD;CACvF,MAAM,cAAc,MAAM,eAAe,QAAQ;CACjD,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI;CAE3B,MAAM,UAAUC,gBAAAA,iBAAiB,MAAM,aAAa,GAAG;CACvD,MAAM,gBAAgBC,cAAAA,iBAAiB,aAAa,MAAM,MAAM,CAAC,CAAC;CAClE,MAAM,WAAW,gBAAgBF,UAAAA,QAAK,QAAQ,aAAa,IAAI,yBAAyB,QAAQ,QAAQ,GAAG;CAC3G,MAAM,gBAAgB,QAAQ,QAAQ,iBAAiB,YAAY,QAAQG,QAAAA,QAAG,QAAQ;CACtF,MAAM,YAAA,GAAWC,gCAAAA,eAAAA,CAAe,UAAU,aAAa,CAAC,CAAC;CACzD,MAAM,sBAAsB,EAAE,GAAG,YAAY;CAC7C,KAAK,MAAM,QAAQ;EAAC;EAAa;EAAW;CAAS,GAAY;EAC/D,MAAM,QAAQ,WAAW;EACzB,IAAI,UAAU,KAAA,KAAa,oBAAoBC,sCAAAA,mBAAmB,WAAW,KAAA,GAC3E,oBAAoBA,sCAAAA,mBAAmB,SAAS,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI;CAC7F;CASA,OAAO;EAAE;EAAU,GARJJ,gBAAAA,iBACb,MACA,qBACA,MAAA,GACAK,oCAAAA,qBAAAA,CAAqB,UAAU,aAAa,CAAC,CAAC,mBAAA,GAC9CC,iCAAAA,YAAAA,CAAY,UAAU,aAAa,CAAC,CAAC,iBAAA,GACrCC,kCAAAA,mBAAAA,CAAmB,UAAU,aAAa,CAAC,CAAC,cAEnB,CAAC,CAAC;EAAS;CAAc;AACtD"}