{"version":3,"file":"index.cjs","names":["path","promisify","execFile","isLocalPackageSpecifier","fs","splitPackageSpecifier","piAgentDirectory","SettingsManager","DefaultPackageManager","createLayerResolvers"],"sources":["../../../src/composition/layerPackageInstaller/index.ts"],"sourcesContent":["import { execFile } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\n\nimport { isLocalPackageSpecifier, type MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { splitPackageSpecifier } from '@agimon-ai/doompi-core/module-resolution';\nimport { piAgentDirectory } from '@agimon-ai/doompi-core/runtime-pi-settings';\nimport { DefaultPackageManager, type PackageManager, SettingsManager } from '@earendil-works/pi-coding-agent';\n\nimport { createLayerResolvers, type ExtensionLayerResolvers } from '../../builders/cli/extensionAssembler';\n\nconst NPM_SOURCE_PREFIX = 'npm:';\nconst PI_MANAGED_NPM_DIRECTORY = path.join('.pi', 'npm');\nconst PI_MANAGED_MODULES_DIRECTORY = path.join(PI_MANAGED_NPM_DIRECTORY, 'node_modules');\nconst PI_MANAGED_PACKAGE_NAME = 'pi-extensions';\nconst UNPINNED_PACKAGE_RANGE = '*';\nconst PACKAGE_MANIFEST = 'package.json';\nconst DEFAULT_NPM_COMMAND = 'npm';\nconst NPM_CLI_ENV = 'DOOMPI_NPM_CLI';\nconst PACKAGE_CATALOG_ENV = 'DOOMPI_PACKAGE_CATALOG';\nconst REGISTRY_TIMEOUT_MS = 20_000;\nconst PACKAGE_MANAGER_STDERR_SCRIPT = [\n  \"const { spawn } = require('node:child_process');\",\n  'const [command, ...args] = process.argv.slice(1);',\n  \"if (!command) throw new Error('Missing package-manager command');\",\n  \"const child = spawn(command, args, { stdio: ['ignore', 2, 2] });\",\n  \"child.once('error', (error) => { console.error(error.message); process.exit(1); });\",\n  \"child.once('exit', (code) => process.exit(code ?? 1));\",\n].join('');\n\nconst execFileAsync = promisify(execFile);\n\nfunction overridePackageName(selector: string): string {\n  const separatorIndex = selector.indexOf('@', selector.startsWith('@') ? 1 : 0);\n  return separatorIndex === -1 ? selector : selector.slice(0, separatorIndex);\n}\n\n/**\n * Same-major patches for transitive versions pinned by the current foundation packages.\n * npm only honors overrides from the install root, so published extensions cannot carry\n * these fixes in their own manifests.\n */\nexport const SAFE_TRANSITIVE_OVERRIDES = {\n  '@hono/node-server@2.0.0 - 2.0.9': '^2.0.10',\n  '@opentelemetry/core@2.0.0 - 2.7.999': '2.8.0',\n  'brace-expansion@5.0.0 - 5.0.8': '^5.0.9',\n  'hono@4.0.0 - 4.12.33': '^4.12.34',\n  'js-yaml@4.0.0 - 4.3.1': '^4.3.2',\n  'js-yaml@5.0.0 - 5.2.1': '^5.2.2',\n  'liquidjs@10.0.0 - 10.27.1': '^10.27.2',\n  'protobufjs@8.0.0 - 8.7.1': '^8.7.2',\n} as const satisfies Readonly<Record<string, string>>;\n\nconst SAFE_TRANSITIVE_PACKAGE_NAMES = new Set(Object.keys(SAFE_TRANSITIVE_OVERRIDES).map(overridePackageName));\n\ntype LayerPackageManager = Pick<PackageManager, 'install' | 'resolveExtensionSources'>;\n\nexport interface EnsureLayerPackagesOptions {\n  repoRoot: string;\n  config: MajorModesConfig;\n  layers: readonly string[];\n  environment?: NodeJS.ProcessEnv;\n  /**\n   * Move every managed package to its newest published version.\n   *\n   * Launch installs what a selection needs and nothing more, so a session never\n   * pays for a registry round trip. Sync is the explicit maintenance command and\n   * is the only caller that asks for this.\n   */\n  refresh?: boolean;\n  /** Receives one human-readable line per package decision. */\n  onProgress?: (message: string) => void;\n}\n\nexport interface LayerPackageInstallerDependencies {\n  packageManager?: LayerPackageManager;\n  resolvers?: ExtensionLayerResolvers;\n  /** Registry lookup seam; the default reads the newest version with Pi's npm client. */\n  publishedVersion?: (name: string) => Promise<string>;\n}\n\n/** One managed package moving from the installed version to the newest published one. */\nexport interface LayerPackageUpdate {\n  name: string;\n  from: string;\n  to: string;\n}\n\nexport interface LayerPackageResult {\n  /** Sources installed because a configured extension could not be resolved. */\n  installed: string[];\n  /** Packages this run moved to a newer published version. */\n  updated: LayerPackageUpdate[];\n  /** Packages left at the installed version because the registry could not be read. */\n  unchecked: string[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n  return isRecord(value) ? { ...value } : {};\n}\n\nfunction withoutConflictingTransitiveOverrides(value: unknown): Record<string, unknown> {\n  const overrides = recordValue(value);\n  for (const [selector, replacement] of Object.entries(overrides)) {\n    if (SAFE_TRANSITIVE_PACKAGE_NAMES.has(overridePackageName(selector))) {\n      delete overrides[selector];\n    } else if (isRecord(replacement)) {\n      overrides[selector] = withoutConflictingTransitiveOverrides(replacement);\n    }\n  }\n  return overrides;\n}\n\nfunction managedPackageManifestPath(repoRoot: string): string {\n  return path.join(repoRoot, PI_MANAGED_NPM_DIRECTORY, PACKAGE_MANIFEST);\n}\n\nfunction configuredPackageSpecifiers(config: MajorModesConfig, layers: readonly string[]): string[] {\n  const specifiers = new Set<string>();\n  const selectedDefinitions = [\n    ...(config.default ? [config.default] : []),\n    ...layers.map((layerName) => {\n      const layer = config.layers[layerName];\n      if (!layer) throw new Error(`Unknown layer: ${layerName}`);\n      return layer;\n    }),\n  ];\n  for (const layer of selectedDefinitions) {\n    for (const configured of layer.packages ?? []) {\n      const specifier = typeof configured === 'string' ? configured : configured.name;\n      const optional = typeof configured !== 'string' && configured.optional === true;\n      if (!optional && !isLocalPackageSpecifier(specifier)) specifiers.add(specifier);\n    }\n  }\n  return [...specifiers];\n}\n\nfunction resolvePackageEntries(resolvers: ExtensionLayerResolvers, specifier: string): string[] | undefined {\n  const entries = resolvers.optionalPackageEntries?.(specifier);\n  if (entries !== undefined) return entries;\n  const entry = resolvers.optionalPackageEntry(specifier);\n  return entry ? [entry] : undefined;\n}\n\n/** Adds the complete package set and patched transitive policy to Pi's managed install root. */\nexport function ensureManagedPackageManifest(\n  repoRoot: string,\n  sources: readonly string[],\n  targets: ReadonlyMap<string, string> = new Map(),\n): boolean {\n  const manifestPath = managedPackageManifestPath(repoRoot);\n  const current = fs.existsSync(manifestPath) ? fs.readFileSync(manifestPath, 'utf8') : undefined;\n  let manifest: Record<string, unknown>;\n  if (current === undefined) {\n    manifest = { name: PI_MANAGED_PACKAGE_NAME, private: true };\n  } else {\n    const parsed: unknown = JSON.parse(current);\n    if (!isRecord(parsed)) throw new Error(`Pi managed package manifest at ${manifestPath} must be a JSON object.`);\n    manifest = parsed;\n  }\n\n  const dependencies = recordValue(manifest.dependencies);\n  for (const source of sources) {\n    const name = packageName(source);\n    const target = targets.get(name);\n    // An exact target is what makes an update reach the store: npm keeps a\n    // locked version whenever the recorded range still admits it, and the range\n    // it writes back after an install always admits the version it just wrote.\n    if (target !== undefined) dependencies[name] = target;\n    else if (!Object.hasOwn(dependencies, name)) dependencies[name] = UNPINNED_PACKAGE_RANGE;\n  }\n  manifest.dependencies = dependencies;\n  // npm gives nested and overlapping consumer rules precedence in cases that can retain\n  // vulnerable versions, so DoomPi owns these package-specific selectors recursively.\n  manifest.overrides = {\n    ...withoutConflictingTransitiveOverrides(manifest.overrides),\n    ...SAFE_TRANSITIVE_OVERRIDES,\n  };\n  const pnpm = recordValue(manifest.pnpm);\n  pnpm.overrides = {\n    ...withoutConflictingTransitiveOverrides(pnpm.overrides),\n    ...SAFE_TRANSITIVE_OVERRIDES,\n  };\n  manifest.pnpm = pnpm;\n\n  const serialized = `${JSON.stringify(manifest, null, 2)}\\n`;\n  if (serialized === current) return false;\n  fs.mkdirSync(path.dirname(manifestPath), { recursive: true });\n  fs.writeFileSync(manifestPath, serialized, 'utf8');\n  return true;\n}\n\n/** Finds required npm packages selected by defaults and active layers that DoomPi cannot resolve. */\nexport function missingLayerPackageSpecifiers(\n  config: MajorModesConfig,\n  layers: readonly string[],\n  resolvers: ExtensionLayerResolvers,\n): string[] {\n  return configuredPackageSpecifiers(config, layers).filter(\n    (specifier) => resolvePackageEntries(resolvers, specifier) === undefined,\n  );\n}\n\nfunction packageName(source: string): string {\n  const specifier = source.startsWith(NPM_SOURCE_PREFIX) ? source.slice(NPM_SOURCE_PREFIX.length) : source;\n  if (specifier.startsWith('@')) {\n    const slash = specifier.indexOf('/');\n    const version = slash === -1 ? -1 : specifier.indexOf('@', slash);\n    return version === -1 ? specifier : specifier.slice(0, version);\n  }\n  const version = specifier.indexOf('@');\n  return version === -1 ? specifier : specifier.slice(0, version);\n}\n\ninterface PackageCatalogEntry {\n  target: string;\n  dependencies: readonly string[];\n}\n\ntype PackageCatalog = ReadonlyMap<string, PackageCatalogEntry>;\n\nfunction readPackageCatalog(environment: NodeJS.ProcessEnv): PackageCatalog {\n  const manifestPath = environment[PACKAGE_CATALOG_ENV]?.trim();\n  if (!manifestPath) return new Map();\n  const parsed: unknown = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n  if (!isRecord(parsed) || parsed.version !== 1 || !isRecord(parsed.packages)) {\n    throw new Error(`Unsupported DoomPi package catalog: ${manifestPath}`);\n  }\n  const catalog = new Map<string, PackageCatalogEntry>();\n  for (const [name, value] of Object.entries(parsed.packages)) {\n    if (!isRecord(value) || typeof value.archive !== 'string' || !Array.isArray(value.dependencies)) {\n      throw new Error(`Invalid package entry for ${name} in ${manifestPath}`);\n    }\n    const dependencies = value.dependencies.filter(\n      (dependency): dependency is string => typeof dependency === 'string',\n    );\n    if (dependencies.length !== value.dependencies.length)\n      throw new Error(`Invalid dependencies for ${name} in ${manifestPath}`);\n    const archive = path.resolve(path.dirname(manifestPath), value.archive);\n    if (!fs.existsSync(archive)) throw new Error(`DoomPi package catalog archive is missing: ${archive}`);\n    catalog.set(name, { target: `file:${archive}`, dependencies });\n  }\n  return catalog;\n}\n\nfunction npmSources(\n  specifiers: readonly string[],\n  catalog: PackageCatalog = new Map(),\n  includeCatalogDependencies = false,\n): string[] {\n  const names = [...new Set(specifiers.map((specifier) => splitPackageSpecifier(specifier).name))];\n  if (includeCatalogDependencies) {\n    for (let index = 0; index < names.length; index += 1) {\n      for (const dependency of catalog.get(names[index]!)?.dependencies ?? []) {\n        if (!names.includes(dependency)) names.push(dependency);\n      }\n    }\n  }\n  return names.map((name) => {\n    const target = catalog.get(name)?.target;\n    return `${NPM_SOURCE_PREFIX}${name}${target ? `@${target}` : ''}`;\n  });\n}\n\nfunction pluralize(count: number, noun: string): string {\n  return `${count} ${noun}${count === 1 ? '' : 's'}`;\n}\n\n/** Version of a package inside Pi's managed store, absent when sync does not own it. */\nfunction managedPackageVersion(repoRoot: string, name: string): string | undefined {\n  const manifestPath = path.join(repoRoot, PI_MANAGED_MODULES_DIRECTORY, name, PACKAGE_MANIFEST);\n  if (!fs.existsSync(manifestPath)) return undefined;\n  try {\n    const parsed: unknown = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n    return isRecord(parsed) && typeof parsed.version === 'string' ? parsed.version : undefined;\n  } catch {\n    // An unreadable manifest carries the same meaning as an absent one: nothing\n    // usable is installed, so the caller treats the package as uninstalled.\n    return undefined;\n  }\n}\n\nexport function packageManagerCommandWithStderr(configured: readonly string[] | undefined): string[] {\n  const command = configured?.length ? configured : [DEFAULT_NPM_COMMAND];\n  return [process.execPath, '--eval', PACKAGE_MANAGER_STDERR_SCRIPT, '--', ...command];\n}\n\nexport function effectivePackageManagerCommand(\n  configured: readonly string[] | undefined,\n  environment: NodeJS.ProcessEnv,\n): readonly string[] | undefined {\n  if (configured?.length) return configured;\n  const bundledCli = environment[NPM_CLI_ENV]?.trim();\n  return bundledCli ? [process.execPath, bundledCli] : undefined;\n}\n\nfunction configuredPackageManagerCommand(\n  settingsManager: Pick<SettingsManager, 'getNpmCommand'>,\n  environment: NodeJS.ProcessEnv,\n): readonly string[] | undefined {\n  return effectivePackageManagerCommand(settingsManager.getNpmCommand(), environment);\n}\n\nfunction createPackageManager(repoRoot: string, environment: NodeJS.ProcessEnv): LayerPackageManager {\n  const agentDirectory = piAgentDirectory(environment);\n  const settingsManager = SettingsManager.create(repoRoot, agentDirectory, { projectTrusted: true });\n  const redirectedSettingsManager = new Proxy(settingsManager, {\n    get(target, property, receiver) {\n      if (property === 'getNpmCommand') {\n        return () => packageManagerCommandWithStderr(configuredPackageManagerCommand(target, environment));\n      }\n      return Reflect.get(target, property, receiver) as unknown;\n    },\n  });\n  return new DefaultPackageManager({\n    cwd: repoRoot,\n    agentDir: agentDirectory,\n    settingsManager: redirectedSettingsManager,\n  });\n}\n\n/** Reads newest published versions with the same client Pi installs them with. */\nfunction createVersionReader(repoRoot: string, environment: NodeJS.ProcessEnv): (name: string) => Promise<string> {\n  const settingsManager = SettingsManager.create(repoRoot, piAgentDirectory(environment), { projectTrusted: true });\n  const [command, ...args] = configuredPackageManagerCommand(settingsManager, environment) ?? [];\n  const client = command ?? DEFAULT_NPM_COMMAND;\n  return async (name) => {\n    const { stdout } = await execFileAsync(client, [...args, 'view', name, 'version', '--json'], {\n      cwd: repoRoot,\n      timeout: REGISTRY_TIMEOUT_MS,\n      encoding: 'utf8',\n    });\n    const parsed: unknown = JSON.parse(stdout.trim() || 'null');\n    if (typeof parsed !== 'string') throw new Error(`${client} view reported no published version`);\n    return parsed;\n  };\n}\n\ninterface CheckedPackage {\n  name: string;\n  from: string;\n  to?: string;\n  failure?: string;\n}\n\n/**\n * Compares every package sync installed against the registry.\n *\n * Only the managed store is consulted: a package that resolves from the\n * repository's own modules is not sync's to move, and a package that is not\n * installed yet is already covered by the missing-package path.\n */\nasync function resolveUpdates(\n  repoRoot: string,\n  sources: readonly string[],\n  publishedVersion: (name: string) => Promise<string>,\n  onProgress: ((message: string) => void) | undefined,\n): Promise<Pick<LayerPackageResult, 'updated' | 'unchecked'>> {\n  const managed = sources\n    .map((source) => ({ name: packageName(source), from: managedPackageVersion(repoRoot, packageName(source)) }))\n    .filter((entry): entry is { name: string; from: string } => entry.from !== undefined);\n  const checked: CheckedPackage[] = await Promise.all(\n    managed.map(async (entry) => {\n      try {\n        return { ...entry, to: await publishedVersion(entry.name) };\n      } catch (error) {\n        return { ...entry, failure: (error instanceof Error ? error.message : String(error)).split('\\n')[0] };\n      }\n    }),\n  );\n\n  const updated: LayerPackageUpdate[] = [];\n  const unchecked: string[] = [];\n  for (const entry of checked) {\n    if (entry.to === undefined) {\n      unchecked.push(entry.name);\n      onProgress?.(`kept ${entry.name} ${entry.from}: ${entry.failure ?? 'no published version'}`);\n      continue;\n    }\n    if (entry.to === entry.from) continue;\n    updated.push({ name: entry.name, from: entry.from, to: entry.to });\n    onProgress?.(`${entry.name} ${entry.from} -> ${entry.to}`);\n  }\n  return { updated, unchecked };\n}\n\n/** Installs selected layer packages into Pi's project-local `.pi/npm` store and verifies the retry. */\nexport async function ensureLayerPackages(\n  options: EnsureLayerPackagesOptions,\n  dependencies: LayerPackageInstallerDependencies = {},\n): Promise<LayerPackageResult> {\n  const environment = options.environment ?? process.env;\n  const resolvers = dependencies.resolvers ?? createLayerResolvers(options.repoRoot);\n  const configured = configuredPackageSpecifiers(options.config, options.layers);\n  const missing = configured.filter((specifier) => resolvePackageEntries(resolvers, specifier) === undefined);\n  const catalog = readPackageCatalog(environment);\n  const missingSources = npmSources(missing, catalog);\n  const sources = npmSources(configured, catalog, true);\n  if (sources.length === 0) return { installed: [], updated: [], unchecked: [] };\n\n  const managedDirectory = path.dirname(managedPackageManifestPath(options.repoRoot));\n  if (missing.length === 0 && !fs.existsSync(managedDirectory)) return { installed: [], updated: [], unchecked: [] };\n\n  const registrySources = sources.filter((source) => !catalog.has(packageName(source)));\n  const { updated, unchecked } = options.refresh\n    ? await resolveUpdates(\n        options.repoRoot,\n        registrySources,\n        dependencies.publishedVersion ?? createVersionReader(options.repoRoot, environment),\n        options.onProgress,\n      )\n    : { updated: [], unchecked: [] };\n  const targets = new Map<string, string>();\n  for (const source of sources) {\n    const name = packageName(source);\n    const target = catalog.get(name)?.target;\n    if (target) targets.set(name, target);\n  }\n  for (const update of updated) targets.set(update.name, update.to);\n  const manifestChanged = ensureManagedPackageManifest(options.repoRoot, sources, targets);\n  if (missing.length === 0 && !manifestChanged) return { installed: [], updated: [], unchecked };\n\n  const packageManager = dependencies.packageManager ?? createPackageManager(options.repoRoot, environment);\n  options.onProgress?.(\n    `installing ${\n      updated.length > 0\n        ? pluralize(updated.length, 'update')\n        : missing.length > 0\n          ? pluralize(missing.length, 'missing package')\n          : 'the package manifest'\n    }`,\n  );\n  try {\n    if (manifestChanged) {\n      // Installing one source reconciles the complete dependency set already written\n      // to package.json, avoiding one npm install and audit report per DoomPi package.\n      await packageManager.install(sources[0]!, { local: true });\n    } else {\n      await packageManager.resolveExtensionSources(missingSources, { local: true });\n    }\n  } catch (error) {\n    const attempted = manifestChanged ? sources : missingSources;\n    throw new Error(`Failed to reconcile DoomPi layer package(s): ${attempted.join(', ')}`, { cause: error });\n  }\n\n  const unresolved = missing.filter((specifier) => !resolvePackageEntries(resolvers, specifier)?.length);\n  if (unresolved.length > 0) {\n    throw new Error(\n      `Installed DoomPi layer package(s) did not expose the configured Pi extension: ${unresolved.join(', ')}`,\n    );\n  }\n  return { installed: missingSources, updated, unchecked };\n}\n"],"mappings":"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"}