{"version":3,"file":"index.cjs","names":["extensionPackageName","resolvePackageEntry","resolveOptionalPackageEntry","resolvePackageEntries","resolveOptionalPackageEntries","resolveLocalPackageName","consumerPackageEntry","consumerPackageEntries","canonicalModulePath","isLocalPackageSpecifier","sha256"],"sources":["../../../../src/builders/cli/extensionAssembler/index.ts"],"sourcesContent":["import {\n  isLocalPackageSpecifier,\n  type LayerResolvers,\n  type MajorModesConfig,\n} from '@agimon-ai/doompi-config/majorModes';\nimport type { PackageAttribution } from '@agimon-ai/doompi-config/types';\nimport {\n  consumerPackageEntries,\n  consumerPackageEntry,\n  localEntries,\n  localEntry,\n  localPackageEntries,\n  localPackageName as resolveLocalPackageName,\n  optionalPackageEntries as resolveOptionalPackageEntries,\n  optionalPackageEntry as resolveOptionalPackageEntry,\n  packageEntries as resolvePackageEntries,\n  packageEntry as resolvePackageEntry,\n} from '@agimon-ai/doompi-core/module-resolution';\nimport { canonicalModulePath, sha256 } from '@agimon-ai/doompi-core/runtime-identity';\nimport { extensionPackageName } from '@agimon-ai/doompi-ui/extensionName';\n\nimport { ownEntry } from '../entryResolution';\n\nexport interface ExtensionLayerResolvers extends LayerResolvers {\n  /** Resolves a path authored under packages through its standard Pi manifest. */\n  localPackageEntries?: (specifier: string, baseDirectory: string) => string[] | undefined;\n  /** Canonical manifest name for a path that represents a package directory. */\n  localPackageName?: (specifier: string, baseDirectory: string) => string | undefined;\n}\n\nexport interface ExtensionContext {\n  agents: boolean;\n  autoStop: boolean;\n  mute?: boolean;\n  preset?: string;\n  personaEntry?: string;\n  /** Named mode whose occurrence is part of composition identity. */\n  majorMode?: string;\n  /** Ordered layer occurrences selected by the active major mode. */\n  layers: string[];\n  majorModesConfig: MajorModesConfig;\n  /** Resolver override used by synchronized replay. */\n  resolvers?: ExtensionLayerResolvers;\n}\n\nexport type SelectedEntryKind = 'extension' | 'package';\ntype ExtensionResolutionOutcome = 'resolved' | 'missing-optional';\n\n/**\n * One resolver-derived extension occurrence.\n *\n * This remains private to DoomPi composition. It is not package metadata and\n * deliberately retains authored duplicates even though activation paths are\n * deduplicated later.\n */\ninterface ResolvedExtensionSelection {\n  readonly layer: string;\n  readonly layerIndex: number;\n  readonly entryKind: SelectedEntryKind;\n  readonly entryIndex: number;\n  readonly manifestIndex: number;\n  readonly selector: string;\n  readonly sourceFile?: string;\n  readonly baseDirectory: string;\n  readonly optional: boolean;\n  readonly outcome: ExtensionResolutionOutcome;\n  readonly path?: string;\n  readonly canonicalPath?: string;\n  readonly diagnostic?: string;\n  readonly config?: Record<string, unknown>;\n}\n\nexport interface CompositionLayerOccurrence {\n  readonly name: string;\n  readonly index: number;\n  readonly sourceFile?: string;\n  readonly baseDirectory: string;\n}\n\n/** Internal normalized composition shared by launch, sync, bundles, and replay. */\nexport interface ExtensionComposition {\n  readonly version: number;\n  readonly majorMode?: {\n    readonly name: string;\n    readonly sourceFile?: string;\n    readonly baseDirectory?: string;\n  };\n  readonly layers: readonly CompositionLayerOccurrence[];\n  readonly selections: readonly ResolvedExtensionSelection[];\n  /** Actual Pi factory activation order, not CLI argument construction order. */\n  readonly parentActivation: readonly string[];\n  /** Actual Pi factory activation order inherited by detached children. */\n  readonly childActivation: readonly string[];\n  readonly fingerprint: string;\n}\n\n/**\n * Which layer of which major mode admitted each package.\n *\n * The composition already holds this join while it resolves package names to\n * entry paths, then drops it, so a session cannot afterwards say why a tool is\n * present. Reducing it here keeps the selection type private and costs one pass\n * over an array the caller already has.\n *\n * Only `package` entries appear. A bare `extension` selector is a path rather\n * than a package name, so it has nothing a registered tool could be joined on.\n *\n * Keyed by manifest name first, because that is what a registered tool resolves\n * to. The selector is kept as an alias: a layer may name a package as\n * `@agimon-ai/doompi-team` when published or `./layers/team/doompi-team` in a\n * checkout, and both have to find the same layer.\n */\nexport function packageAttribution(composition: ExtensionComposition): Record<string, PackageAttribution> {\n  const attribution: Record<string, PackageAttribution> = {};\n  const mode = composition.majorMode?.name;\n  if (mode === undefined) return attribution;\n  for (const selection of composition.selections) {\n    if (selection.entryKind !== 'package') continue;\n    if (selection.outcome !== 'resolved') continue;\n    // First layer wins, matching activation order: the earlier layer is the one\n    // whose copy of a duplicated package actually loaded.\n    const value: PackageAttribution = { kind: 'major', mode, layer: selection.layer };\n    const manifest = selection.path === undefined ? undefined : extensionPackageName(selection.path);\n    if (manifest !== undefined && attribution[manifest] === undefined) attribution[manifest] = value;\n    if (attribution[selection.selector] === undefined) attribution[selection.selector] = value;\n  }\n  return attribution;\n}\nexport const COMPOSITION_FINGERPRINT_VERSION = 4;\nexport const STANDARD_PI_EXTENSION_CONTRACT_VERSION = 2;\n\nconst DEFAULT_SELECTION_LAYER = 'default';\nconst DEFAULT_SELECTION_LAYER_INDEX = -1;\n\nconst FIXED_CORE_PACKAGES = new Set([\n  '@agimon-ai/doompi',\n  '@agimon-ai/doompi-autostop',\n  '@agimon-ai/doompi-cache',\n  '@agimon-ai/doompi-config',\n  '@agimon-ai/doompi-domain',\n  '@agimon-ai/doompi-major-mode',\n  '@agimon-ai/doompi-minor-mode',\n  '@agimon-ai/doompi-notification',\n  '@agimon-ai/doompi-profile',\n  '@agimon-ai/doompi-session',\n  '@agimon-ai/doompi-skill',\n  '@agimon-ai/doompi-ui',\n]);\n\nconst OWN_ENTRIES = {\n  agentModel: 'agentModel',\n  cordisFinalizer: 'cordisFinalizer',\n  cordisHost: 'cordisHost',\n  terminalChildSession: 'terminalChildSession',\n  effort: 'effort',\n  contextCatalog: 'contextCatalog',\n  ollamaProvider: 'ollamaProvider',\n  transitionCoordinator: 'transitionCoordinator',\n} as const;\n\nconst CORE_PACKAGE_ENTRIES = {\n  autostop: '@agimon-ai/doompi-autostop/extensions/pi',\n  cache: '@agimon-ai/doompi-cache/extensions/pi',\n  config: '@agimon-ai/doompi-config/extensions/pi',\n  domain: '@agimon-ai/doompi-domain/extensions/pi',\n  majorMode: '@agimon-ai/doompi-major-mode/extensions/pi',\n  minorMode: '@agimon-ai/doompi-minor-mode/extensions/pi',\n  notification: '@agimon-ai/doompi-notification/extensions/pi',\n  profile: '@agimon-ai/doompi-profile/extensions/pi',\n  session: '@agimon-ai/doompi-session/extensions/pi',\n  skill: '@agimon-ai/doompi-skill/extensions/pi',\n  ui: '@agimon-ai/doompi-ui/extensions/pi',\n} as const;\n\nexport const OLLAMA_PRESET = 'ollama';\n\n/**\n * Always available so /profile can pick a persona later, and the one entry a\n * detached child shares with its parent: children get the persona without the\n * command, because they have no transition coordinator to run a switch through.\n *\n * An explicit subpath rather than the bare package name, so it resolves to\n * exactly this file rather than to whatever pi.extensions lists.\n */\nexport const PERSONA_ENTRY = '@agimon-ai/doompi-profile/extensions/persona';\n\nexport const LAYER_RESOLVERS: ExtensionLayerResolvers = {\n  ownEntry,\n  packageEntry: (specifier) => resolvePackageEntry(specifier, import.meta.url),\n  optionalPackageEntry: (specifier) => resolveOptionalPackageEntry(specifier, import.meta.url),\n  packageEntries: (specifier) => resolvePackageEntries(specifier, import.meta.url),\n  optionalPackageEntries: (specifier) => resolveOptionalPackageEntries(specifier, import.meta.url),\n  localEntry,\n  localEntries,\n  localPackageEntries,\n  localPackageName: resolveLocalPackageName,\n};\n\nfunction missingConsumerPackage(name: string, consumerRoot: string): Error {\n  return new Error(`Cannot resolve configured package \"${name}\" from ${consumerRoot}.`);\n}\n\n/**\n * Resolves configured packages only from the consumer, while fixed core entries\n * may fall back to the host package's private dependency closure.\n */\nexport function createLayerResolvers(consumerRoot?: string): ExtensionLayerResolvers {\n  if (!consumerRoot) return LAYER_RESOLVERS;\n  // Fixed host packages must match the executable, even when home contains an older installation.\n  const fallbackEntry = (name: string): string | undefined =>\n    FIXED_CORE_PACKAGES.has(packageName(name)) ? resolveOptionalPackageEntry(name, import.meta.url) : undefined;\n  const fallbackEntries = (name: string): string[] | undefined =>\n    FIXED_CORE_PACKAGES.has(packageName(name)) ? resolveOptionalPackageEntries(name, import.meta.url) : undefined;\n  const requiredEntry = (name: string): string => {\n    const entry = fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot);\n    if (!entry) throw missingConsumerPackage(name, consumerRoot);\n    return entry;\n  };\n  const requiredEntries = (name: string): string[] => {\n    const entries = fallbackEntries(name) ?? consumerPackageEntries(name, consumerRoot);\n    if (!entries) throw missingConsumerPackage(name, consumerRoot);\n    return entries;\n  };\n  return {\n    ownEntry,\n    packageEntry: requiredEntry,\n    optionalPackageEntry: (name) => fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot),\n    packageEntries: requiredEntries,\n    optionalPackageEntries: (name) => fallbackEntries(name) ?? consumerPackageEntries(name, consumerRoot),\n    localEntry,\n    localEntries,\n    localPackageEntries,\n    localPackageName: resolveLocalPackageName,\n  };\n}\n\nfunction packageName(specifier: string): string {\n  const segments = specifier.split('/');\n  return specifier.startsWith('@') ? segments.slice(0, 2).join('/') : (segments[0] ?? specifier);\n}\n\nfunction assertFeaturePackage(specifier: string, layer: string): void {\n  const selectedPackage = packageName(specifier);\n  if (FIXED_CORE_PACKAGES.has(selectedPackage)) {\n    throw new Error(\n      `Layer \"${layer}\" cannot select fixed DoomPi host package \"${selectedPackage}\" as a feature extension.`,\n    );\n  }\n}\n\nfunction resolveLocalExtensionEntries(\n  resolvers: ExtensionLayerResolvers,\n  specifier: string,\n  baseDirectory: string,\n): string[] | undefined {\n  const resolved = resolvers.localEntries?.(specifier, baseDirectory);\n  if (resolved !== undefined) return resolved;\n  const single = resolvers.localEntry(specifier, baseDirectory);\n  return single ? [single] : undefined;\n}\n\nfunction resolveLocalPackageSelections(\n  resolvers: ExtensionLayerResolvers,\n  specifier: string,\n  baseDirectory: string,\n): string[] | undefined {\n  const resolved = resolvers.localPackageEntries?.(specifier, baseDirectory);\n  if (resolved !== undefined) return resolved;\n  return resolveLocalExtensionEntries(resolvers, specifier, baseDirectory);\n}\n\ninterface SelectionIdentity {\n  layer: string;\n  layerIndex: number;\n  entryKind: SelectedEntryKind;\n  entryIndex: number;\n  selector: string;\n  sourceFile?: string;\n  baseDirectory: string;\n  optional: boolean;\n  config?: Record<string, unknown>;\n}\n\nfunction resolvedSelection(\n  identity: SelectionIdentity,\n  manifestIndex: number,\n  resolvedPath: string,\n): ResolvedExtensionSelection {\n  return {\n    ...identity,\n    manifestIndex,\n    outcome: 'resolved',\n    path: resolvedPath,\n    canonicalPath: canonicalModulePath(resolvedPath),\n  };\n}\n\nfunction missingOptionalSelection(identity: SelectionIdentity, diagnostic: string): ResolvedExtensionSelection {\n  return {\n    ...identity,\n    manifestIndex: 0,\n    outcome: 'missing-optional',\n    diagnostic,\n  };\n}\n\nfunction errorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction resolveDefinitionSelections(\n  definition: MajorModesConfig['layers'][string],\n  layer: string,\n  layerIndex: number,\n  resolvers: ExtensionLayerResolvers,\n): ResolvedExtensionSelection[] {\n  const resolvedSelections: ResolvedExtensionSelection[] = [];\n  const extensionEntries = definition.extensions ?? [];\n  for (const [entryIndex, selector] of extensionEntries.entries()) {\n    const identity: SelectionIdentity = {\n      layer,\n      layerIndex,\n      entryKind: 'extension',\n      entryIndex,\n      selector,\n      ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n      baseDirectory: definition.baseDirectory,\n      optional: false,\n    };\n    if (!isLocalPackageSpecifier(selector)) {\n      resolvedSelections.push(resolvedSelection(identity, 0, resolvers.ownEntry(selector)));\n      continue;\n    }\n    const resolved = resolveLocalExtensionEntries(resolvers, selector, definition.baseDirectory);\n    if (!resolved?.length) {\n      throw new Error(\n        `Layer \"${layer}\" extension \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n          'Point it at a Pi extension file or directory.',\n      );\n    }\n    resolved.forEach((resolvedPath, manifestIndex) => {\n      resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n    });\n  }\n\n  const packageOffset = extensionEntries.length;\n  for (const [packageIndex, configured] of (definition.packages ?? []).entries()) {\n    const selector = typeof configured === 'string' ? configured : configured.name;\n    const optional = typeof configured === 'string' ? false : configured.optional === true;\n    const configValue = typeof configured === 'string' ? undefined : configured.config;\n    const identity: SelectionIdentity = {\n      layer,\n      layerIndex,\n      entryKind: 'package',\n      entryIndex: packageOffset + packageIndex,\n      selector,\n      ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n      baseDirectory: definition.baseDirectory,\n      optional,\n      ...(configValue === undefined ? {} : { config: configValue }),\n    };\n\n    let resolved: string[] | undefined;\n    try {\n      if (isLocalPackageSpecifier(selector)) {\n        const manifestName = resolvers.localPackageName?.(selector, definition.baseDirectory);\n        if (manifestName) assertFeaturePackage(manifestName, layer);\n        resolved = resolveLocalPackageSelections(resolvers, selector, definition.baseDirectory);\n      } else {\n        assertFeaturePackage(selector, layer);\n        if (optional) {\n          resolved = resolvers.optionalPackageEntries?.(selector);\n          if (resolved === undefined && !resolvers.optionalPackageEntries) {\n            const single = resolvers.optionalPackageEntry(selector);\n            resolved = single ? [single] : undefined;\n          }\n        } else {\n          resolved = resolvers.packageEntries?.(selector) ?? [resolvers.packageEntry(selector)];\n        }\n      }\n    } catch (error) {\n      if (optional) {\n        resolvedSelections.push(missingOptionalSelection(identity, errorMessage(error)));\n        continue;\n      }\n      throw error;\n    }\n\n    if (!resolved?.length) {\n      if (optional) {\n        resolvedSelections.push(\n          missingOptionalSelection(\n            identity,\n            `Optional package \"${selector}\" is unavailable or declares no Pi extensions.`,\n          ),\n        );\n        continue;\n      }\n      if (isLocalPackageSpecifier(selector)) {\n        throw new Error(\n          `Layer \"${layer}\" package \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n            'Point it at an extension file, or a directory whose package.json declares pi.extensions.',\n        );\n      }\n      throw new Error(`Layer \"${layer}\" package \"${selector}\" declares no Pi extensions.`);\n    }\n\n    resolved.forEach((resolvedPath, manifestIndex) => {\n      resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n    });\n  }\n\n  return resolvedSelections;\n}\n\nfunction resolveLayerSelections(\n  config: MajorModesConfig,\n  layer: string,\n  layerIndex: number,\n  resolvers: ExtensionLayerResolvers,\n): ResolvedExtensionSelection[] {\n  const definition = config.layers[layer];\n  if (!definition) throw new Error(`Unknown layer: ${layer}`);\n  return resolveDefinitionSelections(definition, layer, layerIndex, resolvers);\n}\n\nfunction resolveDefaultSelections(\n  config: MajorModesConfig,\n  resolvers: ExtensionLayerResolvers,\n): ResolvedExtensionSelection[] {\n  if (!config.default) return [];\n  return resolveDefinitionSelections(config.default, DEFAULT_SELECTION_LAYER, DEFAULT_SELECTION_LAYER_INDEX, resolvers);\n}\n\nfunction resolveSelectedExtensions(context: ExtensionContext): ResolvedExtensionSelection[] {\n  const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n  return context.layers.flatMap((layer, layerIndex) =>\n    resolveLayerSelections(context.majorModesConfig, layer, layerIndex, resolvers),\n  );\n}\n\nfunction deduplicatePaths(paths: readonly string[]): string[] {\n  const seen = new Set<string>();\n  const selected: string[] = [];\n  for (const entry of paths) {\n    const identity = canonicalModulePath(entry);\n    if (seen.has(identity)) continue;\n    seen.add(identity);\n    selected.push(entry);\n  }\n  return selected;\n}\n\nfunction selectedFeaturePaths(selections: readonly ResolvedExtensionSelection[]): string[] {\n  return deduplicatePaths(\n    selections.flatMap((entry) => (entry.outcome === 'resolved' && entry.path ? [entry.path] : [])),\n  );\n}\n\nfunction parentActivation(\n  context: ExtensionContext,\n  distributionPaths: readonly string[],\n  featurePaths: readonly string[],\n): string[] {\n  const resolve = context.resolvers ?? LAYER_RESOLVERS;\n  const activation = [\n    resolve.ownEntry(OWN_ENTRIES.cordisHost),\n    resolve.ownEntry(OWN_ENTRIES.terminalChildSession),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.minorMode),\n    resolve.ownEntry(OWN_ENTRIES.contextCatalog),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.config),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.session),\n    resolve.ownEntry(OWN_ENTRIES.transitionCoordinator),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.ui),\n  ];\n  if (!context.mute) activation.push(resolve.packageEntry(CORE_PACKAGE_ENTRIES.notification));\n  activation.push(\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.profile),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.majorMode),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.skill),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.domain),\n    resolve.ownEntry(OWN_ENTRIES.effort),\n    // Child sessions are deliberately left out: a subagent thread has no model\n    // chip to keep current, so journaling its switches would cost entries no\n    // surface reads.\n    resolve.ownEntry(OWN_ENTRIES.agentModel),\n  );\n  if (context.preset === OLLAMA_PRESET) activation.push(resolve.ownEntry(OWN_ENTRIES.ollamaProvider));\n  activation.push(...distributionPaths, ...featurePaths);\n  if (context.personaEntry) activation.push(context.personaEntry);\n  if (context.autoStop) activation.push(resolve.packageEntry(CORE_PACKAGE_ENTRIES.autostop));\n  activation.push(resolve.packageEntry(CORE_PACKAGE_ENTRIES.cache));\n  activation.push(resolve.ownEntry(OWN_ENTRIES.cordisFinalizer));\n  return deduplicatePaths(activation);\n}\n\nfunction childActivation(\n  context: ExtensionContext,\n  distributionPaths: readonly string[],\n  featurePaths: readonly string[],\n): string[] {\n  const resolve = context.resolvers ?? LAYER_RESOLVERS;\n  const activation = [\n    resolve.ownEntry(OWN_ENTRIES.cordisHost),\n    resolve.ownEntry(OWN_ENTRIES.terminalChildSession),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.config),\n    resolve.packageEntry(CORE_PACKAGE_ENTRIES.session),\n    ...distributionPaths,\n    ...featurePaths,\n  ];\n  if (context.preset === OLLAMA_PRESET) activation.push(resolve.ownEntry(OWN_ENTRIES.ollamaProvider));\n  if (context.personaEntry) activation.push(context.personaEntry);\n  activation.push(resolve.ownEntry(OWN_ENTRIES.cordisFinalizer));\n  return deduplicatePaths(activation);\n}\n\nfunction canonicalValue(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(canonicalValue);\n  if (value === null || typeof value !== 'object') return value;\n  return Object.fromEntries(\n    Object.entries(value as Record<string, unknown>)\n      .filter(([, entry]) => entry !== undefined)\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([key, entry]) => [key, canonicalValue(entry)]),\n  );\n}\n\nfunction compositionFingerprint(composition: Omit<ExtensionComposition, 'fingerprint'>): string {\n  return sha256(\n    JSON.stringify(\n      canonicalValue({\n        ...composition,\n        contract: {\n          composition: COMPOSITION_FINGERPRINT_VERSION,\n          standardPiExtension: STANDARD_PI_EXTENSION_CONTRACT_VERSION,\n          fixedCorePackages: [...FIXED_CORE_PACKAGES],\n        },\n        parentCanonicalActivation: composition.parentActivation.map(canonicalModulePath),\n        childCanonicalActivation: composition.childActivation.map(canonicalModulePath),\n      }),\n    ),\n  );\n}\n\n/** Resolve one deterministic parent/child composition from authored layer occurrences. */\nexport function resolveExtensionComposition(context: ExtensionContext): ExtensionComposition {\n  const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n  const defaultSelections = resolveDefaultSelections(context.majorModesConfig, resolvers);\n  const layerSelections = resolveSelectedExtensions(context);\n  const selections = [...defaultSelections, ...layerSelections];\n  const distributionPaths = selectedFeaturePaths(defaultSelections);\n  const featurePaths = selectedFeaturePaths(layerSelections);\n  const layers = context.layers.map((name, index): CompositionLayerOccurrence => {\n    const definition = context.majorModesConfig.layers[name];\n    if (!definition) throw new Error(`Unknown layer: ${name}`);\n    return {\n      name,\n      index,\n      ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n      baseDirectory: definition.baseDirectory,\n    };\n  });\n  const modeSource = context.majorMode ? context.majorModesConfig.majorModeSources?.[context.majorMode] : undefined;\n  const withoutFingerprint: Omit<ExtensionComposition, 'fingerprint'> = {\n    version: COMPOSITION_FINGERPRINT_VERSION,\n    ...(context.majorMode\n      ? {\n          majorMode: {\n            name: context.majorMode,\n            ...(modeSource?.filePath ? { sourceFile: modeSource.filePath } : {}),\n            ...(modeSource?.baseDirectory ? { baseDirectory: modeSource.baseDirectory } : {}),\n          },\n        }\n      : {}),\n    layers,\n    selections,\n    parentActivation: parentActivation(context, distributionPaths, featurePaths),\n    childActivation: childActivation(context, distributionPaths, featurePaths),\n  };\n  return { ...withoutFingerprint, fingerprint: compositionFingerprint(withoutFingerprint) };\n}\n\n/** Assemble parent entries in actual Pi factory activation order. */\nexport function assembleExtensions(context: ExtensionContext): string[] {\n  return [...resolveExtensionComposition(context).parentActivation];\n}\n\n/** Assemble detached-child entries in actual Pi factory activation order. */\nexport function assembleChildExtensions(context: ExtensionContext): string[] {\n  return [...resolveExtensionComposition(context).childActivation];\n}\n"],"mappings":"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"}