@tiangong-lca/cli 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/lib/env.ts"],"names":[],"mappings":"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","sourcesContent":["export type EnvSpec = {\n key: string;\n required: boolean;\n description: string;\n defaultValue?: string;\n};\n\nexport type ResolvedEnv = {\n key: string;\n source: 'env' | 'default' | 'missing';\n value: string | null;\n present: boolean;\n};\n\nexport const ENV_KEYS = {\n apiBaseUrl: 'TIANGONG_LCA_API_BASE_URL',\n authMode: 'TIANGONG_LCA_AUTH_MODE',\n oauthClientId: 'TIANGONG_LCA_OAUTH_CLIENT_ID',\n oauthRedirectUri: 'TIANGONG_LCA_OAUTH_REDIRECT_URI',\n accessToken: 'TIANGONG_LCA_ACCESS_TOKEN',\n region: 'TIANGONG_LCA_REGION',\n supabasePublishableKey: 'TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY',\n sessionFile: 'TIANGONG_LCA_SESSION_FILE',\n disableSessionCache: 'TIANGONG_LCA_DISABLE_SESSION_CACHE',\n forceReauth: 'TIANGONG_LCA_FORCE_REAUTH',\n} as const;\n\nexport const ENV_SPECS: EnvSpec[] = [\n {\n key: ENV_KEYS.apiBaseUrl,\n required: true,\n description: 'Main TianGong LCA API / Edge Functions base URL',\n },\n {\n key: ENV_KEYS.region,\n required: false,\n description: 'Target TianGong LCA API region',\n defaultValue: 'us-east-1',\n },\n {\n key: ENV_KEYS.supabasePublishableKey,\n required: true,\n description: 'Supabase publishable key used to bootstrap and refresh user sessions',\n },\n {\n key: ENV_KEYS.sessionFile,\n required: false,\n description: 'Optional local path for the CLI session cache file',\n },\n {\n key: ENV_KEYS.disableSessionCache,\n required: false,\n description: 'Disable the persistent CLI session cache when set to true',\n defaultValue: 'false',\n },\n {\n key: ENV_KEYS.forceReauth,\n required: false,\n description: 'Ignore cached sessions and force a fresh login when set to true',\n defaultValue: 'false',\n },\n {\n key: ENV_KEYS.authMode,\n required: false,\n description: 'Optional explicit auth mode: oauth or access-token',\n },\n {\n key: ENV_KEYS.oauthClientId,\n required: false,\n description: 'Registered public Supabase OAuth client ID',\n },\n {\n key: ENV_KEYS.oauthRedirectUri,\n required: false,\n description: 'Exact registered CLI loopback OAuth redirect URI',\n },\n {\n key: ENV_KEYS.accessToken,\n required: false,\n description: 'Explicit short-lived actor access token for headless execution',\n },\n];\n\nexport type DoctorCheck = {\n key: string;\n description: string;\n required: boolean;\n source: ResolvedEnv['source'];\n present: boolean;\n valuePreview: string | null;\n};\n\nexport type DoctorReport = {\n ok: boolean;\n loadedDotEnv: boolean;\n dotEnvPath: string;\n dotEnvKeysLoaded: number;\n checks: DoctorCheck[];\n};\n\nexport type RuntimeEnv = {\n apiBaseUrl: string | null;\n authMode: string | null;\n oauthClientId: string | null;\n oauthRedirectUri: string | null;\n accessToken: string | null;\n region: string;\n supabasePublishableKey: string | null;\n sessionFile: string | null;\n disableSessionCache: boolean;\n forceReauth: boolean;\n};\n\nfunction parseBooleanEnv(value: string | null): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n switch (value.trim().toLowerCase()) {\n case '1':\n case 'true':\n case 'yes':\n case 'on':\n return true;\n default:\n return false;\n }\n}\n\nexport function resolveEnv(spec: EnvSpec, env: NodeJS.ProcessEnv): ResolvedEnv {\n const envValue = env[spec.key];\n if (envValue) {\n return {\n key: spec.key,\n source: 'env',\n value: envValue,\n present: true,\n };\n }\n\n if (spec.defaultValue !== undefined) {\n return {\n key: spec.key,\n source: 'default',\n value: spec.defaultValue,\n present: true,\n };\n }\n\n return {\n key: spec.key,\n source: 'missing',\n value: null,\n present: false,\n };\n}\n\nexport function readRuntimeEnv(env: NodeJS.ProcessEnv): RuntimeEnv {\n const apiBaseUrl = resolveEnv(ENV_SPECS[0], env).value;\n const region = resolveEnv(ENV_SPECS[1], env).value as string;\n const supabasePublishableKey = resolveEnv(ENV_SPECS[2], env).value;\n const sessionFile = resolveEnv(ENV_SPECS[3], env).value;\n const disableSessionCache = parseBooleanEnv(resolveEnv(ENV_SPECS[4], env).value);\n const forceReauth = parseBooleanEnv(resolveEnv(ENV_SPECS[5], env).value);\n const authMode = resolveEnv(ENV_SPECS[6], env).value;\n const oauthClientId = resolveEnv(ENV_SPECS[7], env).value;\n const oauthRedirectUri = resolveEnv(ENV_SPECS[8], env).value;\n const accessToken = resolveEnv(ENV_SPECS[9], env).value;\n\n return {\n apiBaseUrl,\n authMode,\n oauthClientId,\n oauthRedirectUri,\n accessToken,\n region,\n supabasePublishableKey,\n sessionFile,\n disableSessionCache,\n forceReauth,\n };\n}\n\nexport function maskSecret(value: string | null): string | null {\n if (!value) {\n return value;\n }\n if (value.length <= 8) {\n return value;\n }\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n\nexport function buildDoctorReport(\n env: NodeJS.ProcessEnv,\n dotEnvStatus: { loaded: boolean; path: string; count: number },\n): DoctorReport {\n const checks = ENV_SPECS.map((spec) => {\n const resolved = resolveEnv(spec, env);\n return {\n key: spec.key,\n description: spec.description,\n required: spec.required,\n source: resolved.source,\n present: resolved.present,\n valuePreview: maskSecret(resolved.value),\n };\n });\n\n return {\n ok:\n checks.every((check) => !check.required || check.present) &&\n [ENV_KEYS.oauthClientId, ENV_KEYS.accessToken].some(\n (key) => checks.find((check) => check.key === key)?.present,\n ),\n loadedDotEnv: dotEnvStatus.loaded,\n dotEnvPath: dotEnvStatus.path,\n dotEnvKeysLoaded: dotEnvStatus.count,\n checks,\n };\n}\n\nexport const __testInternals = {\n parseBooleanEnv,\n};\n"]}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/lib/env.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_OAUTH_REDIRECT_URI } from './oauth-loopback.js';\n\nexport type EnvSpec = {\n key: string;\n required: boolean;\n description: string;\n defaultValue?: string;\n};\n\nexport type ResolvedEnv = {\n key: string;\n source: 'env' | 'default' | 'missing';\n value: string | null;\n present: boolean;\n};\n\nexport const ENV_KEYS = {\n apiBaseUrl: 'TIANGONG_LCA_API_BASE_URL',\n authMode: 'TIANGONG_LCA_AUTH_MODE',\n oauthClientId: 'TIANGONG_LCA_OAUTH_CLIENT_ID',\n oauthRedirectUri: 'TIANGONG_LCA_OAUTH_REDIRECT_URI',\n accessToken: 'TIANGONG_LCA_ACCESS_TOKEN',\n region: 'TIANGONG_LCA_REGION',\n supabasePublishableKey: 'TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY',\n sessionFile: 'TIANGONG_LCA_SESSION_FILE',\n disableSessionCache: 'TIANGONG_LCA_DISABLE_SESSION_CACHE',\n forceReauth: 'TIANGONG_LCA_FORCE_REAUTH',\n} as const;\n\nconst PRODUCTION_PROJECT_URL = 'https://qgzvkongdjqiiamzbbts.supabase.co';\n\n// Public application configuration, not user credentials. Keep this as the one\n// source used by auth, remote adapters, and doctor; Skills must not copy it.\nexport const OFFICIAL_PRODUCTION_PROFILE = Object.freeze({\n apiBaseUrl: `${PRODUCTION_PROJECT_URL}/functions/v1`,\n supabasePublishableKey: 'sb_publishable_EFWH4E61tpAtf82WQ37xTA_Fxa5OPyg',\n oauthClientId: '1837c6d3-3c9d-48e0-bbf7-b532b78f9f76',\n oauthRedirectUri: DEFAULT_OAUTH_REDIRECT_URI,\n region: 'us-east-1',\n});\n\nconst PRODUCTION_ENV_DEFAULTS: Readonly<Record<string, string>> = Object.freeze({\n [ENV_KEYS.apiBaseUrl]: OFFICIAL_PRODUCTION_PROFILE.apiBaseUrl,\n [ENV_KEYS.supabasePublishableKey]: OFFICIAL_PRODUCTION_PROFILE.supabasePublishableKey,\n [ENV_KEYS.oauthClientId]: OFFICIAL_PRODUCTION_PROFILE.oauthClientId,\n [ENV_KEYS.oauthRedirectUri]: OFFICIAL_PRODUCTION_PROFILE.oauthRedirectUri,\n});\n\nfunction runtimeToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction isProductionBase(value: string): boolean {\n return [\n PRODUCTION_PROJECT_URL,\n `${PRODUCTION_PROJECT_URL}/functions/v1`,\n `${PRODUCTION_PROJECT_URL}/rest/v1`,\n ].includes(value.replace(/\\/+$/u, ''));\n}\n\nexport function hasProductionProfileMismatch(env: NodeJS.ProcessEnv): boolean {\n const base = runtimeToken(env[ENV_KEYS.apiBaseUrl]);\n return Boolean(\n base &&\n !isProductionBase(base) &&\n (runtimeToken(env[ENV_KEYS.oauthClientId]).toLowerCase() ===\n OFFICIAL_PRODUCTION_PROFILE.oauthClientId ||\n runtimeToken(env[ENV_KEYS.supabasePublishableKey]) ===\n OFFICIAL_PRODUCTION_PROFILE.supabasePublishableKey),\n );\n}\n\nfunction productionDefaults(env: NodeJS.ProcessEnv): Readonly<Record<string, string>> {\n const mode = runtimeToken(env[ENV_KEYS.authMode]).toLowerCase();\n // A caller-supplied bearer must always have an explicit destination and key.\n if ((mode && mode !== 'oauth') || runtimeToken(env[ENV_KEYS.accessToken])) return {};\n\n const base = runtimeToken(env[ENV_KEYS.apiBaseUrl]);\n if (base && !isProductionBase(base)) return {};\n\n for (const key of [\n ENV_KEYS.supabasePublishableKey,\n ENV_KEYS.oauthClientId,\n ENV_KEYS.oauthRedirectUri,\n ]) {\n const configured = runtimeToken(env[key]);\n const value = key === ENV_KEYS.oauthClientId ? configured.toLowerCase() : configured;\n if (value && value !== PRODUCTION_ENV_DEFAULTS[key]) return {};\n }\n return PRODUCTION_ENV_DEFAULTS;\n}\n\nexport function resolveProductionRuntimeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const resolved = { ...env };\n for (const [key, value] of Object.entries(productionDefaults(env))) {\n if (!runtimeToken(env[key])) resolved[key] = value;\n }\n return resolved;\n}\n\nexport const ENV_SPECS: EnvSpec[] = [\n {\n key: ENV_KEYS.apiBaseUrl,\n required: true,\n description: 'Main TianGong LCA API / Edge Functions base URL',\n },\n {\n key: ENV_KEYS.region,\n required: false,\n description: 'Target TianGong LCA API region',\n defaultValue: OFFICIAL_PRODUCTION_PROFILE.region,\n },\n {\n key: ENV_KEYS.supabasePublishableKey,\n required: true,\n description: 'Supabase publishable key used to bootstrap and refresh user sessions',\n },\n {\n key: ENV_KEYS.sessionFile,\n required: false,\n description: 'Optional local path for the CLI session cache file',\n },\n {\n key: ENV_KEYS.disableSessionCache,\n required: false,\n description: 'Disable the persistent CLI session cache when set to true',\n defaultValue: 'false',\n },\n {\n key: ENV_KEYS.forceReauth,\n required: false,\n description: 'Ignore cached sessions and force a fresh login when set to true',\n defaultValue: 'false',\n },\n {\n key: ENV_KEYS.authMode,\n required: false,\n description: 'Optional explicit auth mode: oauth or access-token',\n },\n {\n key: ENV_KEYS.oauthClientId,\n required: false,\n description: 'Registered public Supabase OAuth client ID',\n },\n {\n key: ENV_KEYS.oauthRedirectUri,\n required: false,\n description: 'Exact registered CLI loopback OAuth redirect URI',\n },\n {\n key: ENV_KEYS.accessToken,\n required: false,\n description: 'Explicit short-lived actor access token for headless execution',\n },\n];\n\nexport type DoctorCheck = {\n key: string;\n description: string;\n required: boolean;\n source: ResolvedEnv['source'];\n present: boolean;\n valuePreview: string | null;\n};\n\nexport type DoctorReport = {\n ok: boolean;\n loadedDotEnv: boolean;\n dotEnvPath: string;\n dotEnvKeysLoaded: number;\n checks: DoctorCheck[];\n};\n\nexport type RuntimeEnv = {\n apiBaseUrl: string | null;\n authMode: string | null;\n oauthClientId: string | null;\n oauthRedirectUri: string | null;\n accessToken: string | null;\n region: string;\n supabasePublishableKey: string | null;\n sessionFile: string | null;\n disableSessionCache: boolean;\n forceReauth: boolean;\n};\n\nfunction parseBooleanEnv(value: string | null): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n switch (value.trim().toLowerCase()) {\n case '1':\n case 'true':\n case 'yes':\n case 'on':\n return true;\n default:\n return false;\n }\n}\n\nexport function resolveEnv(spec: EnvSpec, env: NodeJS.ProcessEnv): ResolvedEnv {\n const envValue = env[spec.key];\n if (envValue && (!Object.hasOwn(PRODUCTION_ENV_DEFAULTS, spec.key) || runtimeToken(envValue))) {\n return {\n key: spec.key,\n source: 'env',\n value: envValue as string,\n present: true,\n };\n }\n\n const defaults = productionDefaults(env);\n const defaultValue =\n spec.defaultValue ?? (Object.hasOwn(defaults, spec.key) ? defaults[spec.key] : undefined);\n if (defaultValue !== undefined) {\n return {\n key: spec.key,\n source: 'default',\n value: defaultValue,\n present: true,\n };\n }\n\n return {\n key: spec.key,\n source: 'missing',\n value: null,\n present: false,\n };\n}\n\nexport function readRuntimeEnv(env: NodeJS.ProcessEnv): RuntimeEnv {\n const apiBaseUrl = resolveEnv(ENV_SPECS[0], env).value;\n const region = resolveEnv(ENV_SPECS[1], env).value as string;\n const supabasePublishableKey = resolveEnv(ENV_SPECS[2], env).value;\n const sessionFile = resolveEnv(ENV_SPECS[3], env).value;\n const disableSessionCache = parseBooleanEnv(resolveEnv(ENV_SPECS[4], env).value);\n const forceReauth = parseBooleanEnv(resolveEnv(ENV_SPECS[5], env).value);\n const authMode = resolveEnv(ENV_SPECS[6], env).value;\n const oauthClientId = resolveEnv(ENV_SPECS[7], env).value;\n const oauthRedirectUri = resolveEnv(ENV_SPECS[8], env).value;\n const accessToken = resolveEnv(ENV_SPECS[9], env).value;\n\n return {\n apiBaseUrl,\n authMode,\n oauthClientId,\n oauthRedirectUri,\n accessToken,\n region,\n supabasePublishableKey,\n sessionFile,\n disableSessionCache,\n forceReauth,\n };\n}\n\nexport function maskSecret(value: string | null): string | null {\n if (!value) {\n return value;\n }\n if (value.length <= 8) {\n return value;\n }\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n\nexport function buildDoctorReport(\n env: NodeJS.ProcessEnv,\n dotEnvStatus: { loaded: boolean; path: string; count: number },\n): DoctorReport {\n const checks = ENV_SPECS.map((spec) => {\n const resolved = resolveEnv(spec, env);\n return {\n key: spec.key,\n description: spec.description,\n required: spec.required,\n source: resolved.source,\n present: resolved.present,\n valuePreview: maskSecret(resolved.value),\n };\n });\n\n return {\n ok:\n !hasProductionProfileMismatch(env) &&\n checks.every((check) => !check.required || check.present) &&\n [ENV_KEYS.oauthClientId, ENV_KEYS.accessToken].some(\n (key) => checks.find((check) => check.key === key)?.present,\n ),\n loadedDotEnv: dotEnvStatus.loaded,\n dotEnvPath: dotEnvStatus.path,\n dotEnvKeysLoaded: dotEnvStatus.count,\n checks,\n };\n}\n\nexport const __testInternals = {\n parseBooleanEnv,\n};\n"]}
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { writeJsonArtifact } from './artifacts.js';
6
6
  import { CliError } from './errors.js';
7
+ import { resolveProductionRuntimeEnv } from './env.js';
7
8
  import { readJsonInput } from './io.js';
8
9
  import { buildRunId, resolveRunLayout } from './run.js';
9
10
  import { fetchExactOrLatestProcessRow, normalizeSupabaseProcessPayload, requireSupabaseRestRuntime, } from './supabase-rest.js';
@@ -52,7 +53,8 @@ function sha256Text(text) {
52
53
  function nowIso(now = new Date()) {
53
54
  return now.toISOString();
54
55
  }
55
- function requireRemoteProcessLookupRuntime(env) {
56
+ function requireRemoteProcessLookupRuntime(configuredEnv) {
57
+ const env = resolveProductionRuntimeEnv(configuredEnv);
56
58
  const missing = [];
57
59
  if (typeof env.TIANGONG_LCA_API_BASE_URL !== 'string' || !env.TIANGONG_LCA_API_BASE_URL.trim()) {
58
60
  missing.push('TIANGONG_LCA_API_BASE_URL');
@@ -1 +1 @@
1
- {"version":3,"file":"lifecyclemodel-resulting-process.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-resulting-process.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport {\n fetchExactOrLatestProcessRow,\n normalizeSupabaseProcessPayload,\n requireSupabaseRestRuntime,\n} from './supabase-rest.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_DATASET_VERSION = '00.00.001';\nconst EPSILON = 1e-10;\nconst REMOTE_PROCESS_LOOKUP_TIMEOUT_MS = 10_000;\n\nexport type ProjectionMode = 'primary-only' | 'all-subproducts';\nexport type PublishIntent = 'dry_run' | 'prepare_only' | 'publish';\n\nexport type LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: string | null;\n version: string | null;\n name: string | null;\n json_ordered_path: string | null;\n json_ordered: JsonObject | null;\n };\n projection: {\n mode: ProjectionMode;\n process_id: string | null;\n process_version: string | null;\n metadata_overrides: JsonObject;\n attach_graph_snapshot: boolean;\n attach_graph_snapshot_uri: string | null;\n };\n process_sources: {\n process_catalog_path: string | null;\n run_dirs: string[];\n process_json_dirs: string[];\n process_json_files: string[];\n allow_remote_lookup: boolean;\n };\n publish: {\n intent: PublishIntent;\n prepare_process_payloads: boolean;\n prepare_relation_payloads: boolean;\n };\n};\n\nexport type LifecyclemodelResultingProcessReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n status: string;\n projected_process_count: number;\n relation_count: number;\n source_model: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n };\n files: {\n normalized_request: string;\n source_model_normalized: string;\n source_model_summary: string;\n projection_report: string;\n process_projection_bundle: string;\n };\n};\n\nexport type RunLifecyclemodelResultingProcessOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n};\n\ntype RemoteProcessLookupContext = {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonObject;\n sourceLabel: string;\n sourcePath: string | null;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: string;\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n};\n\ntype ProcessInstance = {\n instance_id: string;\n process_id: string;\n process_version: string;\n label: string;\n multiplication_factor: number;\n reference_to_process: JsonObject;\n raw: JsonObject;\n};\n\ntype Edge = {\n edge_id: string;\n from: string;\n to: string;\n exchange_id: string | null;\n flow_uuid: string | null;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensureList<T = unknown>(value: unknown): T[] {\n if (value === undefined || value === null) {\n return [];\n }\n\n return Array.isArray(value) ? (value as T[]) : ([value] as T[]);\n}\n\nfunction copyJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction uniqueStrings(values: Array<string | null | undefined>): string[] {\n const unique: string[] = [];\n const seen = new Set<string>();\n\n values.forEach((value) => {\n if (!value) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n unique.push(value);\n });\n\n return unique;\n}\n\nfunction sha256Text(text: string): string {\n return createHash('sha256').update(text).digest('hex');\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction requireRemoteProcessLookupRuntime(env: NodeJS.ProcessEnv) {\n const missing: string[] = [];\n if (typeof env.TIANGONG_LCA_API_BASE_URL !== 'string' || !env.TIANGONG_LCA_API_BASE_URL.trim()) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (\n ![env.TIANGONG_LCA_OAUTH_CLIENT_ID, env.TIANGONG_LCA_ACCESS_TOKEN].some(\n (value) => typeof value === 'string' && value.trim(),\n )\n ) {\n missing.push('TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN');\n }\n\n if (\n typeof env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY !== 'string' ||\n !env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.trim()\n ) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(\n `Remote process lookup requires ${missing.join(', ')} when process_sources.allow_remote_lookup=true.`,\n {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n },\n );\n }\n\n return requireSupabaseRestRuntime(env);\n}\n\nasync function fetchRemoteProcessRecord(options: {\n processId: string;\n requestedVersion: string;\n runtime: ReturnType<typeof createSupabaseDataRuntime>;\n fetchImpl: FetchLike;\n}): Promise<{\n record: ProcessRecord;\n resolution: 'remote_supabase_exact' | 'remote_supabase_latest_fallback';\n sourcePath: string;\n resolvedVersion: string;\n}> {\n const lookupKey = `${options.processId}@${options.requestedVersion}`;\n try {\n const lookup = await fetchExactOrLatestProcessRow({\n runtime: options.runtime,\n id: options.processId,\n version: options.requestedVersion,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n fetchImpl: options.fetchImpl,\n fallbackToLatest: true,\n });\n\n if (!lookup) {\n throw new CliError(`Could not resolve remote process dataset for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_PROCESS_NOT_FOUND',\n exitCode: 2,\n details: { process_id: options.processId, version: options.requestedVersion },\n });\n }\n\n const record = parseProcessRecord(normalizeSupabaseProcessPayload(lookup.row.json, lookupKey), {\n sourceLabel: 'remote:supabase',\n sourcePath: lookup.sourceUrl,\n });\n\n return {\n record,\n resolution:\n lookup.resolution === 'remote_supabase_latest_fallback'\n ? 'remote_supabase_latest_fallback'\n : 'remote_supabase_exact',\n sourcePath: lookup.sourceUrl,\n resolvedVersion: lookup.row.version || record.version,\n };\n } catch (error) {\n if (error instanceof CliError && error.code === 'SUPABASE_REST_RESPONSE_INVALID') {\n throw new CliError(`Remote process lookup returned an invalid response for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_RESPONSE_INVALID',\n exitCode: 1,\n details: error.details,\n });\n }\n\n throw error;\n }\n}\n\nfunction resolveInputPath(baseDir: string, value: string): string;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null {\n if (typeof value !== 'string' || !value.trim()) {\n return null;\n }\n\n const trimmed = value.trim();\n if (trimmed.startsWith('file:')) {\n return trimmed;\n }\n\n if (trimmed.includes('://')) {\n return trimmed;\n }\n\n return path.resolve(baseDir, trimmed);\n}\n\nfunction resolveLocalPath(value: string, fieldName: string): string {\n if (value.startsWith('file:')) {\n return fileURLToPath(value);\n }\n\n if (value.includes('://')) {\n throw new CliError(`${fieldName} must resolve to a local filesystem path.`, {\n code: 'LIFECYCLEMODEL_LOCAL_PATH_REQUIRED',\n exitCode: 2,\n details: value,\n });\n }\n\n return path.resolve(value);\n}\n\nfunction readJsonObject(filePath: string, code: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected a JSON object file: ${filePath}`, {\n code,\n exitCode: 2,\n });\n }\n\n return value;\n}\n\nfunction toFiniteNumber(value: unknown, fieldName: string): number {\n if (value === undefined || value === null || value === '') {\n return 0;\n }\n\n const parsed = typeof value === 'number' ? value : Number(String(value));\n if (!Number.isFinite(parsed)) {\n throw new CliError(`Expected a numeric value for ${fieldName}.`, {\n code: 'LIFECYCLEMODEL_INVALID_NUMBER',\n exitCode: 2,\n details: { fieldName, value },\n });\n }\n\n return parsed;\n}\n\nfunction normalizeNumericOutput(value: number): number {\n const rounded = Math.abs(value) < EPSILON ? 0 : Number.parseFloat(value.toFixed(12));\n return rounded === 0 ? 0 : rounded;\n}\n\nfunction toBoolean(value: unknown, defaultValue: boolean): boolean {\n if (value === undefined) {\n return defaultValue;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n\n return Boolean(value);\n}\n\nfunction normalizeStringArray(value: unknown, fieldName: string): string[] {\n const items = ensureList(value);\n\n return items.map((item, index) => {\n if (typeof item !== 'string' || !item.trim()) {\n throw new CliError(`Expected ${fieldName}[${index}] to be a non-empty string.`, {\n code: 'LIFECYCLEMODEL_INVALID_STRING_ARRAY',\n exitCode: 2,\n details: { fieldName, value: item },\n });\n }\n\n return item.trim();\n });\n}\n\nfunction normalizeProjectionMode(value: unknown): ProjectionMode {\n const mode = firstNonEmpty(value) ?? 'primary-only';\n if (mode === 'primary-only' || mode === 'all-subproducts') {\n return mode;\n }\n\n throw new CliError('projection.mode must be primary-only or all-subproducts.', {\n code: 'LIFECYCLEMODEL_INVALID_PROJECTION_MODE',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizePublishIntent(value: unknown): PublishIntent {\n const intent = firstNonEmpty(value) ?? 'dry_run';\n if (intent === 'dry_run' || intent === 'prepare_only' || intent === 'publish') {\n return intent;\n }\n\n throw new CliError('publish.intent must be dry_run, prepare_only, or publish.', {\n code: 'LIFECYCLEMODEL_INVALID_PUBLISH_INTENT',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizeMetadataOverrides(value: unknown): JsonObject {\n if (value === undefined) {\n return {};\n }\n\n if (!isRecord(value)) {\n throw new CliError('projection.metadata_overrides must be a JSON object when provided.', {\n code: 'LIFECYCLEMODEL_INVALID_METADATA_OVERRIDES',\n exitCode: 2,\n });\n }\n\n return copyJson(value);\n}\n\nexport function normalizeLifecyclemodelResultingProcessRequest(\n input: unknown,\n options: {\n requestPath: string;\n },\n): LifecyclemodelResultingProcessRequest {\n if (!isRecord(input)) {\n throw new CliError('Lifecyclemodel resulting-process request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const baseDir = path.dirname(path.resolve(options.requestPath));\n const sourceModelRaw = isRecord(input.source_model) ? input.source_model : {};\n const projectionRaw = isRecord(input.projection) ? input.projection : {};\n const processSourcesRaw = isRecord(input.process_sources) ? input.process_sources : {};\n const publishRaw = isRecord(input.publish) ? input.publish : {};\n\n const normalized: LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: firstNonEmpty(sourceModelRaw.id),\n version: firstNonEmpty(sourceModelRaw.version),\n name: firstNonEmpty(sourceModelRaw.name),\n json_ordered_path: resolveInputPath(baseDir, sourceModelRaw.json_ordered_path),\n json_ordered: isRecord(sourceModelRaw.json_ordered)\n ? copyJson(sourceModelRaw.json_ordered)\n : null,\n },\n projection: {\n mode: normalizeProjectionMode(projectionRaw.mode),\n process_id: firstNonEmpty(projectionRaw.process_id),\n process_version: firstNonEmpty(projectionRaw.process_version),\n metadata_overrides: normalizeMetadataOverrides(projectionRaw.metadata_overrides),\n attach_graph_snapshot: toBoolean(projectionRaw.attach_graph_snapshot, false),\n attach_graph_snapshot_uri: resolveInputPath(baseDir, projectionRaw.attach_graph_snapshot_uri),\n },\n process_sources: {\n process_catalog_path: (() => {\n const resolved = resolveInputPath(baseDir, processSourcesRaw.process_catalog_path);\n return resolved ? resolveLocalPath(resolved, 'process_sources.process_catalog_path') : null;\n })(),\n run_dirs: normalizeStringArray(processSourcesRaw.run_dirs, 'process_sources.run_dirs').map(\n (item) => resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.run_dirs'),\n ),\n process_json_dirs: normalizeStringArray(\n processSourcesRaw.process_json_dirs,\n 'process_sources.process_json_dirs',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_dirs'),\n ),\n process_json_files: normalizeStringArray(\n processSourcesRaw.process_json_files,\n 'process_sources.process_json_files',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_files'),\n ),\n allow_remote_lookup: toBoolean(\n processSourcesRaw.allow_remote_lookup ?? processSourcesRaw.allow_mcp_lookup,\n false,\n ),\n },\n publish: {\n intent: normalizePublishIntent(publishRaw.intent),\n prepare_process_payloads: toBoolean(publishRaw.prepare_process_payloads, true),\n prepare_relation_payloads: toBoolean(publishRaw.prepare_relation_payloads, true),\n },\n };\n\n if (\n !normalized.source_model.id &&\n !normalized.source_model.json_ordered &&\n !normalized.source_model.json_ordered_path\n ) {\n throw new CliError(\n 'source_model must include at least one of id, json_ordered, or json_ordered_path.',\n {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n if (!normalized.process_sources.process_catalog_path) {\n normalized.process_sources.process_catalog_path = autoDetectProcessCatalogPath(\n normalized.source_model.json_ordered_path,\n );\n }\n\n if (normalized.process_sources.process_json_dirs.length === 0) {\n normalized.process_sources.process_json_dirs = autoDetectProcessJsonDirs(\n normalized.source_model.json_ordered_path,\n );\n }\n\n return normalized;\n}\n\nfunction lifecyclemodelRoot(model: JsonObject): JsonObject {\n return isRecord(model.lifeCycleModelDataSet)\n ? (model.lifeCycleModelDataSet as JsonObject)\n : model;\n}\n\nfunction processDatasetRoot(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n\n for (const key of ['json_ordered', 'json'] as const) {\n const nested = payload[key];\n if (isRecord(nested) && isRecord(nested.processDataSet)) {\n return nested.processDataSet;\n }\n }\n\n throw new CliError('Process payload does not contain processDataSet.', {\n code: 'LIFECYCLEMODEL_PROCESS_DATASET_REQUIRED',\n exitCode: 2,\n });\n}\n\nfunction resolveNameField(namePayload: unknown): string | null {\n if (typeof namePayload === 'string') {\n return namePayload.trim() || null;\n }\n\n if (Array.isArray(namePayload)) {\n for (const item of namePayload) {\n const resolved = resolveNameField(item);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n }\n\n if (!isRecord(namePayload)) {\n return null;\n }\n\n const direct = firstNonEmpty(namePayload['@index'], namePayload['#text'], namePayload.text);\n if (direct) {\n return direct;\n }\n\n for (const key of ['baseName', 'shortName', 'name'] as const) {\n const nested = namePayload[key];\n if (isRecord(nested)) {\n const nestedText = firstNonEmpty(nested['@index'], nested['#text'], nested.text);\n if (nestedText) {\n return nestedText;\n }\n }\n\n const resolved = firstNonEmpty(nested);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n}\n\nfunction normalizedNameInfo(namePayload: unknown, fallbackText: string): JsonObject {\n if (isRecord(namePayload) && Object.keys(namePayload).length > 0) {\n return copyJson(namePayload);\n }\n\n return {\n baseName: [\n {\n '@xml:lang': 'en',\n '#text': resolveNameField(namePayload) ?? fallbackText,\n },\n ],\n };\n}\n\nfunction multilangFromText(enText: string, zhText: string): JsonObject[] {\n return [\n {\n '@xml:lang': 'en',\n '#text': enText,\n },\n {\n '@xml:lang': 'zh',\n '#text': zhText,\n },\n ];\n}\n\nfunction modelDatasetVersion(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const administrative = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : isRecord(administrative['common:publicationAndOwnership'])\n ? (administrative['common:publicationAndOwnership'] as JsonObject)\n : {};\n\n return firstNonEmpty(publication['common:dataSetVersion']);\n}\n\nfunction modelIdentifier(\n model: JsonObject,\n sourceModel: LifecyclemodelResultingProcessRequest['source_model'],\n): {\n id: string;\n version: string;\n name: string;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const modelId =\n firstNonEmpty(\n sourceModel.id,\n dataInfo['common:UUID'],\n root['@id'],\n root.id,\n dataInfo.identifierOfSubDataSet,\n ) ?? `lm-${sha256Text(JSON.stringify(model)).slice(0, 12)}`;\n const version =\n firstNonEmpty(\n sourceModel.version,\n modelDatasetVersion(model),\n root['@version'],\n root.version,\n dataInfo['@version'],\n ) ?? DEFAULT_DATASET_VERSION;\n const name =\n firstNonEmpty(sourceModel.name, resolveNameField(dataInfo.name), root.name) ?? modelId;\n\n return {\n id: modelId,\n version,\n name,\n };\n}\n\nfunction extractProcessInstances(model: JsonObject): ProcessInstance[] {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const technology = isRecord(info.technology)\n ? info.technology\n : isRecord(root.technology)\n ? root.technology\n : {};\n const processes = isRecord(technology.processes) ? technology.processes : {};\n const instances = ensureList<JsonObject>(processes.processInstance);\n\n return instances.filter(isRecord).map((item, index) => {\n const ref = isRecord(item.referenceToProcess) ? item.referenceToProcess : {};\n return {\n instance_id:\n firstNonEmpty(item['@dataSetInternalID'], item['@id'], item.id) ?? `pi-${index + 1}`,\n process_id: firstNonEmpty(ref['@refObjectId'], ref.id, ref.processId) ?? `proc-${index + 1}`,\n process_version: firstNonEmpty(ref['@version'], ref.version) ?? DEFAULT_DATASET_VERSION,\n label:\n firstNonEmpty(\n resolveNameField(ref['common:shortDescription']),\n resolveNameField(ref.shortDescription),\n resolveNameField(ref.name),\n ref['@refObjectId'],\n ) ?? `process-${index + 1}`,\n multiplication_factor: normalizeNumericOutput(\n toFiniteNumber(item['@multiplicationFactor'], 'processInstance.@multiplicationFactor'),\n ),\n reference_to_process: copyJson(ref),\n raw: copyJson(item),\n };\n });\n}\n\nfunction extractEdges(model: JsonObject): Edge[] {\n const edges: Edge[] = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const connections = isRecord(instance.raw.connections) ? instance.raw.connections : {};\n const outputs = ensureList<JsonObject>(connections.outputExchange);\n\n outputs.filter(isRecord).forEach((exchange, edgeIndex) => {\n const downstreamItems = ensureList<JsonObject>(exchange.downstreamProcess).filter(isRecord);\n downstreamItems.forEach((downstream, downstreamIndex) => {\n const downstreamId = firstNonEmpty(\n downstream['@refObjectId'],\n downstream['@id'],\n downstream.id,\n exchange.downstreamProcessId,\n );\n if (!downstreamId) {\n return;\n }\n\n edges.push({\n edge_id:\n firstNonEmpty(exchange['@id'], exchange.id) ??\n `${instance.instance_id}-edge-${edgeIndex + 1}-${downstreamIndex + 1}`,\n from: instance.instance_id,\n to: downstreamId,\n exchange_id: firstNonEmpty(exchange['@id'], exchange.id),\n flow_uuid: firstNonEmpty(\n exchange['@flowUUID'],\n downstream['@flowUUID'],\n exchange.flowUUID,\n ),\n });\n });\n });\n });\n\n return edges;\n}\n\nfunction processReferencePairs(model: JsonObject): Array<{ process_id: string; version: string }> {\n const seen = new Set<string>();\n const pairs: Array<{ process_id: string; version: string }> = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const key = `${instance.process_id}@${instance.process_version}`;\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n pairs.push({\n process_id: instance.process_id,\n version: instance.process_version,\n });\n });\n\n return pairs;\n}\n\nfunction parseProcessRecord(\n payload: JsonObject,\n options: {\n sourceLabel: string;\n sourcePath: string | null;\n },\n): ProcessRecord {\n const dataset = processDatasetRoot(payload);\n const info = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const administrative = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : {};\n const processUuid = firstNonEmpty(dataInfo['common:UUID']);\n if (!processUuid) {\n throw new CliError(`processDataSet missing common:UUID from ${options.sourceLabel}`, {\n code: 'LIFECYCLEMODEL_PROCESS_UUID_REQUIRED',\n exitCode: 2,\n });\n }\n\n const version = firstNonEmpty(publication['common:dataSetVersion']) ?? DEFAULT_DATASET_VERSION;\n const quantitativeReference = isRecord(info.quantitativeReference)\n ? info.quantitativeReference\n : {};\n const referenceInternalId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n const exchangesWrapper = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => String(item['@dataSetInternalID'] ?? '') === String(referenceInternalId ?? ''),\n );\n\n if (!referenceExchange) {\n throw new CliError(\n `reference exchange ${referenceInternalId ?? '(missing)'} not found for process ${processUuid}`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_EXCHANGE_NOT_FOUND',\n exitCode: 2,\n },\n );\n }\n\n const inputAmounts: Record<string, number> = {};\n const outputAmounts: Record<string, number> = {};\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection) ?? '';\n if (!flowUuid) {\n return;\n }\n\n const amount = normalizeNumericOutput(\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount'),\n );\n\n if (direction === 'Input') {\n inputAmounts[flowUuid] = normalizeNumericOutput((inputAmounts[flowUuid] ?? 0) + amount);\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = normalizeNumericOutput((outputAmounts[flowUuid] ?? 0) + amount);\n }\n });\n\n const referenceFlow = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n\n return {\n processUuid,\n version,\n raw: {\n processDataSet: dataset,\n },\n sourceLabel: options.sourceLabel,\n sourcePath: options.sourcePath,\n referenceExchangeInternalId: String(referenceInternalId ?? ''),\n referenceFlowUuid: firstNonEmpty(referenceFlow['@refObjectId']) ?? '',\n referenceDirection: firstNonEmpty(referenceExchange.exchangeDirection) ?? '',\n referenceAmount: normalizeNumericOutput(\n toFiniteNumber(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n 'reference amount',\n ),\n ),\n inputAmounts,\n outputAmounts,\n };\n}\n\nfunction autoDetectProcessCatalogPath(modelPath: string | null): string | null {\n if (!modelPath) {\n return null;\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return null;\n }\n\n if (path.basename(path.dirname(resolved)) !== 'lifecyclemodels') {\n return null;\n }\n\n const tidasBundleDir = path.dirname(path.dirname(resolved));\n if (path.basename(tidasBundleDir) !== 'tidas_bundle') {\n return null;\n }\n\n const candidate = path.join(path.dirname(tidasBundleDir), 'process-catalog.json');\n return existsSync(candidate) ? candidate : null;\n}\n\nfunction autoDetectProcessJsonDirs(modelPath: string | null): string[] {\n if (!modelPath) {\n return [];\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return [];\n }\n\n const candidates = [path.join(path.dirname(resolved), 'processes')];\n\n if (path.basename(path.dirname(resolved)) === 'lifecyclemodels') {\n candidates.push(path.join(path.dirname(path.dirname(resolved)), 'processes'));\n }\n\n const stem = path.basename(resolved, path.extname(resolved));\n if (stem.endsWith('-model')) {\n const prefix = stem.slice(0, -'-model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}-processes`));\n }\n }\n if (stem.endsWith('_model')) {\n const prefix = stem.slice(0, -'_model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}_processes`));\n }\n }\n\n return uniqueStrings(candidates.filter((candidate) => existsSync(candidate)));\n}\n\nconst PathSafe = {\n resolve(value: string): string | null {\n try {\n return resolveLocalPath(value, 'path');\n } catch {\n return null;\n }\n },\n};\n\nfunction processSourceDirs(request: LifecyclemodelResultingProcessRequest): string[] {\n const dirs = [...request.process_sources.process_json_dirs];\n\n request.process_sources.run_dirs.forEach((runDir) => {\n const candidate = path.join(runDir, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n\n if (request.process_sources.process_catalog_path) {\n try {\n const payload = JSON.parse(\n readFileSync(request.process_sources.process_catalog_path, 'utf8'),\n ) as unknown;\n ensureList<JsonObject>(payload)\n .filter(isRecord)\n .forEach((item) => {\n const sourceLabel = firstNonEmpty(item.source_label);\n if (!sourceLabel) {\n return;\n }\n const candidate = path.join(sourceLabel, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n } catch {\n // Keep local process resolution best-effort for catalog expansion.\n }\n }\n\n return uniqueStrings(dirs);\n}\n\nfunction locateLocalProcessFile(\n processId: string,\n version: string,\n options: {\n processDirs: string[];\n processFiles: string[];\n },\n): string | null {\n const targetFileName = `${processId}_${version}.json`;\n\n for (const directory of options.processDirs) {\n const candidate = path.join(directory, targetFileName);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n for (const filePath of options.processFiles) {\n if (existsSync(filePath) && path.basename(filePath) === targetFileName) {\n return filePath;\n }\n }\n\n return null;\n}\n\nasync function resolveProcessRecords(\n request: LifecyclemodelResultingProcessRequest,\n options: {\n sourceModelJson: JsonObject;\n remoteLookup?: RemoteProcessLookupContext;\n },\n): Promise<{\n records: Record<string, ProcessRecord>;\n resolutionSummary: JsonObject;\n}> {\n const requiredPairs = processReferencePairs(options.sourceModelJson);\n const processFiles = request.process_sources.process_json_files;\n const processDirs = processSourceDirs(request);\n const records: Record<string, ProcessRecord> = {};\n const resolutionItems: JsonObject[] = [];\n const unresolved: Array<{ process_id: string; version: string }> = [];\n\n requiredPairs.forEach(({ process_id, version }) => {\n const localPath = locateLocalProcessFile(process_id, version, {\n processDirs,\n processFiles,\n });\n\n if (localPath) {\n const record = parseProcessRecord(\n readJsonObject(localPath, 'LIFECYCLEMODEL_PROCESS_FILE_NOT_OBJECT'),\n {\n sourceLabel: path.dirname(localPath),\n sourcePath: localPath,\n },\n );\n records[`${process_id}@${version}`] = record;\n resolutionItems.push({\n process_id,\n version,\n resolution: 'local_file',\n source_path: localPath,\n });\n return;\n }\n\n unresolved.push({ process_id, version });\n });\n\n if (unresolved.length > 0 && request.process_sources.allow_remote_lookup) {\n const env = options.remoteLookup?.env ?? process.env;\n const fetchImpl = options.remoteLookup?.fetchImpl ?? (fetch as FetchLike);\n const runtime = createSupabaseDataRuntime({\n runtime: requireRemoteProcessLookupRuntime(env),\n fetchImpl,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n });\n\n for (const item of unresolved) {\n const remoteRecord = await fetchRemoteProcessRecord({\n processId: item.process_id,\n requestedVersion: item.version,\n runtime,\n fetchImpl,\n });\n records[`${item.process_id}@${item.version}`] = remoteRecord.record;\n resolutionItems.push({\n process_id: item.process_id,\n requested_version: item.version,\n resolved_version: remoteRecord.resolvedVersion,\n resolution: remoteRecord.resolution,\n source_path: remoteRecord.sourcePath,\n });\n }\n }\n\n const remainingUnresolved = requiredPairs.filter(\n ({ process_id, version }) => !records[`${process_id}@${version}`],\n );\n\n if (remainingUnresolved.length > 0) {\n const missing = remainingUnresolved\n .map((item) => `${item.process_id}@${item.version}`)\n .join(', ');\n throw new CliError(\n `Could not resolve referenced process datasets for lifecycle model: ${missing}.`,\n {\n code: 'LIFECYCLEMODEL_PROCESS_RESOLUTION_FAILED',\n exitCode: 2,\n },\n );\n }\n\n return {\n records,\n resolutionSummary: {\n required_process_count: requiredPairs.length,\n resolved_process_count: Object.keys(records).length,\n local_process_dir_count: processDirs.length,\n explicit_process_file_count: processFiles.length,\n remote_resolution_count: resolutionItems.filter((item) =>\n String(item.resolution).startsWith('remote_'),\n ).length,\n items: resolutionItems,\n },\n };\n}\n\nfunction loadSourceModel(request: LifecyclemodelResultingProcessRequest): {\n sourceModelJson: JsonObject;\n modelPath: string | null;\n} {\n if (request.source_model.json_ordered) {\n return {\n sourceModelJson: copyJson(request.source_model.json_ordered),\n modelPath: null,\n };\n }\n\n if (!request.source_model.json_ordered_path) {\n throw new CliError('source_model must include json_ordered or json_ordered_path.', {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_PATH_REQUIRED',\n exitCode: 2,\n });\n }\n\n const localPath = resolveLocalPath(\n request.source_model.json_ordered_path,\n 'source_model.json_ordered_path',\n );\n\n return {\n sourceModelJson: readJsonObject(localPath, 'LIFECYCLEMODEL_SOURCE_MODEL_NOT_OBJECT'),\n modelPath: localPath,\n };\n}\n\nfunction referenceToResultingProcess(model: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const ref = isRecord(dataInfo.referenceToResultingProcess)\n ? dataInfo.referenceToResultingProcess\n : {};\n\n return {\n id: firstNonEmpty(ref['@refObjectId'], ref.id),\n version: firstNonEmpty(ref['@version'], ref.version),\n };\n}\n\nfunction referenceProcessInstanceId(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const quantitative = isRecord(info.quantitativeReference) ? info.quantitativeReference : {};\n const ref = quantitative.referenceToReferenceProcess;\n return isRecord(ref) ? firstNonEmpty(ref['@refObjectId'], ref.id) : firstNonEmpty(ref);\n}\n\nfunction chooseReferenceInstance(\n processInstances: ProcessInstance[],\n requestedInstanceId: string | null,\n): ProcessInstance {\n const directMatch = requestedInstanceId\n ? processInstances.find((item) => item.instance_id === requestedInstanceId)\n : null;\n if (directMatch) {\n return directMatch;\n }\n\n const scaled = processInstances.find((item) => item.multiplication_factor > 0);\n if (scaled) {\n return scaled;\n }\n\n const fallback = processInstances[0];\n if (!fallback) {\n throw new CliError('Lifecycle model does not contain any process instances.', {\n code: 'LIFECYCLEMODEL_PROCESS_INSTANCES_REQUIRED',\n exitCode: 2,\n });\n }\n\n return fallback;\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonObject,\n amount: number,\n internalId: string,\n options: {\n quantitativeReference: boolean;\n },\n): JsonObject {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const normalizedAmount = normalizeNumericOutput(amount);\n cloned.meanAmount = normalizedAmount;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = normalizedAmount;\n }\n cloned.quantitativeReference = options.quantitativeReference;\n return cloned;\n}\n\nfunction buildResultingProcessPayload(options: {\n sourceModelId: string;\n sourceModelVersion: string;\n sourceModelName: string;\n sourceModelNameInfo: JsonObject;\n processId: string;\n processVersion: string;\n role: 'primary';\n projectionSignature: string;\n processInstances: ProcessInstance[];\n edges: Edge[];\n processRecords: Record<string, ProcessRecord>;\n referenceProcessInstanceId: string | null;\n metadataOverrides: JsonObject;\n attachGraphSnapshotUri: string | null;\n}): JsonObject {\n const chosenInstance = chooseReferenceInstance(\n options.processInstances,\n options.referenceProcessInstanceId,\n );\n const chosenKey = `${chosenInstance.process_id}@${chosenInstance.process_version}`;\n const finalRecord = options.processRecords[chosenKey];\n const finalProcess = copyJson(finalRecord.raw);\n const finalDataset = processDatasetRoot(finalProcess);\n const totals = new Map<string, { amount: number; exchange: JsonObject }>();\n\n options.processInstances.forEach((instance) => {\n if (instance.multiplication_factor === 0) {\n return;\n }\n\n const record = options.processRecords[`${instance.process_id}@${instance.process_version}`];\n const recordDataset = processDatasetRoot(record.raw);\n const exchangesWrapper = isRecord(recordDataset.exchanges)\n ? (recordDataset.exchanges as JsonObject)\n : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection);\n\n if (!flowUuid || (direction !== 'Input' && direction !== 'Output')) {\n return;\n }\n\n const key = `${flowUuid}\\u0000${direction}`;\n const scaledAmount =\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount') *\n instance.multiplication_factor;\n const existing = totals.get(key);\n if (existing) {\n existing.amount = normalizeNumericOutput(existing.amount + scaledAmount);\n return;\n }\n\n totals.set(key, {\n amount: normalizeNumericOutput(scaledAmount),\n exchange: copyJson(exchange),\n });\n });\n });\n\n const instanceById = new Map(options.processInstances.map((item) => [item.instance_id, item]));\n options.edges.forEach((edge) => {\n if (!edge.flow_uuid) {\n return;\n }\n\n const downstreamInstance = instanceById.get(edge.to);\n if (!downstreamInstance) {\n return;\n }\n\n const downstreamRecord =\n options.processRecords[\n `${downstreamInstance.process_id}@${downstreamInstance.process_version}`\n ];\n if (!downstreamRecord) {\n return;\n }\n\n const internalAmount =\n (downstreamRecord.inputAmounts[edge.flow_uuid] ?? 0) *\n downstreamInstance.multiplication_factor;\n\n ['Output', 'Input'].forEach((direction) => {\n const key = `${edge.flow_uuid}\\u0000${direction}`;\n const existing = totals.get(key);\n if (!existing) {\n return;\n }\n\n existing.amount = normalizeNumericOutput(existing.amount - internalAmount);\n });\n });\n\n const exchangeItems: JsonObject[] = [];\n let nextInternalId = 1;\n let referenceExchangeInternalId = '';\n const sortedEntries = [...totals.entries()].sort((left, right) =>\n left[0].localeCompare(right[0]),\n );\n\n sortedEntries.forEach(([key, payload]) => {\n if (payload.amount <= 0) {\n return;\n }\n\n const [flowUuid, direction] = key.split('\\u0000');\n const quantitativeReference =\n flowUuid === finalRecord.referenceFlowUuid &&\n direction === (finalRecord.referenceDirection || 'Output') &&\n !referenceExchangeInternalId;\n\n const internalId = String(nextInternalId);\n nextInternalId += 1;\n if (quantitativeReference) {\n referenceExchangeInternalId = internalId;\n }\n\n exchangeItems.push(\n cloneExchangeWithAmount(payload.exchange, payload.amount, internalId, {\n quantitativeReference,\n }),\n );\n });\n\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `Could not build resulting process reference exchange for lifecycle model ${options.sourceModelId}.`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_OUTPUT_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const processInformation = isRecord(finalDataset.processInformation)\n ? (finalDataset.processInformation as JsonObject)\n : {};\n finalDataset.processInformation = processInformation;\n const dataInfo = isRecord(processInformation.dataSetInformation)\n ? (processInformation.dataSetInformation as JsonObject)\n : {};\n processInformation.dataSetInformation = dataInfo;\n dataInfo['common:UUID'] = options.processId;\n dataInfo.name = copyJson(options.sourceModelNameInfo);\n const generalComment = ensureList<JsonObject>(dataInfo['common:generalComment']).filter(isRecord);\n generalComment.push(\n ...multilangFromText(\n `Local ${options.role} resulting process generated from lifecycle model ${options.sourceModelId}; exchanges are aggregated from included processes with internal linked flows cancelled.`,\n `本地为生命周期模型 ${options.sourceModelId} 生成的 ${options.role} resulting process;其 exchanges 由包含过程聚合并抵消内部连接 flow 后得到。`,\n ),\n );\n dataInfo['common:generalComment'] = generalComment;\n\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? (processInformation.quantitativeReference as JsonObject)\n : {};\n processInformation.quantitativeReference = quantitativeReference;\n quantitativeReference.referenceToReferenceFlow = referenceExchangeInternalId;\n\n const technology = isRecord(processInformation.technology)\n ? (processInformation.technology as JsonObject)\n : {};\n processInformation.technology = technology;\n const includedRefs = options.processInstances.map((item) => copyJson(item.reference_to_process));\n if (includedRefs.length > 0) {\n technology.referenceToIncludedProcesses =\n includedRefs.length === 1 ? includedRefs[0] : includedRefs;\n }\n\n finalDataset.exchanges = {\n exchange: exchangeItems.length === 1 ? exchangeItems[0] : exchangeItems,\n };\n\n const administrative = isRecord(finalDataset.administrativeInformation)\n ? (finalDataset.administrativeInformation as JsonObject)\n : {};\n finalDataset.administrativeInformation = administrative;\n const publication = isRecord(administrative.publicationAndOwnership)\n ? (administrative.publicationAndOwnership as JsonObject)\n : {};\n administrative.publicationAndOwnership = publication;\n publication['common:dataSetVersion'] = options.processVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/processes/${options.processId}?version=${options.processVersion}`;\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? (finalDataset.modellingAndValidation as JsonObject)\n : {};\n finalDataset.modellingAndValidation = modellingAndValidation;\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? (modellingAndValidation.LCIMethodAndAllocation as JsonObject)\n : {};\n modellingAndValidation.LCIMethodAndAllocation = lciMethod;\n const typeOfDataSet =\n firstNonEmpty(options.metadataOverrides.type_of_data_set) ?? 'partly terminated system';\n lciMethod.typeOfDataSet = typeOfDataSet;\n\n dataInfo.generatedFromLifecycleModel = {\n id: options.sourceModelId,\n version: options.sourceModelVersion,\n role: options.role,\n };\n\n const metadata: JsonObject = {\n generated_from_lifecyclemodel_id: options.sourceModelId,\n generated_from_lifecyclemodel_version: options.sourceModelVersion,\n projection_role: options.role,\n projection_signature: options.projectionSignature,\n type_of_data_set: typeOfDataSet,\n ...copyJson(options.metadataOverrides),\n };\n if (options.attachGraphSnapshotUri) {\n metadata.graph_snapshot_uri = options.attachGraphSnapshotUri;\n }\n\n finalProcess.projectionMetadata = metadata;\n finalProcess.topologySummary = {\n process_instance_count: options.processInstances.length,\n edge_count: options.edges.length,\n };\n\n return finalProcess;\n}\n\nasync function buildProjectionBundle(options: {\n request: LifecyclemodelResultingProcessRequest;\n sourceModelJson: JsonObject;\n modelPath: string | null;\n remoteLookup?: RemoteProcessLookupContext;\n}): Promise<{\n bundle: JsonObject;\n report: JsonObject;\n sourceModelSummary: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n resolved_process_summary: JsonObject;\n };\n}> {\n const root = lifecyclemodelRoot(options.sourceModelJson);\n const modelInfo = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const modelDataInfo = isRecord(modelInfo.dataSetInformation) ? modelInfo.dataSetInformation : {};\n const modelIdentity = modelIdentifier(options.sourceModelJson, options.request.source_model);\n const sourceModelNameInfo = normalizedNameInfo(modelDataInfo.name, modelIdentity.name);\n const processInstances = extractProcessInstances(options.sourceModelJson);\n const edges = extractEdges(options.sourceModelJson);\n const processResolution = await resolveProcessRecords(options.request, {\n sourceModelJson: options.sourceModelJson,\n remoteLookup: options.remoteLookup,\n });\n const referenceProcess = referenceToResultingProcess(options.sourceModelJson);\n const referenceProcessInstance = referenceProcessInstanceId(options.sourceModelJson);\n const signatureSeed = {\n source_model_id: modelIdentity.id,\n source_model_version: modelIdentity.version,\n projection_mode: options.request.projection.mode,\n process_instances: processInstances.map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n process_version: item.process_version,\n })),\n edges,\n };\n const projectionSignature = `sha256:${sha256Text(JSON.stringify(signatureSeed))}`;\n const primaryProcessId =\n options.request.projection.process_id ??\n referenceProcess.id ??\n `${modelIdentity.id}-resulting-process`;\n const primaryProcessVersion =\n options.request.projection.process_version ?? referenceProcess.version ?? modelIdentity.version;\n const notes = [\n 'This command materializes a deterministic resulting processDataSet by aggregating included process exchanges and cancelling internal linked flows.',\n 'Remote writes remain gated behind an explicit publish layer.',\n ];\n\n const primaryPayload = buildResultingProcessPayload({\n sourceModelId: modelIdentity.id,\n sourceModelVersion: modelIdentity.version,\n sourceModelName: modelIdentity.name,\n sourceModelNameInfo,\n processId: primaryProcessId,\n processVersion: primaryProcessVersion,\n role: 'primary',\n projectionSignature,\n processInstances,\n edges,\n processRecords: processResolution.records,\n referenceProcessInstanceId: referenceProcessInstance,\n metadataOverrides: options.request.projection.metadata_overrides,\n attachGraphSnapshotUri: options.request.projection.attach_graph_snapshot_uri,\n });\n\n if (options.request.projection.mode === 'all-subproducts') {\n const jsonTg = isRecord(root.json_tg) ? root.json_tg : {};\n const submodels = ensureList<JsonObject>(jsonTg.submodels).filter(isRecord);\n notes.push(\n submodels.length > 0\n ? 'Subproduct projection was requested, but this lifecycle model only carries submodel metadata and no submodel-specific topology slices; only the primary aggregated resulting process was emitted.'\n : 'Subproduct projection was requested, but the lifecycle model does not expose submodel topology metadata; only the primary aggregated resulting process was emitted.',\n );\n }\n\n const sourceModelSummary = {\n id: modelIdentity.id,\n version: modelIdentity.version,\n name: modelIdentity.name,\n json_ordered_path: options.modelPath,\n reference_to_resulting_process_id: referenceProcess.id,\n reference_to_resulting_process_version: referenceProcess.version,\n reference_process_instance_id: referenceProcessInstance,\n resolved_process_summary: processResolution.resolutionSummary,\n };\n\n const report = {\n generated_at: nowIso(),\n status:\n options.request.publish.intent === 'publish'\n ? 'projected_local_bundle'\n : 'prepared_local_bundle',\n source_model: sourceModelSummary,\n projection_mode: options.request.projection.mode,\n node_count: processInstances.length,\n edge_count: edges.length,\n reference_process_instance_id: referenceProcessInstance,\n process_instance_preview: processInstances.slice(0, 10).map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n label: item.label,\n })),\n edge_preview: edges.slice(0, 10),\n projection_signature: projectionSignature,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n resolved_process_summary: processResolution.resolutionSummary,\n projected_process_count: 1,\n notes,\n };\n\n const bundle = {\n source_model: sourceModelSummary,\n projected_processes: [\n {\n role: 'primary',\n id: primaryProcessId,\n version: primaryProcessVersion,\n name: modelIdentity.name,\n json_ordered: primaryPayload,\n metadata: primaryPayload.projectionMetadata,\n },\n ],\n relations: [\n {\n lifecyclemodel_id: modelIdentity.id,\n lifecyclemodel_version: modelIdentity.version,\n resulting_process_id: primaryProcessId,\n resulting_process_version: primaryProcessVersion,\n projection_role: 'primary',\n projection_signature: projectionSignature,\n is_primary: true,\n },\n ],\n report,\n projection: {\n mode: options.request.projection.mode,\n metadata_overrides: options.request.projection.metadata_overrides,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n },\n };\n\n return {\n bundle,\n report,\n sourceModelSummary,\n };\n}\n\nfunction defaultOutDir(requestPath: string, subject: string, now: Date = new Date()): string {\n const requestDir = path.dirname(path.resolve(requestPath));\n const runId = buildRunId({\n namespace: 'lifecyclemodel_resulting_process',\n subject,\n operation: 'build',\n now,\n });\n\n return resolveRunLayout(\n path.join(requestDir, 'artifacts'),\n 'lifecyclemodel_resulting_process',\n runId,\n ).runRoot;\n}\n\nexport async function runLifecyclemodelBuildResultingProcess(\n options: RunLifecyclemodelResultingProcessOptions,\n): Promise<LifecyclemodelResultingProcessReport> {\n const requestPath = path.resolve(options.inputPath);\n const input = readJsonInput(requestPath);\n const normalizedRequest = normalizeLifecyclemodelResultingProcessRequest(input, {\n requestPath,\n });\n const sourceModel = loadSourceModel(normalizedRequest);\n const modelIdentity = modelIdentifier(\n sourceModel.sourceModelJson,\n normalizedRequest.source_model,\n );\n const outDir = options.outDir\n ? path.resolve(options.outDir)\n : defaultOutDir(requestPath, modelIdentity.id, options.now);\n const projection = await buildProjectionBundle({\n request: normalizedRequest,\n sourceModelJson: sourceModel.sourceModelJson,\n modelPath: sourceModel.modelPath,\n remoteLookup: {\n env: options.env ?? process.env,\n fetchImpl: options.fetchImpl ?? (fetch as FetchLike),\n },\n });\n\n const files = {\n normalized_request: writeJsonArtifact(\n path.join(outDir, 'request.normalized.json'),\n normalizedRequest,\n ),\n source_model_normalized: writeJsonArtifact(\n path.join(outDir, 'source-model.normalized.json'),\n sourceModel.sourceModelJson,\n ),\n source_model_summary: writeJsonArtifact(\n path.join(outDir, 'source-model.summary.json'),\n projection.sourceModelSummary,\n ),\n projection_report: writeJsonArtifact(\n path.join(outDir, 'projection-report.json'),\n projection.report,\n ),\n process_projection_bundle: writeJsonArtifact(\n path.join(outDir, 'process-projection-bundle.json'),\n projection.bundle,\n ),\n };\n\n return {\n generated_at_utc: nowIso(options.now),\n request_path: requestPath,\n out_dir: outDir,\n status: String(projection.report.status),\n projected_process_count: 1,\n relation_count: 1,\n source_model: {\n id: projection.sourceModelSummary.id,\n version: projection.sourceModelSummary.version,\n name: projection.sourceModelSummary.name,\n json_ordered_path: projection.sourceModelSummary.json_ordered_path,\n reference_to_resulting_process_id:\n projection.sourceModelSummary.reference_to_resulting_process_id,\n reference_to_resulting_process_version:\n projection.sourceModelSummary.reference_to_resulting_process_version,\n reference_process_instance_id: projection.sourceModelSummary.reference_process_instance_id,\n },\n files,\n };\n}\n\n// Exposed for deterministic unit coverage of internal lifecyclemodel fallback logic.\nexport const __testInternals = {\n uniqueStrings,\n toFiniteNumber,\n normalizeNumericOutput,\n toBoolean,\n resolveNameField,\n normalizedNameInfo,\n modelIdentifier,\n extractProcessInstances,\n extractEdges,\n processReferencePairs,\n parseProcessRecord,\n autoDetectProcessCatalogPath,\n autoDetectProcessJsonDirs,\n processSourceDirs,\n locateLocalProcessFile,\n loadSourceModel,\n referenceToResultingProcess,\n referenceProcessInstanceId,\n chooseReferenceInstance,\n cloneExchangeWithAmount,\n buildResultingProcessPayload,\n buildProjectionBundle,\n defaultOutDir,\n};\n"]}
1
+ {"version":3,"file":"lifecyclemodel-resulting-process.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-resulting-process.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { resolveProductionRuntimeEnv } from './env.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport {\n fetchExactOrLatestProcessRow,\n normalizeSupabaseProcessPayload,\n requireSupabaseRestRuntime,\n} from './supabase-rest.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_DATASET_VERSION = '00.00.001';\nconst EPSILON = 1e-10;\nconst REMOTE_PROCESS_LOOKUP_TIMEOUT_MS = 10_000;\n\nexport type ProjectionMode = 'primary-only' | 'all-subproducts';\nexport type PublishIntent = 'dry_run' | 'prepare_only' | 'publish';\n\nexport type LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: string | null;\n version: string | null;\n name: string | null;\n json_ordered_path: string | null;\n json_ordered: JsonObject | null;\n };\n projection: {\n mode: ProjectionMode;\n process_id: string | null;\n process_version: string | null;\n metadata_overrides: JsonObject;\n attach_graph_snapshot: boolean;\n attach_graph_snapshot_uri: string | null;\n };\n process_sources: {\n process_catalog_path: string | null;\n run_dirs: string[];\n process_json_dirs: string[];\n process_json_files: string[];\n allow_remote_lookup: boolean;\n };\n publish: {\n intent: PublishIntent;\n prepare_process_payloads: boolean;\n prepare_relation_payloads: boolean;\n };\n};\n\nexport type LifecyclemodelResultingProcessReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n status: string;\n projected_process_count: number;\n relation_count: number;\n source_model: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n };\n files: {\n normalized_request: string;\n source_model_normalized: string;\n source_model_summary: string;\n projection_report: string;\n process_projection_bundle: string;\n };\n};\n\nexport type RunLifecyclemodelResultingProcessOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n};\n\ntype RemoteProcessLookupContext = {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonObject;\n sourceLabel: string;\n sourcePath: string | null;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: string;\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n};\n\ntype ProcessInstance = {\n instance_id: string;\n process_id: string;\n process_version: string;\n label: string;\n multiplication_factor: number;\n reference_to_process: JsonObject;\n raw: JsonObject;\n};\n\ntype Edge = {\n edge_id: string;\n from: string;\n to: string;\n exchange_id: string | null;\n flow_uuid: string | null;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensureList<T = unknown>(value: unknown): T[] {\n if (value === undefined || value === null) {\n return [];\n }\n\n return Array.isArray(value) ? (value as T[]) : ([value] as T[]);\n}\n\nfunction copyJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction uniqueStrings(values: Array<string | null | undefined>): string[] {\n const unique: string[] = [];\n const seen = new Set<string>();\n\n values.forEach((value) => {\n if (!value) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n unique.push(value);\n });\n\n return unique;\n}\n\nfunction sha256Text(text: string): string {\n return createHash('sha256').update(text).digest('hex');\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction requireRemoteProcessLookupRuntime(configuredEnv: NodeJS.ProcessEnv) {\n const env = resolveProductionRuntimeEnv(configuredEnv);\n const missing: string[] = [];\n if (typeof env.TIANGONG_LCA_API_BASE_URL !== 'string' || !env.TIANGONG_LCA_API_BASE_URL.trim()) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (\n ![env.TIANGONG_LCA_OAUTH_CLIENT_ID, env.TIANGONG_LCA_ACCESS_TOKEN].some(\n (value) => typeof value === 'string' && value.trim(),\n )\n ) {\n missing.push('TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN');\n }\n\n if (\n typeof env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY !== 'string' ||\n !env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.trim()\n ) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(\n `Remote process lookup requires ${missing.join(', ')} when process_sources.allow_remote_lookup=true.`,\n {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n },\n );\n }\n\n return requireSupabaseRestRuntime(env);\n}\n\nasync function fetchRemoteProcessRecord(options: {\n processId: string;\n requestedVersion: string;\n runtime: ReturnType<typeof createSupabaseDataRuntime>;\n fetchImpl: FetchLike;\n}): Promise<{\n record: ProcessRecord;\n resolution: 'remote_supabase_exact' | 'remote_supabase_latest_fallback';\n sourcePath: string;\n resolvedVersion: string;\n}> {\n const lookupKey = `${options.processId}@${options.requestedVersion}`;\n try {\n const lookup = await fetchExactOrLatestProcessRow({\n runtime: options.runtime,\n id: options.processId,\n version: options.requestedVersion,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n fetchImpl: options.fetchImpl,\n fallbackToLatest: true,\n });\n\n if (!lookup) {\n throw new CliError(`Could not resolve remote process dataset for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_PROCESS_NOT_FOUND',\n exitCode: 2,\n details: { process_id: options.processId, version: options.requestedVersion },\n });\n }\n\n const record = parseProcessRecord(normalizeSupabaseProcessPayload(lookup.row.json, lookupKey), {\n sourceLabel: 'remote:supabase',\n sourcePath: lookup.sourceUrl,\n });\n\n return {\n record,\n resolution:\n lookup.resolution === 'remote_supabase_latest_fallback'\n ? 'remote_supabase_latest_fallback'\n : 'remote_supabase_exact',\n sourcePath: lookup.sourceUrl,\n resolvedVersion: lookup.row.version || record.version,\n };\n } catch (error) {\n if (error instanceof CliError && error.code === 'SUPABASE_REST_RESPONSE_INVALID') {\n throw new CliError(`Remote process lookup returned an invalid response for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_RESPONSE_INVALID',\n exitCode: 1,\n details: error.details,\n });\n }\n\n throw error;\n }\n}\n\nfunction resolveInputPath(baseDir: string, value: string): string;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null {\n if (typeof value !== 'string' || !value.trim()) {\n return null;\n }\n\n const trimmed = value.trim();\n if (trimmed.startsWith('file:')) {\n return trimmed;\n }\n\n if (trimmed.includes('://')) {\n return trimmed;\n }\n\n return path.resolve(baseDir, trimmed);\n}\n\nfunction resolveLocalPath(value: string, fieldName: string): string {\n if (value.startsWith('file:')) {\n return fileURLToPath(value);\n }\n\n if (value.includes('://')) {\n throw new CliError(`${fieldName} must resolve to a local filesystem path.`, {\n code: 'LIFECYCLEMODEL_LOCAL_PATH_REQUIRED',\n exitCode: 2,\n details: value,\n });\n }\n\n return path.resolve(value);\n}\n\nfunction readJsonObject(filePath: string, code: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected a JSON object file: ${filePath}`, {\n code,\n exitCode: 2,\n });\n }\n\n return value;\n}\n\nfunction toFiniteNumber(value: unknown, fieldName: string): number {\n if (value === undefined || value === null || value === '') {\n return 0;\n }\n\n const parsed = typeof value === 'number' ? value : Number(String(value));\n if (!Number.isFinite(parsed)) {\n throw new CliError(`Expected a numeric value for ${fieldName}.`, {\n code: 'LIFECYCLEMODEL_INVALID_NUMBER',\n exitCode: 2,\n details: { fieldName, value },\n });\n }\n\n return parsed;\n}\n\nfunction normalizeNumericOutput(value: number): number {\n const rounded = Math.abs(value) < EPSILON ? 0 : Number.parseFloat(value.toFixed(12));\n return rounded === 0 ? 0 : rounded;\n}\n\nfunction toBoolean(value: unknown, defaultValue: boolean): boolean {\n if (value === undefined) {\n return defaultValue;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n\n return Boolean(value);\n}\n\nfunction normalizeStringArray(value: unknown, fieldName: string): string[] {\n const items = ensureList(value);\n\n return items.map((item, index) => {\n if (typeof item !== 'string' || !item.trim()) {\n throw new CliError(`Expected ${fieldName}[${index}] to be a non-empty string.`, {\n code: 'LIFECYCLEMODEL_INVALID_STRING_ARRAY',\n exitCode: 2,\n details: { fieldName, value: item },\n });\n }\n\n return item.trim();\n });\n}\n\nfunction normalizeProjectionMode(value: unknown): ProjectionMode {\n const mode = firstNonEmpty(value) ?? 'primary-only';\n if (mode === 'primary-only' || mode === 'all-subproducts') {\n return mode;\n }\n\n throw new CliError('projection.mode must be primary-only or all-subproducts.', {\n code: 'LIFECYCLEMODEL_INVALID_PROJECTION_MODE',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizePublishIntent(value: unknown): PublishIntent {\n const intent = firstNonEmpty(value) ?? 'dry_run';\n if (intent === 'dry_run' || intent === 'prepare_only' || intent === 'publish') {\n return intent;\n }\n\n throw new CliError('publish.intent must be dry_run, prepare_only, or publish.', {\n code: 'LIFECYCLEMODEL_INVALID_PUBLISH_INTENT',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizeMetadataOverrides(value: unknown): JsonObject {\n if (value === undefined) {\n return {};\n }\n\n if (!isRecord(value)) {\n throw new CliError('projection.metadata_overrides must be a JSON object when provided.', {\n code: 'LIFECYCLEMODEL_INVALID_METADATA_OVERRIDES',\n exitCode: 2,\n });\n }\n\n return copyJson(value);\n}\n\nexport function normalizeLifecyclemodelResultingProcessRequest(\n input: unknown,\n options: {\n requestPath: string;\n },\n): LifecyclemodelResultingProcessRequest {\n if (!isRecord(input)) {\n throw new CliError('Lifecyclemodel resulting-process request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const baseDir = path.dirname(path.resolve(options.requestPath));\n const sourceModelRaw = isRecord(input.source_model) ? input.source_model : {};\n const projectionRaw = isRecord(input.projection) ? input.projection : {};\n const processSourcesRaw = isRecord(input.process_sources) ? input.process_sources : {};\n const publishRaw = isRecord(input.publish) ? input.publish : {};\n\n const normalized: LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: firstNonEmpty(sourceModelRaw.id),\n version: firstNonEmpty(sourceModelRaw.version),\n name: firstNonEmpty(sourceModelRaw.name),\n json_ordered_path: resolveInputPath(baseDir, sourceModelRaw.json_ordered_path),\n json_ordered: isRecord(sourceModelRaw.json_ordered)\n ? copyJson(sourceModelRaw.json_ordered)\n : null,\n },\n projection: {\n mode: normalizeProjectionMode(projectionRaw.mode),\n process_id: firstNonEmpty(projectionRaw.process_id),\n process_version: firstNonEmpty(projectionRaw.process_version),\n metadata_overrides: normalizeMetadataOverrides(projectionRaw.metadata_overrides),\n attach_graph_snapshot: toBoolean(projectionRaw.attach_graph_snapshot, false),\n attach_graph_snapshot_uri: resolveInputPath(baseDir, projectionRaw.attach_graph_snapshot_uri),\n },\n process_sources: {\n process_catalog_path: (() => {\n const resolved = resolveInputPath(baseDir, processSourcesRaw.process_catalog_path);\n return resolved ? resolveLocalPath(resolved, 'process_sources.process_catalog_path') : null;\n })(),\n run_dirs: normalizeStringArray(processSourcesRaw.run_dirs, 'process_sources.run_dirs').map(\n (item) => resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.run_dirs'),\n ),\n process_json_dirs: normalizeStringArray(\n processSourcesRaw.process_json_dirs,\n 'process_sources.process_json_dirs',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_dirs'),\n ),\n process_json_files: normalizeStringArray(\n processSourcesRaw.process_json_files,\n 'process_sources.process_json_files',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_files'),\n ),\n allow_remote_lookup: toBoolean(\n processSourcesRaw.allow_remote_lookup ?? processSourcesRaw.allow_mcp_lookup,\n false,\n ),\n },\n publish: {\n intent: normalizePublishIntent(publishRaw.intent),\n prepare_process_payloads: toBoolean(publishRaw.prepare_process_payloads, true),\n prepare_relation_payloads: toBoolean(publishRaw.prepare_relation_payloads, true),\n },\n };\n\n if (\n !normalized.source_model.id &&\n !normalized.source_model.json_ordered &&\n !normalized.source_model.json_ordered_path\n ) {\n throw new CliError(\n 'source_model must include at least one of id, json_ordered, or json_ordered_path.',\n {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n if (!normalized.process_sources.process_catalog_path) {\n normalized.process_sources.process_catalog_path = autoDetectProcessCatalogPath(\n normalized.source_model.json_ordered_path,\n );\n }\n\n if (normalized.process_sources.process_json_dirs.length === 0) {\n normalized.process_sources.process_json_dirs = autoDetectProcessJsonDirs(\n normalized.source_model.json_ordered_path,\n );\n }\n\n return normalized;\n}\n\nfunction lifecyclemodelRoot(model: JsonObject): JsonObject {\n return isRecord(model.lifeCycleModelDataSet)\n ? (model.lifeCycleModelDataSet as JsonObject)\n : model;\n}\n\nfunction processDatasetRoot(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n\n for (const key of ['json_ordered', 'json'] as const) {\n const nested = payload[key];\n if (isRecord(nested) && isRecord(nested.processDataSet)) {\n return nested.processDataSet;\n }\n }\n\n throw new CliError('Process payload does not contain processDataSet.', {\n code: 'LIFECYCLEMODEL_PROCESS_DATASET_REQUIRED',\n exitCode: 2,\n });\n}\n\nfunction resolveNameField(namePayload: unknown): string | null {\n if (typeof namePayload === 'string') {\n return namePayload.trim() || null;\n }\n\n if (Array.isArray(namePayload)) {\n for (const item of namePayload) {\n const resolved = resolveNameField(item);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n }\n\n if (!isRecord(namePayload)) {\n return null;\n }\n\n const direct = firstNonEmpty(namePayload['@index'], namePayload['#text'], namePayload.text);\n if (direct) {\n return direct;\n }\n\n for (const key of ['baseName', 'shortName', 'name'] as const) {\n const nested = namePayload[key];\n if (isRecord(nested)) {\n const nestedText = firstNonEmpty(nested['@index'], nested['#text'], nested.text);\n if (nestedText) {\n return nestedText;\n }\n }\n\n const resolved = firstNonEmpty(nested);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n}\n\nfunction normalizedNameInfo(namePayload: unknown, fallbackText: string): JsonObject {\n if (isRecord(namePayload) && Object.keys(namePayload).length > 0) {\n return copyJson(namePayload);\n }\n\n return {\n baseName: [\n {\n '@xml:lang': 'en',\n '#text': resolveNameField(namePayload) ?? fallbackText,\n },\n ],\n };\n}\n\nfunction multilangFromText(enText: string, zhText: string): JsonObject[] {\n return [\n {\n '@xml:lang': 'en',\n '#text': enText,\n },\n {\n '@xml:lang': 'zh',\n '#text': zhText,\n },\n ];\n}\n\nfunction modelDatasetVersion(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const administrative = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : isRecord(administrative['common:publicationAndOwnership'])\n ? (administrative['common:publicationAndOwnership'] as JsonObject)\n : {};\n\n return firstNonEmpty(publication['common:dataSetVersion']);\n}\n\nfunction modelIdentifier(\n model: JsonObject,\n sourceModel: LifecyclemodelResultingProcessRequest['source_model'],\n): {\n id: string;\n version: string;\n name: string;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const modelId =\n firstNonEmpty(\n sourceModel.id,\n dataInfo['common:UUID'],\n root['@id'],\n root.id,\n dataInfo.identifierOfSubDataSet,\n ) ?? `lm-${sha256Text(JSON.stringify(model)).slice(0, 12)}`;\n const version =\n firstNonEmpty(\n sourceModel.version,\n modelDatasetVersion(model),\n root['@version'],\n root.version,\n dataInfo['@version'],\n ) ?? DEFAULT_DATASET_VERSION;\n const name =\n firstNonEmpty(sourceModel.name, resolveNameField(dataInfo.name), root.name) ?? modelId;\n\n return {\n id: modelId,\n version,\n name,\n };\n}\n\nfunction extractProcessInstances(model: JsonObject): ProcessInstance[] {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const technology = isRecord(info.technology)\n ? info.technology\n : isRecord(root.technology)\n ? root.technology\n : {};\n const processes = isRecord(technology.processes) ? technology.processes : {};\n const instances = ensureList<JsonObject>(processes.processInstance);\n\n return instances.filter(isRecord).map((item, index) => {\n const ref = isRecord(item.referenceToProcess) ? item.referenceToProcess : {};\n return {\n instance_id:\n firstNonEmpty(item['@dataSetInternalID'], item['@id'], item.id) ?? `pi-${index + 1}`,\n process_id: firstNonEmpty(ref['@refObjectId'], ref.id, ref.processId) ?? `proc-${index + 1}`,\n process_version: firstNonEmpty(ref['@version'], ref.version) ?? DEFAULT_DATASET_VERSION,\n label:\n firstNonEmpty(\n resolveNameField(ref['common:shortDescription']),\n resolveNameField(ref.shortDescription),\n resolveNameField(ref.name),\n ref['@refObjectId'],\n ) ?? `process-${index + 1}`,\n multiplication_factor: normalizeNumericOutput(\n toFiniteNumber(item['@multiplicationFactor'], 'processInstance.@multiplicationFactor'),\n ),\n reference_to_process: copyJson(ref),\n raw: copyJson(item),\n };\n });\n}\n\nfunction extractEdges(model: JsonObject): Edge[] {\n const edges: Edge[] = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const connections = isRecord(instance.raw.connections) ? instance.raw.connections : {};\n const outputs = ensureList<JsonObject>(connections.outputExchange);\n\n outputs.filter(isRecord).forEach((exchange, edgeIndex) => {\n const downstreamItems = ensureList<JsonObject>(exchange.downstreamProcess).filter(isRecord);\n downstreamItems.forEach((downstream, downstreamIndex) => {\n const downstreamId = firstNonEmpty(\n downstream['@refObjectId'],\n downstream['@id'],\n downstream.id,\n exchange.downstreamProcessId,\n );\n if (!downstreamId) {\n return;\n }\n\n edges.push({\n edge_id:\n firstNonEmpty(exchange['@id'], exchange.id) ??\n `${instance.instance_id}-edge-${edgeIndex + 1}-${downstreamIndex + 1}`,\n from: instance.instance_id,\n to: downstreamId,\n exchange_id: firstNonEmpty(exchange['@id'], exchange.id),\n flow_uuid: firstNonEmpty(\n exchange['@flowUUID'],\n downstream['@flowUUID'],\n exchange.flowUUID,\n ),\n });\n });\n });\n });\n\n return edges;\n}\n\nfunction processReferencePairs(model: JsonObject): Array<{ process_id: string; version: string }> {\n const seen = new Set<string>();\n const pairs: Array<{ process_id: string; version: string }> = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const key = `${instance.process_id}@${instance.process_version}`;\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n pairs.push({\n process_id: instance.process_id,\n version: instance.process_version,\n });\n });\n\n return pairs;\n}\n\nfunction parseProcessRecord(\n payload: JsonObject,\n options: {\n sourceLabel: string;\n sourcePath: string | null;\n },\n): ProcessRecord {\n const dataset = processDatasetRoot(payload);\n const info = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const administrative = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : {};\n const processUuid = firstNonEmpty(dataInfo['common:UUID']);\n if (!processUuid) {\n throw new CliError(`processDataSet missing common:UUID from ${options.sourceLabel}`, {\n code: 'LIFECYCLEMODEL_PROCESS_UUID_REQUIRED',\n exitCode: 2,\n });\n }\n\n const version = firstNonEmpty(publication['common:dataSetVersion']) ?? DEFAULT_DATASET_VERSION;\n const quantitativeReference = isRecord(info.quantitativeReference)\n ? info.quantitativeReference\n : {};\n const referenceInternalId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n const exchangesWrapper = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => String(item['@dataSetInternalID'] ?? '') === String(referenceInternalId ?? ''),\n );\n\n if (!referenceExchange) {\n throw new CliError(\n `reference exchange ${referenceInternalId ?? '(missing)'} not found for process ${processUuid}`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_EXCHANGE_NOT_FOUND',\n exitCode: 2,\n },\n );\n }\n\n const inputAmounts: Record<string, number> = {};\n const outputAmounts: Record<string, number> = {};\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection) ?? '';\n if (!flowUuid) {\n return;\n }\n\n const amount = normalizeNumericOutput(\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount'),\n );\n\n if (direction === 'Input') {\n inputAmounts[flowUuid] = normalizeNumericOutput((inputAmounts[flowUuid] ?? 0) + amount);\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = normalizeNumericOutput((outputAmounts[flowUuid] ?? 0) + amount);\n }\n });\n\n const referenceFlow = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n\n return {\n processUuid,\n version,\n raw: {\n processDataSet: dataset,\n },\n sourceLabel: options.sourceLabel,\n sourcePath: options.sourcePath,\n referenceExchangeInternalId: String(referenceInternalId ?? ''),\n referenceFlowUuid: firstNonEmpty(referenceFlow['@refObjectId']) ?? '',\n referenceDirection: firstNonEmpty(referenceExchange.exchangeDirection) ?? '',\n referenceAmount: normalizeNumericOutput(\n toFiniteNumber(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n 'reference amount',\n ),\n ),\n inputAmounts,\n outputAmounts,\n };\n}\n\nfunction autoDetectProcessCatalogPath(modelPath: string | null): string | null {\n if (!modelPath) {\n return null;\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return null;\n }\n\n if (path.basename(path.dirname(resolved)) !== 'lifecyclemodels') {\n return null;\n }\n\n const tidasBundleDir = path.dirname(path.dirname(resolved));\n if (path.basename(tidasBundleDir) !== 'tidas_bundle') {\n return null;\n }\n\n const candidate = path.join(path.dirname(tidasBundleDir), 'process-catalog.json');\n return existsSync(candidate) ? candidate : null;\n}\n\nfunction autoDetectProcessJsonDirs(modelPath: string | null): string[] {\n if (!modelPath) {\n return [];\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return [];\n }\n\n const candidates = [path.join(path.dirname(resolved), 'processes')];\n\n if (path.basename(path.dirname(resolved)) === 'lifecyclemodels') {\n candidates.push(path.join(path.dirname(path.dirname(resolved)), 'processes'));\n }\n\n const stem = path.basename(resolved, path.extname(resolved));\n if (stem.endsWith('-model')) {\n const prefix = stem.slice(0, -'-model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}-processes`));\n }\n }\n if (stem.endsWith('_model')) {\n const prefix = stem.slice(0, -'_model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}_processes`));\n }\n }\n\n return uniqueStrings(candidates.filter((candidate) => existsSync(candidate)));\n}\n\nconst PathSafe = {\n resolve(value: string): string | null {\n try {\n return resolveLocalPath(value, 'path');\n } catch {\n return null;\n }\n },\n};\n\nfunction processSourceDirs(request: LifecyclemodelResultingProcessRequest): string[] {\n const dirs = [...request.process_sources.process_json_dirs];\n\n request.process_sources.run_dirs.forEach((runDir) => {\n const candidate = path.join(runDir, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n\n if (request.process_sources.process_catalog_path) {\n try {\n const payload = JSON.parse(\n readFileSync(request.process_sources.process_catalog_path, 'utf8'),\n ) as unknown;\n ensureList<JsonObject>(payload)\n .filter(isRecord)\n .forEach((item) => {\n const sourceLabel = firstNonEmpty(item.source_label);\n if (!sourceLabel) {\n return;\n }\n const candidate = path.join(sourceLabel, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n } catch {\n // Keep local process resolution best-effort for catalog expansion.\n }\n }\n\n return uniqueStrings(dirs);\n}\n\nfunction locateLocalProcessFile(\n processId: string,\n version: string,\n options: {\n processDirs: string[];\n processFiles: string[];\n },\n): string | null {\n const targetFileName = `${processId}_${version}.json`;\n\n for (const directory of options.processDirs) {\n const candidate = path.join(directory, targetFileName);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n for (const filePath of options.processFiles) {\n if (existsSync(filePath) && path.basename(filePath) === targetFileName) {\n return filePath;\n }\n }\n\n return null;\n}\n\nasync function resolveProcessRecords(\n request: LifecyclemodelResultingProcessRequest,\n options: {\n sourceModelJson: JsonObject;\n remoteLookup?: RemoteProcessLookupContext;\n },\n): Promise<{\n records: Record<string, ProcessRecord>;\n resolutionSummary: JsonObject;\n}> {\n const requiredPairs = processReferencePairs(options.sourceModelJson);\n const processFiles = request.process_sources.process_json_files;\n const processDirs = processSourceDirs(request);\n const records: Record<string, ProcessRecord> = {};\n const resolutionItems: JsonObject[] = [];\n const unresolved: Array<{ process_id: string; version: string }> = [];\n\n requiredPairs.forEach(({ process_id, version }) => {\n const localPath = locateLocalProcessFile(process_id, version, {\n processDirs,\n processFiles,\n });\n\n if (localPath) {\n const record = parseProcessRecord(\n readJsonObject(localPath, 'LIFECYCLEMODEL_PROCESS_FILE_NOT_OBJECT'),\n {\n sourceLabel: path.dirname(localPath),\n sourcePath: localPath,\n },\n );\n records[`${process_id}@${version}`] = record;\n resolutionItems.push({\n process_id,\n version,\n resolution: 'local_file',\n source_path: localPath,\n });\n return;\n }\n\n unresolved.push({ process_id, version });\n });\n\n if (unresolved.length > 0 && request.process_sources.allow_remote_lookup) {\n const env = options.remoteLookup?.env ?? process.env;\n const fetchImpl = options.remoteLookup?.fetchImpl ?? (fetch as FetchLike);\n const runtime = createSupabaseDataRuntime({\n runtime: requireRemoteProcessLookupRuntime(env),\n fetchImpl,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n });\n\n for (const item of unresolved) {\n const remoteRecord = await fetchRemoteProcessRecord({\n processId: item.process_id,\n requestedVersion: item.version,\n runtime,\n fetchImpl,\n });\n records[`${item.process_id}@${item.version}`] = remoteRecord.record;\n resolutionItems.push({\n process_id: item.process_id,\n requested_version: item.version,\n resolved_version: remoteRecord.resolvedVersion,\n resolution: remoteRecord.resolution,\n source_path: remoteRecord.sourcePath,\n });\n }\n }\n\n const remainingUnresolved = requiredPairs.filter(\n ({ process_id, version }) => !records[`${process_id}@${version}`],\n );\n\n if (remainingUnresolved.length > 0) {\n const missing = remainingUnresolved\n .map((item) => `${item.process_id}@${item.version}`)\n .join(', ');\n throw new CliError(\n `Could not resolve referenced process datasets for lifecycle model: ${missing}.`,\n {\n code: 'LIFECYCLEMODEL_PROCESS_RESOLUTION_FAILED',\n exitCode: 2,\n },\n );\n }\n\n return {\n records,\n resolutionSummary: {\n required_process_count: requiredPairs.length,\n resolved_process_count: Object.keys(records).length,\n local_process_dir_count: processDirs.length,\n explicit_process_file_count: processFiles.length,\n remote_resolution_count: resolutionItems.filter((item) =>\n String(item.resolution).startsWith('remote_'),\n ).length,\n items: resolutionItems,\n },\n };\n}\n\nfunction loadSourceModel(request: LifecyclemodelResultingProcessRequest): {\n sourceModelJson: JsonObject;\n modelPath: string | null;\n} {\n if (request.source_model.json_ordered) {\n return {\n sourceModelJson: copyJson(request.source_model.json_ordered),\n modelPath: null,\n };\n }\n\n if (!request.source_model.json_ordered_path) {\n throw new CliError('source_model must include json_ordered or json_ordered_path.', {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_PATH_REQUIRED',\n exitCode: 2,\n });\n }\n\n const localPath = resolveLocalPath(\n request.source_model.json_ordered_path,\n 'source_model.json_ordered_path',\n );\n\n return {\n sourceModelJson: readJsonObject(localPath, 'LIFECYCLEMODEL_SOURCE_MODEL_NOT_OBJECT'),\n modelPath: localPath,\n };\n}\n\nfunction referenceToResultingProcess(model: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const ref = isRecord(dataInfo.referenceToResultingProcess)\n ? dataInfo.referenceToResultingProcess\n : {};\n\n return {\n id: firstNonEmpty(ref['@refObjectId'], ref.id),\n version: firstNonEmpty(ref['@version'], ref.version),\n };\n}\n\nfunction referenceProcessInstanceId(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const quantitative = isRecord(info.quantitativeReference) ? info.quantitativeReference : {};\n const ref = quantitative.referenceToReferenceProcess;\n return isRecord(ref) ? firstNonEmpty(ref['@refObjectId'], ref.id) : firstNonEmpty(ref);\n}\n\nfunction chooseReferenceInstance(\n processInstances: ProcessInstance[],\n requestedInstanceId: string | null,\n): ProcessInstance {\n const directMatch = requestedInstanceId\n ? processInstances.find((item) => item.instance_id === requestedInstanceId)\n : null;\n if (directMatch) {\n return directMatch;\n }\n\n const scaled = processInstances.find((item) => item.multiplication_factor > 0);\n if (scaled) {\n return scaled;\n }\n\n const fallback = processInstances[0];\n if (!fallback) {\n throw new CliError('Lifecycle model does not contain any process instances.', {\n code: 'LIFECYCLEMODEL_PROCESS_INSTANCES_REQUIRED',\n exitCode: 2,\n });\n }\n\n return fallback;\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonObject,\n amount: number,\n internalId: string,\n options: {\n quantitativeReference: boolean;\n },\n): JsonObject {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const normalizedAmount = normalizeNumericOutput(amount);\n cloned.meanAmount = normalizedAmount;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = normalizedAmount;\n }\n cloned.quantitativeReference = options.quantitativeReference;\n return cloned;\n}\n\nfunction buildResultingProcessPayload(options: {\n sourceModelId: string;\n sourceModelVersion: string;\n sourceModelName: string;\n sourceModelNameInfo: JsonObject;\n processId: string;\n processVersion: string;\n role: 'primary';\n projectionSignature: string;\n processInstances: ProcessInstance[];\n edges: Edge[];\n processRecords: Record<string, ProcessRecord>;\n referenceProcessInstanceId: string | null;\n metadataOverrides: JsonObject;\n attachGraphSnapshotUri: string | null;\n}): JsonObject {\n const chosenInstance = chooseReferenceInstance(\n options.processInstances,\n options.referenceProcessInstanceId,\n );\n const chosenKey = `${chosenInstance.process_id}@${chosenInstance.process_version}`;\n const finalRecord = options.processRecords[chosenKey];\n const finalProcess = copyJson(finalRecord.raw);\n const finalDataset = processDatasetRoot(finalProcess);\n const totals = new Map<string, { amount: number; exchange: JsonObject }>();\n\n options.processInstances.forEach((instance) => {\n if (instance.multiplication_factor === 0) {\n return;\n }\n\n const record = options.processRecords[`${instance.process_id}@${instance.process_version}`];\n const recordDataset = processDatasetRoot(record.raw);\n const exchangesWrapper = isRecord(recordDataset.exchanges)\n ? (recordDataset.exchanges as JsonObject)\n : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection);\n\n if (!flowUuid || (direction !== 'Input' && direction !== 'Output')) {\n return;\n }\n\n const key = `${flowUuid}\\u0000${direction}`;\n const scaledAmount =\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount') *\n instance.multiplication_factor;\n const existing = totals.get(key);\n if (existing) {\n existing.amount = normalizeNumericOutput(existing.amount + scaledAmount);\n return;\n }\n\n totals.set(key, {\n amount: normalizeNumericOutput(scaledAmount),\n exchange: copyJson(exchange),\n });\n });\n });\n\n const instanceById = new Map(options.processInstances.map((item) => [item.instance_id, item]));\n options.edges.forEach((edge) => {\n if (!edge.flow_uuid) {\n return;\n }\n\n const downstreamInstance = instanceById.get(edge.to);\n if (!downstreamInstance) {\n return;\n }\n\n const downstreamRecord =\n options.processRecords[\n `${downstreamInstance.process_id}@${downstreamInstance.process_version}`\n ];\n if (!downstreamRecord) {\n return;\n }\n\n const internalAmount =\n (downstreamRecord.inputAmounts[edge.flow_uuid] ?? 0) *\n downstreamInstance.multiplication_factor;\n\n ['Output', 'Input'].forEach((direction) => {\n const key = `${edge.flow_uuid}\\u0000${direction}`;\n const existing = totals.get(key);\n if (!existing) {\n return;\n }\n\n existing.amount = normalizeNumericOutput(existing.amount - internalAmount);\n });\n });\n\n const exchangeItems: JsonObject[] = [];\n let nextInternalId = 1;\n let referenceExchangeInternalId = '';\n const sortedEntries = [...totals.entries()].sort((left, right) =>\n left[0].localeCompare(right[0]),\n );\n\n sortedEntries.forEach(([key, payload]) => {\n if (payload.amount <= 0) {\n return;\n }\n\n const [flowUuid, direction] = key.split('\\u0000');\n const quantitativeReference =\n flowUuid === finalRecord.referenceFlowUuid &&\n direction === (finalRecord.referenceDirection || 'Output') &&\n !referenceExchangeInternalId;\n\n const internalId = String(nextInternalId);\n nextInternalId += 1;\n if (quantitativeReference) {\n referenceExchangeInternalId = internalId;\n }\n\n exchangeItems.push(\n cloneExchangeWithAmount(payload.exchange, payload.amount, internalId, {\n quantitativeReference,\n }),\n );\n });\n\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `Could not build resulting process reference exchange for lifecycle model ${options.sourceModelId}.`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_OUTPUT_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const processInformation = isRecord(finalDataset.processInformation)\n ? (finalDataset.processInformation as JsonObject)\n : {};\n finalDataset.processInformation = processInformation;\n const dataInfo = isRecord(processInformation.dataSetInformation)\n ? (processInformation.dataSetInformation as JsonObject)\n : {};\n processInformation.dataSetInformation = dataInfo;\n dataInfo['common:UUID'] = options.processId;\n dataInfo.name = copyJson(options.sourceModelNameInfo);\n const generalComment = ensureList<JsonObject>(dataInfo['common:generalComment']).filter(isRecord);\n generalComment.push(\n ...multilangFromText(\n `Local ${options.role} resulting process generated from lifecycle model ${options.sourceModelId}; exchanges are aggregated from included processes with internal linked flows cancelled.`,\n `本地为生命周期模型 ${options.sourceModelId} 生成的 ${options.role} resulting process;其 exchanges 由包含过程聚合并抵消内部连接 flow 后得到。`,\n ),\n );\n dataInfo['common:generalComment'] = generalComment;\n\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? (processInformation.quantitativeReference as JsonObject)\n : {};\n processInformation.quantitativeReference = quantitativeReference;\n quantitativeReference.referenceToReferenceFlow = referenceExchangeInternalId;\n\n const technology = isRecord(processInformation.technology)\n ? (processInformation.technology as JsonObject)\n : {};\n processInformation.technology = technology;\n const includedRefs = options.processInstances.map((item) => copyJson(item.reference_to_process));\n if (includedRefs.length > 0) {\n technology.referenceToIncludedProcesses =\n includedRefs.length === 1 ? includedRefs[0] : includedRefs;\n }\n\n finalDataset.exchanges = {\n exchange: exchangeItems.length === 1 ? exchangeItems[0] : exchangeItems,\n };\n\n const administrative = isRecord(finalDataset.administrativeInformation)\n ? (finalDataset.administrativeInformation as JsonObject)\n : {};\n finalDataset.administrativeInformation = administrative;\n const publication = isRecord(administrative.publicationAndOwnership)\n ? (administrative.publicationAndOwnership as JsonObject)\n : {};\n administrative.publicationAndOwnership = publication;\n publication['common:dataSetVersion'] = options.processVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/processes/${options.processId}?version=${options.processVersion}`;\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? (finalDataset.modellingAndValidation as JsonObject)\n : {};\n finalDataset.modellingAndValidation = modellingAndValidation;\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? (modellingAndValidation.LCIMethodAndAllocation as JsonObject)\n : {};\n modellingAndValidation.LCIMethodAndAllocation = lciMethod;\n const typeOfDataSet =\n firstNonEmpty(options.metadataOverrides.type_of_data_set) ?? 'partly terminated system';\n lciMethod.typeOfDataSet = typeOfDataSet;\n\n dataInfo.generatedFromLifecycleModel = {\n id: options.sourceModelId,\n version: options.sourceModelVersion,\n role: options.role,\n };\n\n const metadata: JsonObject = {\n generated_from_lifecyclemodel_id: options.sourceModelId,\n generated_from_lifecyclemodel_version: options.sourceModelVersion,\n projection_role: options.role,\n projection_signature: options.projectionSignature,\n type_of_data_set: typeOfDataSet,\n ...copyJson(options.metadataOverrides),\n };\n if (options.attachGraphSnapshotUri) {\n metadata.graph_snapshot_uri = options.attachGraphSnapshotUri;\n }\n\n finalProcess.projectionMetadata = metadata;\n finalProcess.topologySummary = {\n process_instance_count: options.processInstances.length,\n edge_count: options.edges.length,\n };\n\n return finalProcess;\n}\n\nasync function buildProjectionBundle(options: {\n request: LifecyclemodelResultingProcessRequest;\n sourceModelJson: JsonObject;\n modelPath: string | null;\n remoteLookup?: RemoteProcessLookupContext;\n}): Promise<{\n bundle: JsonObject;\n report: JsonObject;\n sourceModelSummary: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n resolved_process_summary: JsonObject;\n };\n}> {\n const root = lifecyclemodelRoot(options.sourceModelJson);\n const modelInfo = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const modelDataInfo = isRecord(modelInfo.dataSetInformation) ? modelInfo.dataSetInformation : {};\n const modelIdentity = modelIdentifier(options.sourceModelJson, options.request.source_model);\n const sourceModelNameInfo = normalizedNameInfo(modelDataInfo.name, modelIdentity.name);\n const processInstances = extractProcessInstances(options.sourceModelJson);\n const edges = extractEdges(options.sourceModelJson);\n const processResolution = await resolveProcessRecords(options.request, {\n sourceModelJson: options.sourceModelJson,\n remoteLookup: options.remoteLookup,\n });\n const referenceProcess = referenceToResultingProcess(options.sourceModelJson);\n const referenceProcessInstance = referenceProcessInstanceId(options.sourceModelJson);\n const signatureSeed = {\n source_model_id: modelIdentity.id,\n source_model_version: modelIdentity.version,\n projection_mode: options.request.projection.mode,\n process_instances: processInstances.map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n process_version: item.process_version,\n })),\n edges,\n };\n const projectionSignature = `sha256:${sha256Text(JSON.stringify(signatureSeed))}`;\n const primaryProcessId =\n options.request.projection.process_id ??\n referenceProcess.id ??\n `${modelIdentity.id}-resulting-process`;\n const primaryProcessVersion =\n options.request.projection.process_version ?? referenceProcess.version ?? modelIdentity.version;\n const notes = [\n 'This command materializes a deterministic resulting processDataSet by aggregating included process exchanges and cancelling internal linked flows.',\n 'Remote writes remain gated behind an explicit publish layer.',\n ];\n\n const primaryPayload = buildResultingProcessPayload({\n sourceModelId: modelIdentity.id,\n sourceModelVersion: modelIdentity.version,\n sourceModelName: modelIdentity.name,\n sourceModelNameInfo,\n processId: primaryProcessId,\n processVersion: primaryProcessVersion,\n role: 'primary',\n projectionSignature,\n processInstances,\n edges,\n processRecords: processResolution.records,\n referenceProcessInstanceId: referenceProcessInstance,\n metadataOverrides: options.request.projection.metadata_overrides,\n attachGraphSnapshotUri: options.request.projection.attach_graph_snapshot_uri,\n });\n\n if (options.request.projection.mode === 'all-subproducts') {\n const jsonTg = isRecord(root.json_tg) ? root.json_tg : {};\n const submodels = ensureList<JsonObject>(jsonTg.submodels).filter(isRecord);\n notes.push(\n submodels.length > 0\n ? 'Subproduct projection was requested, but this lifecycle model only carries submodel metadata and no submodel-specific topology slices; only the primary aggregated resulting process was emitted.'\n : 'Subproduct projection was requested, but the lifecycle model does not expose submodel topology metadata; only the primary aggregated resulting process was emitted.',\n );\n }\n\n const sourceModelSummary = {\n id: modelIdentity.id,\n version: modelIdentity.version,\n name: modelIdentity.name,\n json_ordered_path: options.modelPath,\n reference_to_resulting_process_id: referenceProcess.id,\n reference_to_resulting_process_version: referenceProcess.version,\n reference_process_instance_id: referenceProcessInstance,\n resolved_process_summary: processResolution.resolutionSummary,\n };\n\n const report = {\n generated_at: nowIso(),\n status:\n options.request.publish.intent === 'publish'\n ? 'projected_local_bundle'\n : 'prepared_local_bundle',\n source_model: sourceModelSummary,\n projection_mode: options.request.projection.mode,\n node_count: processInstances.length,\n edge_count: edges.length,\n reference_process_instance_id: referenceProcessInstance,\n process_instance_preview: processInstances.slice(0, 10).map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n label: item.label,\n })),\n edge_preview: edges.slice(0, 10),\n projection_signature: projectionSignature,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n resolved_process_summary: processResolution.resolutionSummary,\n projected_process_count: 1,\n notes,\n };\n\n const bundle = {\n source_model: sourceModelSummary,\n projected_processes: [\n {\n role: 'primary',\n id: primaryProcessId,\n version: primaryProcessVersion,\n name: modelIdentity.name,\n json_ordered: primaryPayload,\n metadata: primaryPayload.projectionMetadata,\n },\n ],\n relations: [\n {\n lifecyclemodel_id: modelIdentity.id,\n lifecyclemodel_version: modelIdentity.version,\n resulting_process_id: primaryProcessId,\n resulting_process_version: primaryProcessVersion,\n projection_role: 'primary',\n projection_signature: projectionSignature,\n is_primary: true,\n },\n ],\n report,\n projection: {\n mode: options.request.projection.mode,\n metadata_overrides: options.request.projection.metadata_overrides,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n },\n };\n\n return {\n bundle,\n report,\n sourceModelSummary,\n };\n}\n\nfunction defaultOutDir(requestPath: string, subject: string, now: Date = new Date()): string {\n const requestDir = path.dirname(path.resolve(requestPath));\n const runId = buildRunId({\n namespace: 'lifecyclemodel_resulting_process',\n subject,\n operation: 'build',\n now,\n });\n\n return resolveRunLayout(\n path.join(requestDir, 'artifacts'),\n 'lifecyclemodel_resulting_process',\n runId,\n ).runRoot;\n}\n\nexport async function runLifecyclemodelBuildResultingProcess(\n options: RunLifecyclemodelResultingProcessOptions,\n): Promise<LifecyclemodelResultingProcessReport> {\n const requestPath = path.resolve(options.inputPath);\n const input = readJsonInput(requestPath);\n const normalizedRequest = normalizeLifecyclemodelResultingProcessRequest(input, {\n requestPath,\n });\n const sourceModel = loadSourceModel(normalizedRequest);\n const modelIdentity = modelIdentifier(\n sourceModel.sourceModelJson,\n normalizedRequest.source_model,\n );\n const outDir = options.outDir\n ? path.resolve(options.outDir)\n : defaultOutDir(requestPath, modelIdentity.id, options.now);\n const projection = await buildProjectionBundle({\n request: normalizedRequest,\n sourceModelJson: sourceModel.sourceModelJson,\n modelPath: sourceModel.modelPath,\n remoteLookup: {\n env: options.env ?? process.env,\n fetchImpl: options.fetchImpl ?? (fetch as FetchLike),\n },\n });\n\n const files = {\n normalized_request: writeJsonArtifact(\n path.join(outDir, 'request.normalized.json'),\n normalizedRequest,\n ),\n source_model_normalized: writeJsonArtifact(\n path.join(outDir, 'source-model.normalized.json'),\n sourceModel.sourceModelJson,\n ),\n source_model_summary: writeJsonArtifact(\n path.join(outDir, 'source-model.summary.json'),\n projection.sourceModelSummary,\n ),\n projection_report: writeJsonArtifact(\n path.join(outDir, 'projection-report.json'),\n projection.report,\n ),\n process_projection_bundle: writeJsonArtifact(\n path.join(outDir, 'process-projection-bundle.json'),\n projection.bundle,\n ),\n };\n\n return {\n generated_at_utc: nowIso(options.now),\n request_path: requestPath,\n out_dir: outDir,\n status: String(projection.report.status),\n projected_process_count: 1,\n relation_count: 1,\n source_model: {\n id: projection.sourceModelSummary.id,\n version: projection.sourceModelSummary.version,\n name: projection.sourceModelSummary.name,\n json_ordered_path: projection.sourceModelSummary.json_ordered_path,\n reference_to_resulting_process_id:\n projection.sourceModelSummary.reference_to_resulting_process_id,\n reference_to_resulting_process_version:\n projection.sourceModelSummary.reference_to_resulting_process_version,\n reference_process_instance_id: projection.sourceModelSummary.reference_process_instance_id,\n },\n files,\n };\n}\n\n// Exposed for deterministic unit coverage of internal lifecyclemodel fallback logic.\nexport const __testInternals = {\n uniqueStrings,\n toFiniteNumber,\n normalizeNumericOutput,\n toBoolean,\n resolveNameField,\n normalizedNameInfo,\n modelIdentifier,\n extractProcessInstances,\n extractEdges,\n processReferencePairs,\n parseProcessRecord,\n autoDetectProcessCatalogPath,\n autoDetectProcessJsonDirs,\n processSourceDirs,\n locateLocalProcessFile,\n loadSourceModel,\n referenceToResultingProcess,\n referenceProcessInstanceId,\n chooseReferenceInstance,\n cloneExchangeWithAmount,\n buildResultingProcessPayload,\n buildProjectionBundle,\n defaultOutDir,\n};\n"]}
@@ -28,6 +28,7 @@ export type SyncStateAwareProcessRecordOptions = {
28
28
  timeoutMs?: number;
29
29
  audit?: JsonObject;
30
30
  modelId?: string | null;
31
+ modelVersion?: string | null;
31
32
  targetUserId?: string | null;
32
33
  };
33
34
  declare function buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string;
@@ -146,6 +146,7 @@ async function saveDraft(options) {
146
146
  p_version: options.version,
147
147
  p_json_ordered: options.payload,
148
148
  p_model_id: options.modelId ?? null,
149
+ p_model_version: options.modelVersion ?? null,
149
150
  p_audit: options.audit ?? null,
150
151
  },
151
152
  timeoutMs: options.timeoutMs,
@@ -194,6 +195,12 @@ export async function syncStateAwareProcessRecord(options) {
194
195
  env: options.env,
195
196
  fetchImpl: options.fetchImpl,
196
197
  timeoutMs,
198
+ extraData: options.modelId !== undefined || options.modelVersion !== undefined
199
+ ? {
200
+ modelId: options.modelId ?? null,
201
+ modelVersion: options.modelVersion ?? null,
202
+ }
203
+ : undefined,
197
204
  });
198
205
  }
199
206
  return {
@@ -211,6 +218,7 @@ export async function syncStateAwareProcessRecord(options) {
211
218
  fetchImpl: options.fetchImpl,
212
219
  audit: options.audit,
213
220
  modelId: options.modelId,
221
+ modelVersion: options.modelVersion,
214
222
  }),
215
223
  visible_row: draftRow,
216
224
  };