@tiangong-lca/cli 0.1.6 → 0.1.7
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.
- package/README.md +3 -13
- package/dist/src/cli.js +20 -36
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/auth-identity-receipt.d.ts +1 -2
- package/dist/src/lib/auth-identity-receipt.js +3 -20
- package/dist/src/lib/auth-identity-receipt.js.map +1 -1
- package/dist/src/lib/credential-safety.d.ts +7 -0
- package/dist/src/lib/credential-safety.js +28 -0
- package/dist/src/lib/credential-safety.js.map +1 -0
- package/dist/src/lib/dataset-save-draft-run.js +3 -1
- package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
- package/dist/src/lib/env.d.ts +0 -2
- package/dist/src/lib/env.js +11 -19
- package/dist/src/lib/env.js.map +1 -1
- package/dist/src/lib/flow-publish-reviewed-data.js +1 -1
- package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-resulting-process.js +2 -6
- package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +1 -1
- package/dist/src/lib/process-refresh-references.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +1 -1
- package/dist/src/lib/process-scope-statistics.js.map +1 -1
- package/dist/src/lib/supabase-client.d.ts +1 -3
- package/dist/src/lib/supabase-client.js +5 -15
- package/dist/src/lib/supabase-client.js.map +1 -1
- package/dist/src/lib/supabase-session.d.ts +5 -14
- package/dist/src/lib/supabase-session.js +34 -113
- package/dist/src/lib/supabase-session.js.map +1 -1
- package/package.json +1 -2
- package/dist/src/lib/user-api-key.d.ts +0 -16
- package/dist/src/lib/user-api-key.js +0 -75
- package/dist/src/lib/user-api-key.js.map +0 -1
|
@@ -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 ![\n env.TIANGONG_LCA_OAUTH_CLIENT_ID,\n env.TIANGONG_LCA_ACCESS_TOKEN,\n env.TIANGONG_LCA_API_KEY,\n ].some((value) => typeof value === 'string' && value.trim())\n ) {\n missing.push(\n 'TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN or TIANGONG_LCA_API_KEY',\n );\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 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"]}
|
|
@@ -8,7 +8,7 @@ import { validateProcessPayload, } from './process-payload-validation.js';
|
|
|
8
8
|
import { deriveSupabaseProjectBaseUrl, deriveSupabaseRestBaseUrl, requireSupabaseRestRuntime, } from './supabase-client.js';
|
|
9
9
|
import { applyDataApiProfileHeaders, buildDataApiUrl, resolveDataApiCapability, } from './supabase-data-api-contract.js';
|
|
10
10
|
import { resolveSupabaseUserSession } from './supabase-session.js';
|
|
11
|
-
import { redactEmail } from './
|
|
11
|
+
import { redactEmail } from './credential-safety.js';
|
|
12
12
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
13
13
|
const DEFAULT_MAX_RETRIES = 3;
|
|
14
14
|
const DEFAULT_PAGE_SIZE = 500;
|