@tiangong-lca/cli 0.0.6 → 0.0.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 +73 -30
- package/dist/src/cli.js +912 -113
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-local.js +231 -0
- package/dist/src/lib/dataset-local.js.map +1 -0
- package/dist/src/lib/dataset-references-rewrite.js +214 -0
- package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
- package/dist/src/lib/dataset-validate.js +191 -0
- package/dist/src/lib/dataset-validate.js.map +1 -0
- package/dist/src/lib/flow-regen-product.js +2 -10
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js +4 -8
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
- package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-graph.js +248 -0
- package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/process-auto-build.js +11 -8
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-batch-build.js +6 -3
- package/dist/src/lib/process-batch-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +870 -0
- package/dist/src/lib/process-dedup-review.js.map +1 -0
- package/dist/src/lib/process-payload-validation.js +50 -0
- package/dist/src/lib/process-payload-validation.js.map +1 -0
- package/dist/src/lib/process-publish-build.js +4 -6
- package/dist/src/lib/process-publish-build.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +1028 -0
- package/dist/src/lib/process-refresh-references.js.map +1 -0
- package/dist/src/lib/process-resume-build.js +4 -6
- package/dist/src/lib/process-resume-build.js.map +1 -1
- package/dist/src/lib/process-save-draft-run.js +31 -12
- package/dist/src/lib/process-save-draft-run.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +859 -0
- package/dist/src/lib/process-scope-statistics.js.map +1 -0
- package/dist/src/lib/process-verify-rows.js +250 -0
- package/dist/src/lib/process-verify-rows.js.map +1 -0
- package/dist/src/lib/publish.js +1 -1
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/remote.js +4 -4
- package/dist/src/lib/remote.js.map +1 -1
- package/dist/src/lib/review-lifecyclemodel.js +2 -2
- package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/tidas-sdk-validation.js +96 -0
- package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
- package/dist/src/lib/user-api-key.js +1 -1
- package/dist/src/lib/user-api-key.js.map +1 -1
- package/package.json +4 -4
- /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
- /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecyclemodel-auto-build.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-auto-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { readJsonInput } from './io.js';\nimport {\n buildRunId,\n buildRunManifest,\n ensureRunLayout,\n writeLatestRunId,\n type RunLayout,\n} from './run.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst UUID_NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nconst EPSILON = 1e-10;\n\nconst DEFAULT_MANIFEST = {\n run_label: 'lifecyclemodel-automated-builder',\n allow_remote_write: false,\n discovery: {\n sources: [\n { kind: 'account_processes', selector: 'all-accessible' },\n {\n kind: 'public_open_data',\n table: 'processes',\n filters: { state_code: 100 },\n },\n ],\n supporting_open_tables: ['flows', 'sources', 'lifecyclemodels'],\n batch_limit: 200,\n reference_model_queries: [],\n reference_model_select_limit: 3,\n },\n selection: {\n mode: 'graph_first_local_build',\n max_models: 25,\n max_processes_per_model: 12,\n decision_factors: [\n 'shared product system or classification lineage',\n 'explicit exchange connectivity',\n 'quantitative reference completeness',\n 'geography and time coherence',\n ],\n },\n reuse: {\n reusable_process_dirs: [],\n include_reference_model_resulting_processes: true,\n },\n output: {\n write_local_models: true,\n emit_validation_report: false,\n },\n local_runs: [],\n publish: {\n enabled: false,\n mode: 'deferred_to_publish_build',\n target_runs: [],\n select_after_insert: true,\n max_attempts: 5,\n retry_delay_seconds: 2,\n },\n} as const;\n\ntype LifecyclemodelAutoBuildStatus = 'completed_local_lifecyclemodel_auto_build_run';\n\nexport type LifecyclemodelAutoBuildLayout = RunLayout & {\n requestDir: string;\n selectionDir: string;\n discoveryDir: string;\n modelsDir: string;\n requestSnapshotPath: string;\n normalizedRequestPath: string;\n runPlanPath: string;\n resolvedManifestPath: string;\n selectionBriefPath: string;\n referenceModelSummaryPath: string;\n invocationIndexPath: string;\n runManifestPath: string;\n reportPath: string;\n};\n\nexport type NormalizedLifecyclemodelAutoBuildRequest = {\n schema_version: 1;\n request_path: string;\n run_id: string;\n run_root: string;\n manifest: JsonRecord;\n local_runs: string[];\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonRecord;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: 'Input' | 'Output';\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n nameEn: string;\n nameZh: string;\n routeEn: string;\n mixEn: string;\n geographyCode: string;\n classificationPath: string[];\n tokenSet: Set<string>;\n sourceKind: 'local_run_export';\n sourceLabel: string;\n includedProcessRefCount: number;\n};\n\ntype Edge = {\n src: string;\n dst: string;\n flowUuid: string;\n downstreamInputAmount: number;\n confidence: number;\n reasons: string[];\n};\n\nexport type LifecyclemodelAutoBuildLocalReport = {\n run_dir: string;\n run_name: string;\n model_file: string;\n summary_file: string;\n connections_file: string;\n process_catalog_file: string;\n summary: JsonRecord;\n};\n\nexport type LifecyclemodelAutoBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: LifecyclemodelAutoBuildStatus;\n request_path: string;\n run_id: string;\n run_root: string;\n local_run_count: number;\n built_model_count: number;\n files: {\n request_snapshot: string;\n normalized_request: string;\n run_plan: string;\n resolved_manifest: string;\n selection_brief: string;\n reference_model_summary: string;\n invocation_index: string;\n run_manifest: string;\n report: string;\n };\n local_build_reports: LifecyclemodelAutoBuildLocalReport[];\n next_actions: string[];\n};\n\nexport type RunLifecyclemodelAutoBuildOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n cwd?: string;\n inputValue?: unknown;\n runIdOverride?: string;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return Boolean(value && typeof value === 'object' && !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 if (value === undefined) {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction nonEmptyString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const normalized = value.trim();\n return normalized || null;\n}\n\nfunction numberOrZero(value: unknown): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : 0;\n }\n\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n return 0;\n}\n\nfunction firstText(value: unknown): string {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isRecord(item)) {\n const text = nonEmptyString(item['#text']);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n }\n\n if (isRecord(value)) {\n return nonEmptyString(value['#text']) ?? '';\n }\n\n return nonEmptyString(value) ?? '';\n}\n\nfunction langTextMap(value: unknown): Record<string, string> {\n const mapping: Record<string, string> = {};\n\n for (const item of ensureList(value)) {\n if (!isRecord(item)) {\n continue;\n }\n\n const lang = nonEmptyString(item['@xml:lang'])?.toLowerCase() ?? 'en';\n const text = nonEmptyString(item['#text']);\n if (text && !mapping[lang]) {\n mapping[lang] = text;\n }\n }\n\n if (Object.keys(mapping).length > 0) {\n return mapping;\n }\n\n const text = firstText(value).trim();\n return text ? { en: text } : {};\n}\n\nfunction localizedText(value: unknown, preferred = 'zh'): string {\n const mapping = langTextMap(value);\n if (mapping[preferred]) {\n return mapping[preferred];\n }\n\n if (preferred.startsWith('zh')) {\n for (const candidate of ['zh-cn', 'zh-hans', 'zh']) {\n if (mapping[candidate]) {\n return mapping[candidate];\n }\n }\n }\n\n if (mapping.en) {\n return mapping.en;\n }\n\n return Object.values(mapping)[0] ?? '';\n}\n\nfunction multilangText(value: unknown): [string, string] {\n const mapping = langTextMap(value);\n return [mapping.en ?? Object.values(mapping)[0] ?? '', mapping.zh ?? mapping['zh-cn'] ?? ''];\n}\n\nfunction multilangFromText(enText: string, zhText?: string): Array<Record<string, string>> {\n const items: Array<Record<string, string>> = [];\n if (enText) {\n items.push({ '@xml:lang': 'en', '#text': enText });\n }\n if (zhText) {\n items.push({ '@xml:lang': 'zh', '#text': zhText });\n }\n return items;\n}\n\nfunction tokenizeText(value: string): Set<string> {\n const cleaned = value\n .toLowerCase()\n .replace(/[^a-z0-9]+/gu, ' ')\n .trim();\n\n return new Set(cleaned.split(/\\s+/u).filter((token) => token.length >= 3));\n}\n\nfunction buildNameSummary(nameInfo: JsonRecord): Array<Record<string, string>> {\n const base = langTextMap(nameInfo.baseName);\n const route = langTextMap(nameInfo.treatmentStandardsRoutes);\n const mix = langTextMap(nameInfo.mixAndLocationTypes);\n const functional = langTextMap(nameInfo.functionalUnitFlowProperties);\n const langOrder: string[] = [];\n\n [base, route, mix, functional].forEach((mapping) => {\n Object.keys(mapping).forEach((lang) => {\n if (!langOrder.includes(lang)) {\n langOrder.push(lang);\n }\n });\n });\n\n if (langOrder.length === 0) {\n return [];\n }\n\n const fallback = (mapping: Record<string, string>, lang: string): string =>\n mapping[lang] ??\n mapping.zh ??\n mapping['zh-cn'] ??\n mapping.en ??\n Object.values(mapping)[0] ??\n '';\n\n const summary: Array<Record<string, string>> = [];\n\n langOrder.forEach((lang) => {\n const text = [\n fallback(base, lang),\n fallback(route, lang),\n fallback(mix, lang),\n fallback(functional, lang),\n ]\n .filter(Boolean)\n .join('; ')\n .trim();\n\n if (text) {\n summary.push({ '@xml:lang': lang, '#text': text });\n }\n });\n\n return summary;\n}\n\nfunction extractClassificationPath(classificationInfo: unknown): string[] {\n const carrier = isRecord(classificationInfo)\n ? isRecord(classificationInfo['common:classification'])\n ? classificationInfo['common:classification']\n : {}\n : {};\n\n return ensureList(carrier['common:class'])\n .map((item) => (isRecord(item) ? nonEmptyString(item['#text']) : null))\n .filter((item): item is string => Boolean(item));\n}\n\nfunction classificationOverlap(left: string[], right: string[]): number {\n let overlap = 0;\n const maxLength = Math.min(left.length, right.length);\n\n for (let index = 0; index < maxLength; index += 1) {\n if (left[index] !== right[index]) {\n break;\n }\n overlap += 1;\n }\n\n return overlap;\n}\n\nfunction parseUuidBytes(uuid: string): Uint8Array {\n const hex = uuid.replace(/-/gu, '').toLowerCase();\n if (!/^[0-9a-f]{32}$/u.test(hex)) {\n throw new CliError(`Invalid UUID value: ${uuid}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_UUID_INVALID',\n exitCode: 2,\n });\n }\n\n const bytes = new Uint8Array(16);\n for (let index = 0; index < 16; index += 1) {\n bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToUuid(bytes: Uint8Array): string {\n const hex = Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction uuid5FromText(namespaceUuid: string, value: string): string {\n const namespaceBytes = Buffer.from(parseUuidBytes(namespaceUuid));\n const hash = createHash('sha1').update(namespaceBytes).update(value, 'utf8').digest();\n const bytes = Uint8Array.from(hash.subarray(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n return bytesToUuid(bytes);\n}\n\nfunction formatNumber(value: number): string {\n if (!Number.isFinite(value) || Math.abs(value) < EPSILON) {\n return '0';\n }\n\n const normalized = Number.parseFloat(value.toPrecision(15));\n if (Number.isInteger(normalized)) {\n return String(normalized);\n }\n\n if (Math.abs(normalized) >= 1e6 || Math.abs(normalized) < 1e-6) {\n return normalized.toFixed(12).replace(/0+$/u, '').replace(/\\.$/u, '');\n }\n\n return String(normalized);\n}\n\nfunction toJsonNumber(value: number): number {\n return Number.parseFloat(formatNumber(value));\n}\n\nfunction requiredRequestObject(input: unknown): JsonRecord {\n if (!isRecord(input)) {\n throw new CliError('lifecyclemodel auto-build request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n return input;\n}\n\nfunction deepMerge(base: unknown, override: unknown): unknown {\n if (isRecord(base) && isRecord(override)) {\n const merged: JsonRecord = copyJson(base);\n Object.entries(override).forEach(([key, value]) => {\n merged[key] = deepMerge(merged[key], value);\n });\n return merged;\n }\n\n return copyJson(override);\n}\n\nfunction normalizeLocalRuns(value: unknown, requestDir: string): string[] {\n const seen = new Set<string>();\n const normalized = ensureList(value)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item))\n .map((item) => path.resolve(requestDir, item));\n\n if (normalized.length === 0) {\n throw new CliError(\n 'lifecyclemodel auto-build local_runs must contain at least one run directory.',\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_LOCAL_RUNS_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n normalized.forEach((item) => {\n if (seen.has(item)) {\n throw new CliError(`Duplicate lifecyclemodel auto-build local_run: ${item}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_LOCAL_RUN_DUPLICATE',\n exitCode: 2,\n });\n }\n seen.add(item);\n });\n\n return normalized;\n}\n\nfunction resolveRunRoot(\n requestDir: string,\n runId: string,\n outDirOverride: string | null | undefined,\n requestOutDir: unknown,\n): string {\n const override = nonEmptyString(outDirOverride);\n if (override) {\n return path.resolve(requestDir, override);\n }\n\n const requestValue = nonEmptyString(requestOutDir);\n if (requestValue) {\n return path.resolve(requestDir, requestValue);\n }\n\n return path.join(requestDir, 'artifacts', 'lifecyclemodel_auto_build', runId);\n}\n\nfunction buildLayout(runRoot: string, runId: string): LifecyclemodelAutoBuildLayout {\n const collectionDir = path.dirname(runRoot);\n const layout: RunLayout = {\n namespace: 'lifecyclemodel_auto_build',\n runId,\n artifactsRoot: path.dirname(collectionDir),\n collectionDir,\n runRoot,\n cacheDir: path.join(runRoot, 'cache'),\n inputsDir: path.join(runRoot, 'request'),\n outputsDir: path.join(runRoot, 'models'),\n reportsDir: path.join(runRoot, 'reports'),\n logsDir: path.join(runRoot, 'logs'),\n manifestsDir: path.join(runRoot, 'manifests'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n };\n\n return {\n ...layout,\n requestDir: path.join(runRoot, 'request'),\n selectionDir: path.join(runRoot, 'selection'),\n discoveryDir: path.join(runRoot, 'discovery'),\n modelsDir: path.join(runRoot, 'models'),\n requestSnapshotPath: path.join(runRoot, 'request', 'lifecyclemodel-auto-build.request.json'),\n normalizedRequestPath: path.join(runRoot, 'request', 'request.normalized.json'),\n runPlanPath: path.join(runRoot, 'run-plan.json'),\n resolvedManifestPath: path.join(runRoot, 'resolved-manifest.json'),\n selectionBriefPath: path.join(runRoot, 'selection', 'selection-brief.md'),\n referenceModelSummaryPath: path.join(runRoot, 'discovery', 'reference-model-summary.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n reportPath: path.join(runRoot, 'reports', 'lifecyclemodel-auto-build-report.json'),\n };\n}\n\nfunction ensureEmptyRunRoot(runRoot: string): void {\n if (!existsSync(runRoot)) {\n return;\n }\n\n if (readdirSync(runRoot).length > 0) {\n throw new CliError(\n `lifecyclemodel auto-build run root already exists and is not empty: ${runRoot}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_RUN_EXISTS',\n exitCode: 2,\n },\n );\n }\n}\n\nfunction ensureLayout(layout: LifecyclemodelAutoBuildLayout): void {\n ensureRunLayout(layout);\n [layout.requestDir, layout.selectionDir, layout.discoveryDir, layout.modelsDir].forEach(\n (dirPath) => {\n mkdirSync(dirPath, { recursive: true });\n },\n );\n}\n\nexport function normalizeLifecyclemodelAutoBuildRequest(\n input: unknown,\n options: {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n runIdOverride?: string;\n },\n): NormalizedLifecyclemodelAutoBuildRequest {\n const request = requiredRequestObject(input);\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const mergedManifest = deepMerge(DEFAULT_MANIFEST, request) as JsonRecord;\n\n if (mergedManifest.allow_remote_write === true) {\n throw new CliError(\n 'allow_remote_write=true is not supported by tiangong lifecyclemodel auto-build. Keep the run read-only.',\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REMOTE_WRITE_UNSUPPORTED',\n exitCode: 2,\n },\n );\n }\n\n const now = options.now ?? new Date();\n const runId =\n nonEmptyString(options.runIdOverride) ??\n buildRunId({\n namespace: 'lifecyclemodel_auto_build',\n subject:\n nonEmptyString(mergedManifest.run_label) ??\n path.basename(requestPath, path.extname(requestPath)),\n operation: 'build',\n now,\n });\n\n return {\n schema_version: 1,\n request_path: requestPath,\n run_id: runId,\n run_root: resolveRunRoot(requestDir, runId, options.outDir, request.out_dir),\n manifest: mergedManifest,\n local_runs: normalizeLocalRuns(mergedManifest.local_runs, requestDir),\n };\n}\n\nfunction buildSelectionBrief(manifest: JsonRecord): string {\n const selection = isRecord(manifest.selection) ? manifest.selection : {};\n const decisionFactors = ensureList(selection.decision_factors)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item));\n const referenceQueries = isRecord(manifest.discovery)\n ? ensureList(manifest.discovery.reference_model_queries)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item))\n : [];\n\n const lines = [\n '# Selection Brief',\n '',\n 'This CLI slice is local-first and read-only.',\n '',\n 'Candidate processes are grouped by the provided process run directories.',\n 'The CLI then infers graph structure from shared flow UUIDs, chooses one reference process, and assembles native `json_ordered` lifecyclemodel artifacts.',\n '',\n 'Decision factors:',\n ...decisionFactors.map((item) => `- ${item}`),\n ];\n\n if (referenceQueries.length > 0) {\n lines.push(\n '',\n 'Reference lifecyclemodel discovery was requested in the manifest, but this first CLI slice defers remote read-only discovery to future commands.',\n ...referenceQueries.map((item) => `- deferred reference query: ${item}`),\n );\n }\n\n lines.push(\n '',\n 'Explicitly deferred in this slice:',\n '- remote discovery',\n '- MCP writes',\n '- LLM-driven selection',\n '- validate-build',\n '- publish-build',\n '',\n );\n\n return lines.join('\\n');\n}\n\nfunction buildReferenceModelSummary(manifest: JsonRecord): JsonRecord {\n const discovery = isRecord(manifest.discovery) ? manifest.discovery : {};\n const queries = ensureList(discovery.reference_model_queries)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item));\n\n return {\n executed: false,\n queries,\n reason:\n queries.length > 0\n ? 'reference model discovery is deferred in the first native CLI auto-build slice'\n : 'reference model discovery not requested',\n };\n}\n\nfunction buildInvocationIndex(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n options: RunLifecyclemodelAutoBuildOptions,\n layout: LifecyclemodelAutoBuildLayout,\n now: Date,\n): JsonRecord {\n const command = ['lifecyclemodel', 'auto-build', '--input', options.inputPath];\n if (options.outDir) {\n command.push('--out-dir', options.outDir);\n }\n\n return {\n schema_version: 1,\n invocations: [\n {\n command,\n cwd: options.cwd ?? process.cwd(),\n created_at: now.toISOString(),\n request_path: normalized.request_path,\n report_path: layout.reportPath,\n },\n ],\n };\n}\n\nfunction buildPlan(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n now: Date,\n): JsonRecord {\n return {\n skill: 'lifecyclemodel-automated-builder',\n mode: 'read_only_local_build',\n created_at: now.toISOString(),\n manifest: normalized.manifest,\n runtime: {\n cli: {\n command: 'lifecyclemodel auto-build',\n entry: 'native_ts',\n node_version: process.version,\n remote_write: false,\n mcp_used: false,\n },\n },\n guardrails: [\n 'do not write remote lifecyclemodel rows in auto-build',\n 'do not require MCP or LLM to assemble the initial local lifecyclemodel graph',\n 'emit native json_ordered only',\n 'defer validate-build and publish-build to dedicated follow-up commands',\n ],\n artifacts: {\n root: layout.runRoot,\n run_plan: layout.runPlanPath,\n resolved_manifest: layout.resolvedManifestPath,\n selection_brief: layout.selectionBriefPath,\n discovery_dir: layout.discoveryDir,\n reference_model_summary: layout.referenceModelSummaryPath,\n models_dir: layout.modelsDir,\n reports_dir: layout.reportsDir,\n },\n stages: [\n {\n name: 'load-local-runs',\n mode: 'local',\n description: 'Load one or more process-automated-builder run directories.',\n },\n {\n name: 'infer-graph',\n mode: 'local',\n description: 'Infer process-to-process links from shared flow UUIDs.',\n },\n {\n name: 'select-reference-process',\n mode: 'local',\n description:\n 'Pick the lifecyclemodel reference process from the target flow and graph shape.',\n },\n {\n name: 'assemble-lifecyclemodel',\n mode: 'local',\n description: 'Write native json_ordered lifecyclemodel artifacts.',\n },\n {\n name: 'validate',\n mode: 'deferred',\n description: 'Deferred to tiangong lifecyclemodel validate-build.',\n },\n {\n name: 'publish',\n mode: 'deferred',\n description: 'Deferred to tiangong lifecyclemodel publish-build.',\n },\n ],\n local_runs: normalized.local_runs,\n };\n}\n\nfunction extractFlowDatasetFromState(state: JsonRecord): JsonRecord {\n const flowDataset = isRecord(state.flow_dataset) ? state.flow_dataset : {};\n if (isRecord(flowDataset.flowDataSet)) {\n return flowDataset.flowDataSet;\n }\n\n return flowDataset;\n}\n\nfunction buildGlobalReference(\n refObjectId: string,\n version: string,\n shortDescription: unknown,\n datasetType: string,\n uri: string,\n): JsonRecord {\n return {\n '@refObjectId': refObjectId,\n '@type': datasetType,\n '@uri': uri,\n '@version': version,\n 'common:shortDescription': copyJson(shortDescription),\n };\n}\n\nfunction resolvePublicationBlock(dataset: JsonRecord): JsonRecord {\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n\n if (isRecord(administrativeInformation.publicationAndOwnership)) {\n return administrativeInformation.publicationAndOwnership;\n }\n\n if (isRecord(administrativeInformation['common:publicationAndOwnership'])) {\n return administrativeInformation['common:publicationAndOwnership'];\n }\n\n return {};\n}\n\nfunction loadProcessRecord(\n filePath: string,\n sourceKind: 'local_run_export',\n sourceLabel: string,\n): ProcessRecord {\n const raw = readJsonInput(filePath);\n if (!isRecord(raw) || !isRecord(raw.processDataSet)) {\n throw new CliError(\n `lifecyclemodel auto-build process file must contain processDataSet: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_INVALID',\n exitCode: 2,\n },\n );\n }\n\n const dataset = raw.processDataSet;\n const processInformation = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const nameInfo = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const geography = isRecord(processInformation.geography) ? processInformation.geography : {};\n const location = isRecord(geography.locationOfOperationSupplyOrProduction)\n ? geography.locationOfOperationSupplyOrProduction\n : {};\n const technology = isRecord(processInformation.technology) ? processInformation.technology : {};\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? processInformation.quantitativeReference\n : {};\n const referenceExchangeInternalId = nonEmptyString(\n quantitativeReference.referenceToReferenceFlow,\n );\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `lifecyclemodel auto-build process is missing referenceToReferenceFlow: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REFERENCE_FLOW_MISSING',\n exitCode: 2,\n },\n );\n }\n\n const exchangesCarrier = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonRecord>(exchangesCarrier.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => nonEmptyString(item['@dataSetInternalID']) === referenceExchangeInternalId,\n );\n if (!referenceExchange) {\n throw new CliError(\n `lifecyclemodel auto-build reference exchange ${referenceExchangeInternalId} not found: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_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 = nonEmptyString(flowRef['@refObjectId']);\n if (!flowUuid) {\n return;\n }\n\n const amount = numberOrZero(exchange.meanAmount ?? exchange.resultingAmount);\n const direction = nonEmptyString(exchange.exchangeDirection);\n if (direction === 'Input') {\n inputAmounts[flowUuid] = amount;\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = amount;\n }\n });\n\n const processUuid = nonEmptyString(dataSetInformation['common:UUID']);\n if (!processUuid) {\n throw new CliError(`lifecyclemodel auto-build process is missing common:UUID: ${filePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_UUID_MISSING',\n exitCode: 2,\n });\n }\n\n const publication = resolvePublicationBlock(dataset);\n const version = nonEmptyString(publication['common:dataSetVersion']) ?? '00.00.001';\n const referenceFlowRef = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n const referenceFlowUuid = nonEmptyString(referenceFlowRef['@refObjectId']);\n const referenceDirection = nonEmptyString(referenceExchange.exchangeDirection);\n if (!referenceFlowUuid || (referenceDirection !== 'Input' && referenceDirection !== 'Output')) {\n throw new CliError(`lifecyclemodel auto-build reference exchange is incomplete: ${filePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REFERENCE_EXCHANGE_INVALID',\n exitCode: 2,\n });\n }\n\n const includedProcessRefs = ensureList(technology.referenceToIncludedProcesses).filter(isRecord);\n const [nameEn, nameZh] = multilangText(nameInfo.baseName);\n const [routeEn] = multilangText(nameInfo.treatmentStandardsRoutes);\n const [mixEn] = multilangText(nameInfo.mixAndLocationTypes);\n const classificationPath = extractClassificationPath(\n dataSetInformation.classificationInformation,\n );\n\n return {\n processUuid,\n version,\n raw,\n referenceExchangeInternalId,\n referenceFlowUuid,\n referenceDirection,\n referenceAmount: numberOrZero(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n ),\n inputAmounts,\n outputAmounts,\n nameEn,\n nameZh,\n routeEn,\n mixEn,\n geographyCode: nonEmptyString(location['@location']) ?? '',\n classificationPath,\n tokenSet: tokenizeText(\n [nameEn, routeEn, mixEn, classificationPath.join(' ')].filter(Boolean).join(' '),\n ),\n sourceKind,\n sourceLabel,\n includedProcessRefCount: includedProcessRefs.length,\n };\n}\n\nfunction scoreEdgeCandidate(\n src: ProcessRecord,\n dst: ProcessRecord,\n flowUuid: string,\n downstreamAmount: number,\n): { confidence: number; reasons: string[] } {\n let score = 10;\n const reasons = ['shared flow UUID'];\n\n if (src.referenceFlowUuid === flowUuid && src.referenceDirection === 'Output') {\n score += 3;\n reasons.push('upstream reference flow matches shared flow');\n }\n\n if (dst.referenceFlowUuid === flowUuid && dst.referenceDirection === 'Input') {\n score += 3;\n reasons.push('downstream reference flow matches shared flow');\n }\n\n const classOverlap = classificationOverlap(src.classificationPath, dst.classificationPath);\n if (classOverlap > 0) {\n score += Math.min(classOverlap, 3);\n reasons.push(`classification prefix overlap=${classOverlap}`);\n }\n\n if (src.geographyCode && dst.geographyCode && src.geographyCode === dst.geographyCode) {\n score += 1;\n reasons.push(`same geography=${src.geographyCode}`);\n }\n\n const tokenOverlap = [...src.tokenSet].filter((token) => dst.tokenSet.has(token)).length;\n if (tokenOverlap > 0) {\n score += Math.min(tokenOverlap, 4) / 4;\n reasons.push(`token overlap=${tokenOverlap}`);\n }\n\n const upstreamAmount = src.outputAmounts[flowUuid] ?? 0;\n if (upstreamAmount > 0 && downstreamAmount > 0) {\n const ratio = downstreamAmount / upstreamAmount;\n if (ratio >= 0.5 && ratio <= 2) {\n score += 1;\n reasons.push(`amount ratio plausible=${formatNumber(ratio)}`);\n }\n }\n\n return { confidence: score, reasons };\n}\n\nfunction inferEdges(processMap: Record<string, ProcessRecord>): Edge[] {\n const byFlow = new Map<string, { producers: Set<string>; consumers: Set<string> }>();\n\n Object.entries(processMap).forEach(([processId, record]) => {\n Object.keys(record.outputAmounts).forEach((flowUuid) => {\n const group = byFlow.get(flowUuid) ?? {\n producers: new Set<string>(),\n consumers: new Set<string>(),\n };\n group.producers.add(processId);\n byFlow.set(flowUuid, group);\n });\n\n Object.keys(record.inputAmounts).forEach((flowUuid) => {\n const group = byFlow.get(flowUuid) ?? {\n producers: new Set<string>(),\n consumers: new Set<string>(),\n };\n group.consumers.add(processId);\n byFlow.set(flowUuid, group);\n });\n });\n\n const edgeMap = new Map<string, Edge>();\n\n byFlow.forEach((participants, flowUuid) => {\n if (participants.producers.size === 0 || participants.consumers.size === 0) {\n return;\n }\n\n const passThrough = [...participants.producers].filter((item) =>\n participants.consumers.has(item),\n );\n const candidatePairs: Array<[string, string]> = [];\n\n if (passThrough.length > 0) {\n [...participants.producers]\n .filter((item) => !passThrough.includes(item))\n .forEach((producer) => {\n passThrough.forEach((bridge) => {\n candidatePairs.push([producer, bridge]);\n });\n });\n\n passThrough.forEach((bridge) => {\n [...participants.consumers]\n .filter((item) => !passThrough.includes(item))\n .forEach((consumer) => {\n candidatePairs.push([bridge, consumer]);\n });\n });\n } else {\n participants.producers.forEach((producer) => {\n participants.consumers.forEach((consumer) => {\n candidatePairs.push([producer, consumer]);\n });\n });\n }\n\n candidatePairs.forEach(([src, dst]) => {\n const downstreamAmount = processMap[dst]?.inputAmounts[flowUuid];\n const scored = scoreEdgeCandidate(\n processMap[src] as ProcessRecord,\n processMap[dst] as ProcessRecord,\n flowUuid,\n downstreamAmount as number,\n );\n edgeMap.set(`${src}::${dst}::${flowUuid}`, {\n src,\n dst,\n flowUuid,\n downstreamInputAmount: downstreamAmount,\n confidence: scored.confidence,\n reasons: scored.reasons,\n });\n });\n });\n\n const grouped = new Map<string, Edge[]>();\n [...edgeMap.values()].forEach((edge) => {\n const key = `${edge.dst}::${edge.flowUuid}`;\n const bucket = grouped.get(key) ?? [];\n bucket.push(edge);\n grouped.set(key, bucket);\n });\n\n const filtered: Edge[] = [];\n grouped.forEach((group) => {\n const ordered = [...group].sort(\n (left, right) => right.confidence - left.confidence || left.src.localeCompare(right.src),\n );\n\n if (\n ordered.length >= 2 &&\n ordered[0] &&\n ordered[1] &&\n ordered[0].confidence - ordered[1].confidence >= 2\n ) {\n filtered.push(ordered[0]);\n return;\n }\n\n filtered.push(...ordered);\n });\n\n return filtered.sort(\n (left, right) =>\n right.confidence - left.confidence ||\n left.flowUuid.localeCompare(right.flowUuid) ||\n left.src.localeCompare(right.src) ||\n left.dst.localeCompare(right.dst),\n );\n}\n\nfunction chooseReferenceProcess(\n processMap: Record<string, ProcessRecord>,\n edges: Edge[],\n state: JsonRecord,\n preferredProcessIds: Set<string>,\n): string {\n const flowSummary = isRecord(state.flow_summary) ? state.flow_summary : {};\n const targetFlowUuid = nonEmptyString(flowSummary.uuid) ?? '';\n const indegree = new Map<string, number>();\n const outdegree = new Map<string, number>();\n\n edges.forEach((edge) => {\n indegree.set(edge.dst, (indegree.get(edge.dst) ?? 0) + 1);\n outdegree.set(edge.src, (outdegree.get(edge.src) ?? 0) + 1);\n });\n\n let candidates = Object.entries(processMap)\n .filter(\n ([processId, record]) =>\n preferredProcessIds.has(processId) &&\n record.referenceFlowUuid === targetFlowUuid &&\n record.referenceDirection === 'Output',\n )\n .map(([processId]) => processId);\n\n if (candidates.length === 0 && targetFlowUuid) {\n candidates = Object.entries(processMap)\n .filter(\n ([processId, record]) =>\n preferredProcessIds.has(processId) && targetFlowUuid in record.outputAmounts,\n )\n .map(([processId]) => processId);\n }\n\n if (candidates.length === 0) {\n candidates = [...preferredProcessIds].sort();\n }\n\n const buildRankKey = (processId: string): string => {\n const record = processMap[processId] as ProcessRecord;\n const targetRank = Number(\n Object.prototype.hasOwnProperty.call(record.outputAmounts, targetFlowUuid),\n );\n const terminalRank = Number((outdegree.get(processId) ?? 0) === 0);\n const indegreeRank = String(indegree.get(processId) ?? 0).padStart(8, '0');\n return `${targetRank}|${terminalRank}|${indegreeRank}|${processId}`;\n };\n\n return [...candidates]\n .sort((left, right) => buildRankKey(left).localeCompare(buildRankKey(right)))\n .pop() as string;\n}\n\nfunction collectReachable(finalProcessId: string, edges: Edge[]): Set<string> {\n const reverseAdj = new Map<string, string[]>();\n\n edges.forEach((edge) => {\n const bucket = reverseAdj.get(edge.dst) ?? [];\n bucket.push(edge.src);\n reverseAdj.set(edge.dst, bucket);\n });\n\n const reachable = new Set<string>([finalProcessId]);\n const queue = [finalProcessId];\n\n while (queue.length > 0) {\n const current = queue.shift() as string;\n (reverseAdj.get(current) ?? []).forEach((upstream) => {\n if (reachable.has(upstream)) {\n return;\n }\n reachable.add(upstream);\n queue.push(upstream);\n });\n }\n\n return reachable;\n}\n\nfunction topologicalOrder(processIds: Set<string>, edges: Edge[]): string[] {\n const indegree = new Map<string, number>();\n const adj = new Map<string, string[]>();\n [...processIds].forEach((processId) => {\n indegree.set(processId, 0);\n });\n\n edges.forEach((edge) => {\n if (!processIds.has(edge.src) || !processIds.has(edge.dst)) {\n return;\n }\n\n indegree.set(edge.dst, (indegree.get(edge.dst) as number) + 1);\n const bucket = adj.get(edge.src) ?? [];\n bucket.push(edge.dst);\n adj.set(edge.src, bucket);\n });\n\n const queue = [...processIds]\n .filter((processId) => (indegree.get(processId) as number) === 0)\n .sort();\n const ordered: string[] = [];\n\n while (queue.length > 0) {\n const current = queue.shift() as string;\n ordered.push(current);\n (adj.get(current) ?? []).sort().forEach((downstream) => {\n indegree.set(downstream, (indegree.get(downstream) as number) - 1);\n if ((indegree.get(downstream) as number) === 0) {\n queue.push(downstream);\n queue.sort();\n }\n });\n }\n\n if (ordered.length !== processIds.size) {\n [...processIds]\n .filter((processId) => !ordered.includes(processId))\n .sort()\n .forEach((processId) => ordered.push(processId));\n }\n\n return ordered;\n}\n\nfunction computeMultiplicationFactors(\n processMap: Record<string, ProcessRecord>,\n reachable: Set<string>,\n edges: Edge[],\n order: string[],\n finalProcessId: string,\n): Record<string, number> {\n const factors: Record<string, number> = {};\n [...reachable].forEach((processId) => {\n factors[processId] = 0;\n });\n factors[finalProcessId] = 1;\n\n const incoming = new Map<string, Edge[]>();\n edges.forEach((edge) => {\n if (!reachable.has(edge.src) || !reachable.has(edge.dst)) {\n return;\n }\n const bucket = incoming.get(edge.dst) ?? [];\n bucket.push(edge);\n incoming.set(edge.dst, bucket);\n });\n\n [...order].reverse().forEach((current) => {\n const currentFactor = factors[current] as number;\n if (Math.abs(currentFactor) < EPSILON) {\n return;\n }\n\n (incoming.get(current) ?? []).forEach((edge) => {\n const upstreamOutput = processMap[edge.src]?.outputAmounts[edge.flowUuid] ?? 1;\n const safeUpstreamOutput = Math.abs(upstreamOutput) < EPSILON ? 1 : upstreamOutput;\n const delta = (currentFactor * edge.downstreamInputAmount) / safeUpstreamOutput;\n factors[edge.src] += delta;\n });\n });\n\n return factors;\n}\n\nfunction exchangeAmount(exchange: JsonRecord): number {\n return numberOrZero(exchange.meanAmount ?? exchange.resultingAmount);\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonRecord,\n amount: number,\n internalId: string,\n quantitativeReference = false,\n): JsonRecord {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const amountValue = toJsonNumber(amount);\n cloned.meanAmount = amountValue;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = amountValue;\n }\n cloned.quantitativeReference = quantitativeReference;\n return cloned;\n}\n\nfunction buildProcessInstances(\n processMap: Record<string, ProcessRecord>,\n order: string[],\n edges: Edge[],\n factors: Record<string, number>,\n): { processInstances: JsonRecord[]; internalIds: Record<string, string> } {\n const internalIds = Object.fromEntries(\n order.map((processId, index) => [processId, String(index + 1)]),\n );\n const outgoing = new Map<string, Edge[]>();\n edges.forEach((edge) => {\n if (!(edge.src in internalIds) || !(edge.dst in internalIds)) {\n return;\n }\n const bucket = outgoing.get(edge.src) ?? [];\n bucket.push(edge);\n outgoing.set(edge.src, bucket);\n });\n\n const processInstances = order.map((processId) => {\n const record = processMap[processId] as ProcessRecord;\n const dataset = record.raw.processDataSet as JsonRecord;\n const processInformation = isRecord(dataset.processInformation)\n ? dataset.processInformation\n : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const nameInfo = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const shortDescription = copyJson(nameInfo.baseName ?? []);\n const outputGroups: JsonRecord[] = [];\n const byFlow = new Map<string, Edge[]>();\n\n (outgoing.get(processId) ?? []).forEach((edge) => {\n const bucket = byFlow.get(edge.flowUuid) ?? [];\n bucket.push(edge);\n byFlow.set(edge.flowUuid, bucket);\n });\n\n byFlow.forEach((groupedEdges, flowUuid) => {\n const downstreamPayload = groupedEdges.map((edge) => ({\n '@id': internalIds[edge.dst],\n '@flowUUID': flowUuid,\n '@dominant': 'true',\n }));\n outputGroups.push({\n '@dominant': 'true',\n '@flowUUID': flowUuid,\n downstreamProcess:\n downstreamPayload.length === 1 ? downstreamPayload[0] : downstreamPayload,\n });\n });\n\n return {\n '@dataSetInternalID': internalIds[processId],\n '@multiplicationFactor': formatNumber(factors[processId] ?? 0),\n referenceToProcess: buildGlobalReference(\n record.processUuid,\n record.version,\n shortDescription,\n 'process data set',\n `../processes/${record.processUuid}_${record.version}.xml`,\n ),\n ...(outputGroups.length > 0\n ? {\n connections: {\n outputExchange: outputGroups.length === 1 ? outputGroups[0] : outputGroups,\n },\n }\n : {}),\n };\n });\n\n return { processInstances, internalIds };\n}\n\nfunction buildLifecycleModelDataset(\n runName: string,\n state: JsonRecord,\n processMap: Record<string, ProcessRecord>,\n order: string[],\n edges: Edge[],\n factors: Record<string, number>,\n finalProcessId: string,\n): { model: JsonRecord; summary: JsonRecord } {\n const finalRecord = processMap[finalProcessId] as ProcessRecord;\n const finalDataset = isRecord(finalRecord.raw.processDataSet)\n ? finalRecord.raw.processDataSet\n : {};\n const finalProcessInformation = isRecord(finalDataset.processInformation)\n ? finalDataset.processInformation\n : {};\n const finalInfo = isRecord(finalProcessInformation.dataSetInformation)\n ? finalProcessInformation.dataSetInformation\n : {};\n const finalName = isRecord(finalInfo.name) ? finalInfo.name : {};\n\n const flowDataset = extractFlowDatasetFromState(state);\n const flowInformation = isRecord(flowDataset.flowInformation) ? flowDataset.flowInformation : {};\n const flowInfo = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const flowName = isRecord(flowInfo.name) ? flowInfo.name : {};\n const flowSummary = isRecord(state.flow_summary) ? state.flow_summary : {};\n const modelUuid = uuid5FromText(UUID_NAMESPACE_URL, runName);\n const modelVersion = '01.01.000';\n const { processInstances, internalIds } = buildProcessInstances(\n processMap,\n order,\n edges,\n factors,\n );\n\n const administrativeInformation = isRecord(finalDataset.administrativeInformation)\n ? finalDataset.administrativeInformation\n : {};\n const commissionerAndGoal = copyJson(\n administrativeInformation['common:commissionerAndGoal'] ??\n administrativeInformation.commissionerAndGoal ??\n {},\n );\n const dataEntryBy = copyJson(\n administrativeInformation.dataEntryBy ?? administrativeInformation['common:dataEntryBy'] ?? {},\n );\n if (isRecord(dataEntryBy)) {\n const enteringRef = dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'];\n if (enteringRef !== undefined) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheDataSet'] = copyJson(enteringRef);\n }\n }\n\n const publication = copyJson(resolvePublicationBlock(finalDataset));\n publication['common:dataSetVersion'] = modelVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/lifecyclemodels/${modelUuid}?version=${modelVersion}`;\n if (!Array.isArray(publication['common:accessRestrictions'])) {\n publication['common:accessRestrictions'] = [];\n }\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? finalDataset.modellingAndValidation\n : {};\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n const compliance = copyJson(\n isRecord(complianceDeclarations.compliance) ? complianceDeclarations.compliance : {},\n );\n compliance['common:approvalOfOverallCompliance'] ??= 'Fully compliant';\n compliance['common:nomenclatureCompliance'] ??= 'Not defined';\n compliance['common:methodologicalCompliance'] ??= 'Not defined';\n compliance['common:reviewCompliance'] ??= 'Not defined';\n compliance['common:documentationCompliance'] ??= 'Not defined';\n compliance['common:qualityCompliance'] ??= 'Not defined';\n\n const reviewRef =\n (isRecord(commissionerAndGoal)\n ? commissionerAndGoal['common:referenceToCommissioner']\n : undefined) ??\n (isRecord(dataEntryBy)\n ? dataEntryBy['common:referenceToPersonOrEntityEnteringTheDataSet']\n : undefined) ??\n publication['common:referenceToOwnershipOfDataSet'] ??\n {};\n\n const review = {\n 'common:referenceToNameOfReviewerAndInstitution': copyJson(reviewRef),\n 'common:otherReviewDetails': multilangFromText(\n 'Local native CLI lifecyclemodel auto-build artifact; not independently reviewed.',\n '本地原生 CLI lifecyclemodel auto-build 产物,未经过独立评审。',\n ),\n };\n\n const generalComment = ensureList(finalInfo['common:generalComment']).filter(\n (item) => item !== undefined,\n );\n generalComment.push(\n ...multilangFromText(\n `Built locally from process-automated-builder run ${runName}. ${nonEmptyString(state.technical_description) ?? ''}`.trim(),\n `本地基于 process-automated-builder 运行 ${runName} 生成。`,\n ),\n );\n generalComment.push(\n ...multilangFromText(\n 'This CLI slice emits native json_ordered only. Platform-specific derivations stay in later publish flows.',\n '该 CLI 切片只产出原生 json_ordered。平台特有衍生字段保留在后续发布流程。',\n ),\n );\n\n const resultingProcess = buildGlobalReference(\n modelUuid,\n modelVersion,\n copyJson(flowName.baseName ?? finalName.baseName ?? []),\n 'process data set',\n `../processes/${modelUuid}_${modelVersion}.xml`,\n );\n\n const model = {\n lifeCycleModelDataSet: {\n '@xmlns': 'http://eplca.jrc.ec.europa.eu/ILCD/LifeCycleModel/2017',\n '@xmlns:common': 'http://lca.jrc.it/ILCD/Common',\n '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n '@version': '1.1',\n '@xsi:schemaLocation':\n 'http://eplca.jrc.ec.europa.eu/ILCD/LifeCycleModel/2017 ../../schemas/ILCD_LifeCycleModelDataSet.xsd',\n lifeCycleModelInformation: {\n dataSetInformation: {\n 'common:UUID': modelUuid,\n name: {\n baseName: copyJson(flowName.baseName ?? finalName.baseName ?? []),\n treatmentStandardsRoutes: copyJson(\n flowName.treatmentStandardsRoutes ?? finalName.treatmentStandardsRoutes ?? [],\n ),\n mixAndLocationTypes: copyJson(\n flowName.mixAndLocationTypes ?? finalName.mixAndLocationTypes ?? [],\n ),\n functionalUnitFlowProperties: multilangFromText(\n `Reference process output scaled to 1 unit of ${nonEmptyString(flowSummary.base_name_en) ?? nonEmptyString(flowSummary.base_name) ?? firstText(flowName.baseName)}`,\n `参考过程输出缩放到 1 单位 ${nonEmptyString(flowSummary.base_name_zh) ?? nonEmptyString(flowSummary.base_name) ?? ''}`,\n ),\n },\n classificationInformation: copyJson(finalInfo.classificationInformation ?? {}),\n referenceToResultingProcess: resultingProcess,\n 'common:generalComment': generalComment,\n },\n quantitativeReference: {\n referenceToReferenceProcess: internalIds[finalProcessId],\n },\n technology: {\n processes: {\n processInstance: processInstances.length === 1 ? processInstances[0] : processInstances,\n },\n },\n },\n modellingAndValidation: {\n dataSourcesTreatmentEtc: {\n useAdviceForDataSet: multilangFromText(\n nonEmptyString(state.scope) ??\n 'Built from local process exports and shared-flow graph inference.',\n '基于本地 process 导出结果和共享 flow 图推断生成。',\n ),\n },\n validation: {\n review,\n },\n complianceDeclarations: {\n compliance,\n },\n },\n administrativeInformation: {\n 'common:commissionerAndGoal': commissionerAndGoal,\n dataEntryBy,\n publicationAndOwnership: publication,\n },\n },\n };\n\n return {\n model,\n summary: {\n run_name: runName,\n model_uuid: modelUuid,\n model_version: modelVersion,\n reference_process_uuid: finalProcessId,\n reference_process_internal_id: internalIds[finalProcessId],\n reference_flow_uuid: nonEmptyString(flowSummary.uuid),\n reference_to_resulting_process_uuid: modelUuid,\n process_count: order.length,\n edge_count: edges.length,\n multiplication_factors: Object.fromEntries(\n order.map((processId) => [processId, formatNumber(factors[processId] ?? 0)]),\n ),\n ordered_processes: order.map((processId) => {\n const record = processMap[processId] as ProcessRecord;\n return {\n process_uuid: processId,\n name_en: record.nameEn,\n name_zh: record.nameZh,\n route_en: record.routeEn,\n geography_code: record.geographyCode,\n classification_path: record.classificationPath,\n };\n }),\n source_counts: {\n local_run_export: Object.keys(processMap).length,\n used_local_run_processes: order.length,\n },\n },\n };\n}\n\nfunction buildLocalModels(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n): LifecyclemodelAutoBuildLocalReport[] {\n return normalized.local_runs.map((runDir) => {\n const statePath = path.join(runDir, 'cache', 'process_from_flow_state.json');\n const processDir = path.join(runDir, 'exports', 'processes');\n\n if (!existsSync(statePath)) {\n throw new CliError(`lifecyclemodel auto-build run is missing state file: ${runDir}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_STATE_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n if (!existsSync(processDir)) {\n throw new CliError(`lifecyclemodel auto-build run is missing exported processes: ${runDir}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_EXPORTS_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const state = readJsonInput(statePath);\n if (!isRecord(state)) {\n throw new CliError(`lifecyclemodel auto-build state must be a JSON object: ${statePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_STATE_INVALID',\n exitCode: 2,\n });\n }\n\n const processFiles = readdirSync(processDir)\n .filter((item) => item.endsWith('.json'))\n .sort()\n .map((item) => path.join(processDir, item));\n\n if (processFiles.length === 0) {\n throw new CliError(\n `lifecyclemodel auto-build run has no exported process JSON files: ${runDir}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_EXPORTS_EMPTY',\n exitCode: 2,\n },\n );\n }\n\n const processMap = Object.fromEntries(\n processFiles.map((filePath) => {\n const record = loadProcessRecord(filePath, 'local_run_export', runDir);\n return [record.processUuid, record];\n }),\n );\n\n const edges = inferEdges(processMap);\n const preferredProcessIds = new Set(Object.keys(processMap));\n const finalProcessId = chooseReferenceProcess(processMap, edges, state, preferredProcessIds);\n const reachable = collectReachable(finalProcessId, edges);\n const order = topologicalOrder(reachable, edges);\n const filteredEdges = edges.filter(\n (edge) => reachable.has(edge.src) && reachable.has(edge.dst),\n );\n const factors = computeMultiplicationFactors(\n processMap,\n reachable,\n filteredEdges,\n order,\n finalProcessId,\n );\n const runName = path.basename(runDir);\n const { model, summary } = buildLifecycleModelDataset(\n runName,\n state,\n processMap,\n order,\n filteredEdges,\n factors,\n finalProcessId,\n );\n const runOut = path.join(layout.modelsDir, runName);\n const bundleOut = path.join(runOut, 'tidas_bundle', 'lifecyclemodels');\n mkdirSync(bundleOut, { recursive: true });\n\n const modelUuid = summary.model_uuid as string;\n const modelVersion = summary.model_version as string;\n const modelFile = path.join(bundleOut, `${modelUuid}_${modelVersion}.json`);\n const summaryFile = path.join(runOut, 'summary.json');\n const connectionsFile = path.join(runOut, 'connections.json');\n const processCatalogFile = path.join(runOut, 'process-catalog.json');\n\n writeJsonArtifact(modelFile, model);\n writeJsonArtifact(summaryFile, summary);\n writeJsonArtifact(\n connectionsFile,\n filteredEdges.map((edge) => ({\n src: edge.src,\n dst: edge.dst,\n flow_uuid: edge.flowUuid,\n downstream_input_amount: formatNumber(edge.downstreamInputAmount),\n confidence: formatNumber(edge.confidence),\n reasons: edge.reasons,\n src_name_en: processMap[edge.src].nameEn,\n dst_name_en: processMap[edge.dst].nameEn,\n src_source_kind: processMap[edge.src].sourceKind,\n dst_source_kind: processMap[edge.dst].sourceKind,\n })),\n );\n writeJsonArtifact(\n processCatalogFile,\n Object.entries(processMap)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([processId, record]) => ({\n process_uuid: processId,\n name_en: record.nameEn,\n name_zh: record.nameZh,\n route_en: record.routeEn,\n mix_en: record.mixEn,\n geography_code: record.geographyCode,\n classification_path: record.classificationPath,\n reference_flow_uuid: record.referenceFlowUuid,\n reference_direction: record.referenceDirection,\n reference_amount: formatNumber(record.referenceAmount),\n input_flow_count: Object.keys(record.inputAmounts).length,\n output_flow_count: Object.keys(record.outputAmounts).length,\n source_kind: record.sourceKind,\n source_label: record.sourceLabel,\n included_process_ref_count: record.includedProcessRefCount,\n })),\n );\n\n return {\n run_dir: runDir,\n run_name: runName,\n model_file: modelFile,\n summary_file: summaryFile,\n connections_file: connectionsFile,\n process_catalog_file: processCatalogFile,\n summary,\n };\n });\n}\n\nfunction buildNextActions(layout: LifecyclemodelAutoBuildLayout): string[] {\n return [\n `inspect: ${layout.runPlanPath}`,\n `inspect: ${layout.modelsDir}`,\n `run: tiangong lifecyclemodel validate-build --run-dir ${layout.runRoot}`,\n `run: tiangong lifecyclemodel publish-build --run-dir ${layout.runRoot}`,\n ];\n}\n\nfunction buildReport(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n localBuildReports: LifecyclemodelAutoBuildLocalReport[],\n now: Date,\n): LifecyclemodelAutoBuildReport {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: 'completed_local_lifecyclemodel_auto_build_run',\n request_path: normalized.request_path,\n run_id: normalized.run_id,\n run_root: normalized.run_root,\n local_run_count: normalized.local_runs.length,\n built_model_count: localBuildReports.length,\n files: {\n request_snapshot: layout.requestSnapshotPath,\n normalized_request: layout.normalizedRequestPath,\n run_plan: layout.runPlanPath,\n resolved_manifest: layout.resolvedManifestPath,\n selection_brief: layout.selectionBriefPath,\n reference_model_summary: layout.referenceModelSummaryPath,\n invocation_index: layout.invocationIndexPath,\n run_manifest: layout.runManifestPath,\n report: layout.reportPath,\n },\n local_build_reports: localBuildReports,\n next_actions: buildNextActions(layout),\n };\n}\n\nexport async function runLifecyclemodelAutoBuild(\n options: RunLifecyclemodelAutoBuildOptions,\n): Promise<LifecyclemodelAutoBuildReport> {\n const input = options.inputValue ?? readJsonInput(options.inputPath);\n const now = options.now ?? new Date();\n const normalized = normalizeLifecyclemodelAutoBuildRequest(input, {\n inputPath: options.inputPath,\n outDir: options.outDir,\n now,\n runIdOverride: options.runIdOverride,\n });\n const layout = buildLayout(normalized.run_root, normalized.run_id);\n\n ensureEmptyRunRoot(layout.runRoot);\n ensureLayout(layout);\n\n writeJsonArtifact(layout.requestSnapshotPath, input);\n writeJsonArtifact(layout.normalizedRequestPath, normalized);\n writeTextArtifact(layout.selectionBriefPath, buildSelectionBrief(normalized.manifest));\n writeJsonArtifact(\n layout.referenceModelSummaryPath,\n buildReferenceModelSummary(normalized.manifest),\n );\n writeJsonArtifact(layout.resolvedManifestPath, normalized.manifest);\n writeJsonArtifact(\n layout.invocationIndexPath,\n buildInvocationIndex(normalized, options, layout, now),\n );\n writeJsonArtifact(\n layout.runManifestPath,\n buildRunManifest({\n layout,\n command: options.outDir\n ? [\n 'lifecyclemodel',\n 'auto-build',\n '--input',\n options.inputPath,\n '--out-dir',\n options.outDir,\n ]\n : ['lifecyclemodel', 'auto-build', '--input', options.inputPath],\n cwd: options.cwd,\n createdAt: now,\n }),\n );\n\n const plan = buildPlan(normalized, layout, now);\n writeJsonArtifact(layout.runPlanPath, plan);\n\n const localBuildReports = buildLocalModels(normalized, layout);\n const completedPlan = {\n ...plan,\n local_build_reports: localBuildReports,\n };\n writeJsonArtifact(layout.runPlanPath, completedPlan);\n\n const report = buildReport(normalized, layout, localBuildReports, now);\n writeJsonArtifact(layout.reportPath, report);\n writeLatestRunId(layout, normalized.run_id);\n return report;\n}\n\nexport const __testInternals = {\n DEFAULT_MANIFEST,\n copyJson,\n ensureList,\n numberOrZero,\n firstText,\n langTextMap,\n localizedText,\n multilangText,\n multilangFromText,\n deepMerge,\n buildLayout,\n buildSelectionBrief,\n buildReferenceModelSummary,\n normalizeLocalRuns,\n uuid5FromText,\n extractClassificationPath,\n classificationOverlap,\n extractFlowDatasetFromState,\n resolvePublicationBlock,\n loadProcessRecord,\n scoreEdgeCandidate,\n inferEdges,\n chooseReferenceProcess,\n collectReachable,\n topologicalOrder,\n computeMultiplicationFactors,\n exchangeAmount,\n cloneExchangeWithAmount,\n buildProcessInstances,\n buildLifecycleModelDataset,\n buildPlan,\n formatNumber,\n buildNameSummary,\n toJsonNumber,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"lifecyclemodel-auto-build.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-auto-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { readJsonInput } from './io.js';\nimport {\n buildRunId,\n buildRunManifest,\n ensureRunLayout,\n writeLatestRunId,\n type RunLayout,\n} from './run.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst UUID_NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nconst EPSILON = 1e-10;\n\nconst DEFAULT_MANIFEST = {\n run_label: 'lifecyclemodel-automated-builder',\n allow_remote_write: false,\n discovery: {\n sources: [\n { kind: 'account_processes', selector: 'all-accessible' },\n {\n kind: 'public_open_data',\n table: 'processes',\n filters: { state_code: 100 },\n },\n ],\n supporting_open_tables: ['flows', 'sources', 'lifecyclemodels'],\n batch_limit: 200,\n reference_model_queries: [],\n reference_model_select_limit: 3,\n },\n selection: {\n mode: 'graph_first_local_build',\n max_models: 25,\n max_processes_per_model: 12,\n decision_factors: [\n 'shared product system or classification lineage',\n 'explicit exchange connectivity',\n 'quantitative reference completeness',\n 'geography and time coherence',\n ],\n },\n reuse: {\n reusable_process_dirs: [],\n include_reference_model_resulting_processes: true,\n },\n output: {\n write_local_models: true,\n emit_validation_report: false,\n },\n local_runs: [],\n publish: {\n enabled: false,\n mode: 'deferred_to_publish_build',\n target_runs: [],\n select_after_insert: true,\n max_attempts: 5,\n retry_delay_seconds: 2,\n },\n} as const;\n\ntype LifecyclemodelAutoBuildStatus = 'completed_local_lifecyclemodel_auto_build_run';\n\nexport type LifecyclemodelAutoBuildLayout = RunLayout & {\n requestDir: string;\n selectionDir: string;\n discoveryDir: string;\n modelsDir: string;\n requestSnapshotPath: string;\n normalizedRequestPath: string;\n runPlanPath: string;\n resolvedManifestPath: string;\n selectionBriefPath: string;\n referenceModelSummaryPath: string;\n invocationIndexPath: string;\n runManifestPath: string;\n reportPath: string;\n};\n\nexport type NormalizedLifecyclemodelAutoBuildRequest = {\n schema_version: 1;\n request_path: string;\n run_id: string;\n run_root: string;\n manifest: JsonRecord;\n local_runs: string[];\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonRecord;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: 'Input' | 'Output';\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n nameEn: string;\n nameZh: string;\n routeEn: string;\n mixEn: string;\n geographyCode: string;\n classificationPath: string[];\n tokenSet: Set<string>;\n sourceKind: 'local_run_export';\n sourceLabel: string;\n includedProcessRefCount: number;\n};\n\ntype Edge = {\n src: string;\n dst: string;\n flowUuid: string;\n downstreamInputAmount: number;\n confidence: number;\n reasons: string[];\n};\n\nexport type LifecyclemodelAutoBuildLocalReport = {\n run_dir: string;\n run_name: string;\n model_file: string;\n summary_file: string;\n connections_file: string;\n process_catalog_file: string;\n summary: JsonRecord;\n};\n\nexport type LifecyclemodelAutoBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: LifecyclemodelAutoBuildStatus;\n request_path: string;\n run_id: string;\n run_root: string;\n local_run_count: number;\n built_model_count: number;\n files: {\n request_snapshot: string;\n normalized_request: string;\n run_plan: string;\n resolved_manifest: string;\n selection_brief: string;\n reference_model_summary: string;\n invocation_index: string;\n run_manifest: string;\n report: string;\n };\n local_build_reports: LifecyclemodelAutoBuildLocalReport[];\n next_actions: string[];\n};\n\nexport type RunLifecyclemodelAutoBuildOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n cwd?: string;\n inputValue?: unknown;\n runIdOverride?: string;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return Boolean(value && typeof value === 'object' && !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 if (value === undefined) {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction nonEmptyString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const normalized = value.trim();\n return normalized || null;\n}\n\nfunction numberOrZero(value: unknown): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : 0;\n }\n\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n return 0;\n}\n\nfunction firstText(value: unknown): string {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isRecord(item)) {\n const text = nonEmptyString(item['#text']);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n }\n\n if (isRecord(value)) {\n return nonEmptyString(value['#text']) ?? '';\n }\n\n return nonEmptyString(value) ?? '';\n}\n\nfunction langTextMap(value: unknown): Record<string, string> {\n const mapping: Record<string, string> = {};\n\n for (const item of ensureList(value)) {\n if (!isRecord(item)) {\n continue;\n }\n\n const lang = nonEmptyString(item['@xml:lang'])?.toLowerCase() ?? 'en';\n const text = nonEmptyString(item['#text']);\n if (text && !mapping[lang]) {\n mapping[lang] = text;\n }\n }\n\n if (Object.keys(mapping).length > 0) {\n return mapping;\n }\n\n const text = firstText(value).trim();\n return text ? { en: text } : {};\n}\n\nfunction localizedText(value: unknown, preferred = 'zh'): string {\n const mapping = langTextMap(value);\n if (mapping[preferred]) {\n return mapping[preferred];\n }\n\n if (preferred.startsWith('zh')) {\n for (const candidate of ['zh-cn', 'zh-hans', 'zh']) {\n if (mapping[candidate]) {\n return mapping[candidate];\n }\n }\n }\n\n if (mapping.en) {\n return mapping.en;\n }\n\n return Object.values(mapping)[0] ?? '';\n}\n\nfunction multilangText(value: unknown): [string, string] {\n const mapping = langTextMap(value);\n return [mapping.en ?? Object.values(mapping)[0] ?? '', mapping.zh ?? mapping['zh-cn'] ?? ''];\n}\n\nfunction multilangFromText(enText: string, zhText?: string): Array<Record<string, string>> {\n const items: Array<Record<string, string>> = [];\n if (enText) {\n items.push({ '@xml:lang': 'en', '#text': enText });\n }\n if (zhText) {\n items.push({ '@xml:lang': 'zh', '#text': zhText });\n }\n return items;\n}\n\nfunction tokenizeText(value: string): Set<string> {\n const cleaned = value\n .toLowerCase()\n .replace(/[^a-z0-9]+/gu, ' ')\n .trim();\n\n return new Set(cleaned.split(/\\s+/u).filter((token) => token.length >= 3));\n}\n\nfunction buildNameSummary(nameInfo: JsonRecord): Array<Record<string, string>> {\n const base = langTextMap(nameInfo.baseName);\n const route = langTextMap(nameInfo.treatmentStandardsRoutes);\n const mix = langTextMap(nameInfo.mixAndLocationTypes);\n const functional = langTextMap(nameInfo.functionalUnitFlowProperties);\n const langOrder: string[] = [];\n\n [base, route, mix, functional].forEach((mapping) => {\n Object.keys(mapping).forEach((lang) => {\n if (!langOrder.includes(lang)) {\n langOrder.push(lang);\n }\n });\n });\n\n if (langOrder.length === 0) {\n return [];\n }\n\n const fallback = (mapping: Record<string, string>, lang: string): string =>\n mapping[lang] ??\n mapping.zh ??\n mapping['zh-cn'] ??\n mapping.en ??\n Object.values(mapping)[0] ??\n '';\n\n const summary: Array<Record<string, string>> = [];\n\n langOrder.forEach((lang) => {\n const text = [\n fallback(base, lang),\n fallback(route, lang),\n fallback(mix, lang),\n fallback(functional, lang),\n ]\n .filter(Boolean)\n .join('; ')\n .trim();\n\n if (text) {\n summary.push({ '@xml:lang': lang, '#text': text });\n }\n });\n\n return summary;\n}\n\nfunction extractClassificationPath(classificationInfo: unknown): string[] {\n const carrier = isRecord(classificationInfo)\n ? isRecord(classificationInfo['common:classification'])\n ? classificationInfo['common:classification']\n : {}\n : {};\n\n return ensureList(carrier['common:class'])\n .map((item) => (isRecord(item) ? nonEmptyString(item['#text']) : null))\n .filter((item): item is string => Boolean(item));\n}\n\nfunction classificationOverlap(left: string[], right: string[]): number {\n let overlap = 0;\n const maxLength = Math.min(left.length, right.length);\n\n for (let index = 0; index < maxLength; index += 1) {\n if (left[index] !== right[index]) {\n break;\n }\n overlap += 1;\n }\n\n return overlap;\n}\n\nfunction parseUuidBytes(uuid: string): Uint8Array {\n const hex = uuid.replace(/-/gu, '').toLowerCase();\n if (!/^[0-9a-f]{32}$/u.test(hex)) {\n throw new CliError(`Invalid UUID value: ${uuid}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_UUID_INVALID',\n exitCode: 2,\n });\n }\n\n const bytes = new Uint8Array(16);\n for (let index = 0; index < 16; index += 1) {\n bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToUuid(bytes: Uint8Array): string {\n const hex = Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction uuid5FromText(namespaceUuid: string, value: string): string {\n const namespaceBytes = Buffer.from(parseUuidBytes(namespaceUuid));\n const hash = createHash('sha1').update(namespaceBytes).update(value, 'utf8').digest();\n const bytes = Uint8Array.from(hash.subarray(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n return bytesToUuid(bytes);\n}\n\nfunction formatNumber(value: number): string {\n if (!Number.isFinite(value) || Math.abs(value) < EPSILON) {\n return '0';\n }\n\n const normalized = Number.parseFloat(value.toPrecision(15));\n if (Number.isInteger(normalized)) {\n return String(normalized);\n }\n\n if (Math.abs(normalized) >= 1e6 || Math.abs(normalized) < 1e-6) {\n return normalized.toFixed(12).replace(/0+$/u, '').replace(/\\.$/u, '');\n }\n\n return String(normalized);\n}\n\nfunction toJsonNumber(value: number): number {\n return Number.parseFloat(formatNumber(value));\n}\n\nfunction requiredRequestObject(input: unknown): JsonRecord {\n if (!isRecord(input)) {\n throw new CliError('lifecyclemodel auto-build request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n return input;\n}\n\nfunction deepMerge(base: unknown, override: unknown): unknown {\n if (isRecord(base) && isRecord(override)) {\n const merged: JsonRecord = copyJson(base);\n Object.entries(override).forEach(([key, value]) => {\n merged[key] = deepMerge(merged[key], value);\n });\n return merged;\n }\n\n return copyJson(override);\n}\n\nfunction normalizeLocalRuns(value: unknown, requestDir: string): string[] {\n const seen = new Set<string>();\n const normalized = ensureList(value)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item))\n .map((item) => path.resolve(requestDir, item));\n\n if (normalized.length === 0) {\n throw new CliError(\n 'lifecyclemodel auto-build local_runs must contain at least one run directory.',\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_LOCAL_RUNS_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n normalized.forEach((item) => {\n if (seen.has(item)) {\n throw new CliError(`Duplicate lifecyclemodel auto-build local_run: ${item}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_LOCAL_RUN_DUPLICATE',\n exitCode: 2,\n });\n }\n seen.add(item);\n });\n\n return normalized;\n}\n\nfunction resolveRunRoot(\n requestDir: string,\n outDirOverride: string | null | undefined,\n requestOutDir: unknown,\n): string {\n const override = nonEmptyString(outDirOverride);\n if (override) {\n return path.resolve(requestDir, override);\n }\n\n const requestValue = nonEmptyString(requestOutDir);\n if (requestValue) {\n return path.resolve(requestDir, requestValue);\n }\n\n throw new CliError(\n 'Missing required lifecyclemodel auto-build run root. Provide --out-dir or request.out_dir.',\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_RUN_ROOT_REQUIRED',\n exitCode: 2,\n },\n );\n}\n\nfunction buildLayout(runRoot: string, runId: string): LifecyclemodelAutoBuildLayout {\n const collectionDir = path.dirname(runRoot);\n const layout: RunLayout = {\n namespace: 'lifecyclemodel_auto_build',\n runId,\n artifactsRoot: path.dirname(collectionDir),\n collectionDir,\n runRoot,\n cacheDir: path.join(runRoot, 'cache'),\n inputsDir: path.join(runRoot, 'request'),\n outputsDir: path.join(runRoot, 'models'),\n reportsDir: path.join(runRoot, 'reports'),\n logsDir: path.join(runRoot, 'logs'),\n manifestsDir: path.join(runRoot, 'manifests'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n };\n\n return {\n ...layout,\n requestDir: path.join(runRoot, 'request'),\n selectionDir: path.join(runRoot, 'selection'),\n discoveryDir: path.join(runRoot, 'discovery'),\n modelsDir: path.join(runRoot, 'models'),\n requestSnapshotPath: path.join(runRoot, 'request', 'lifecyclemodel-auto-build.request.json'),\n normalizedRequestPath: path.join(runRoot, 'request', 'request.normalized.json'),\n runPlanPath: path.join(runRoot, 'run-plan.json'),\n resolvedManifestPath: path.join(runRoot, 'resolved-manifest.json'),\n selectionBriefPath: path.join(runRoot, 'selection', 'selection-brief.md'),\n referenceModelSummaryPath: path.join(runRoot, 'discovery', 'reference-model-summary.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n reportPath: path.join(runRoot, 'reports', 'lifecyclemodel-auto-build-report.json'),\n };\n}\n\nfunction ensureEmptyRunRoot(runRoot: string): void {\n if (!existsSync(runRoot)) {\n return;\n }\n\n if (readdirSync(runRoot).length > 0) {\n throw new CliError(\n `lifecyclemodel auto-build run root already exists and is not empty: ${runRoot}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_RUN_EXISTS',\n exitCode: 2,\n },\n );\n }\n}\n\nfunction ensureLayout(layout: LifecyclemodelAutoBuildLayout): void {\n ensureRunLayout(layout);\n [layout.requestDir, layout.selectionDir, layout.discoveryDir, layout.modelsDir].forEach(\n (dirPath) => {\n mkdirSync(dirPath, { recursive: true });\n },\n );\n}\n\nexport function normalizeLifecyclemodelAutoBuildRequest(\n input: unknown,\n options: {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n runIdOverride?: string;\n },\n): NormalizedLifecyclemodelAutoBuildRequest {\n const request = requiredRequestObject(input);\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const mergedManifest = deepMerge(DEFAULT_MANIFEST, request) as JsonRecord;\n\n if (mergedManifest.allow_remote_write === true) {\n throw new CliError(\n 'allow_remote_write=true is not supported by tiangong-lca lifecyclemodel auto-build. Keep the run read-only.',\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REMOTE_WRITE_UNSUPPORTED',\n exitCode: 2,\n },\n );\n }\n\n const now = options.now ?? new Date();\n const runId =\n nonEmptyString(options.runIdOverride) ??\n buildRunId({\n namespace: 'lifecyclemodel_auto_build',\n subject:\n nonEmptyString(mergedManifest.run_label) ??\n path.basename(requestPath, path.extname(requestPath)),\n operation: 'build',\n now,\n });\n\n return {\n schema_version: 1,\n request_path: requestPath,\n run_id: runId,\n run_root: resolveRunRoot(requestDir, options.outDir, request.out_dir),\n manifest: mergedManifest,\n local_runs: normalizeLocalRuns(mergedManifest.local_runs, requestDir),\n };\n}\n\nfunction buildSelectionBrief(manifest: JsonRecord): string {\n const selection = isRecord(manifest.selection) ? manifest.selection : {};\n const decisionFactors = ensureList(selection.decision_factors)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item));\n const referenceQueries = isRecord(manifest.discovery)\n ? ensureList(manifest.discovery.reference_model_queries)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item))\n : [];\n\n const lines = [\n '# Selection Brief',\n '',\n 'This CLI slice is local-first and read-only.',\n '',\n 'Candidate processes are grouped by the provided process run directories.',\n 'The CLI then infers graph structure from shared flow UUIDs, chooses one reference process, and assembles native `json_ordered` lifecyclemodel artifacts.',\n '',\n 'Decision factors:',\n ...decisionFactors.map((item) => `- ${item}`),\n ];\n\n if (referenceQueries.length > 0) {\n lines.push(\n '',\n 'Reference lifecyclemodel discovery was requested in the manifest, but this first CLI slice defers remote read-only discovery to future commands.',\n ...referenceQueries.map((item) => `- deferred reference query: ${item}`),\n );\n }\n\n lines.push(\n '',\n 'Explicitly deferred in this slice:',\n '- remote discovery',\n '- MCP writes',\n '- LLM-driven selection',\n '- validate-build',\n '- publish-build',\n '',\n );\n\n return lines.join('\\n');\n}\n\nfunction buildReferenceModelSummary(manifest: JsonRecord): JsonRecord {\n const discovery = isRecord(manifest.discovery) ? manifest.discovery : {};\n const queries = ensureList(discovery.reference_model_queries)\n .map((item) => nonEmptyString(item))\n .filter((item): item is string => Boolean(item));\n\n return {\n executed: false,\n queries,\n reason:\n queries.length > 0\n ? 'reference model discovery is deferred in the first native CLI auto-build slice'\n : 'reference model discovery not requested',\n };\n}\n\nfunction buildInvocationIndex(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n options: RunLifecyclemodelAutoBuildOptions,\n layout: LifecyclemodelAutoBuildLayout,\n now: Date,\n): JsonRecord {\n const command = ['lifecyclemodel', 'auto-build', '--input', options.inputPath];\n if (options.outDir) {\n command.push('--out-dir', options.outDir);\n }\n\n return {\n schema_version: 1,\n invocations: [\n {\n command,\n cwd: options.cwd ?? process.cwd(),\n created_at: now.toISOString(),\n request_path: normalized.request_path,\n report_path: layout.reportPath,\n },\n ],\n };\n}\n\nfunction buildPlan(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n now: Date,\n): JsonRecord {\n return {\n skill: 'lifecyclemodel-automated-builder',\n mode: 'read_only_local_build',\n created_at: now.toISOString(),\n manifest: normalized.manifest,\n runtime: {\n cli: {\n command: 'lifecyclemodel auto-build',\n entry: 'native_ts',\n node_version: process.version,\n remote_write: false,\n mcp_used: false,\n },\n },\n guardrails: [\n 'do not write remote lifecyclemodel rows in auto-build',\n 'do not require MCP or LLM to assemble the initial local lifecyclemodel graph',\n 'emit native json_ordered only',\n 'defer validate-build and publish-build to dedicated follow-up commands',\n ],\n artifacts: {\n root: layout.runRoot,\n run_plan: layout.runPlanPath,\n resolved_manifest: layout.resolvedManifestPath,\n selection_brief: layout.selectionBriefPath,\n discovery_dir: layout.discoveryDir,\n reference_model_summary: layout.referenceModelSummaryPath,\n models_dir: layout.modelsDir,\n reports_dir: layout.reportsDir,\n },\n stages: [\n {\n name: 'load-local-runs',\n mode: 'local',\n description: 'Load one or more process-automated-builder run directories.',\n },\n {\n name: 'infer-graph',\n mode: 'local',\n description: 'Infer process-to-process links from shared flow UUIDs.',\n },\n {\n name: 'select-reference-process',\n mode: 'local',\n description:\n 'Pick the lifecyclemodel reference process from the target flow and graph shape.',\n },\n {\n name: 'assemble-lifecyclemodel',\n mode: 'local',\n description: 'Write native json_ordered lifecyclemodel artifacts.',\n },\n {\n name: 'validate',\n mode: 'deferred',\n description: 'Deferred to tiangong-lca lifecyclemodel validate-build.',\n },\n {\n name: 'publish',\n mode: 'deferred',\n description: 'Deferred to tiangong-lca lifecyclemodel publish-build.',\n },\n ],\n local_runs: normalized.local_runs,\n };\n}\n\nfunction extractFlowDatasetFromState(state: JsonRecord): JsonRecord {\n const flowDataset = isRecord(state.flow_dataset) ? state.flow_dataset : {};\n if (isRecord(flowDataset.flowDataSet)) {\n return flowDataset.flowDataSet;\n }\n\n return flowDataset;\n}\n\nfunction buildGlobalReference(\n refObjectId: string,\n version: string,\n shortDescription: unknown,\n datasetType: string,\n uri: string,\n): JsonRecord {\n return {\n '@refObjectId': refObjectId,\n '@type': datasetType,\n '@uri': uri,\n '@version': version,\n 'common:shortDescription': copyJson(shortDescription),\n };\n}\n\nfunction resolvePublicationBlock(dataset: JsonRecord): JsonRecord {\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n\n if (isRecord(administrativeInformation.publicationAndOwnership)) {\n return administrativeInformation.publicationAndOwnership;\n }\n\n if (isRecord(administrativeInformation['common:publicationAndOwnership'])) {\n return administrativeInformation['common:publicationAndOwnership'];\n }\n\n return {};\n}\n\nfunction loadProcessRecord(\n filePath: string,\n sourceKind: 'local_run_export',\n sourceLabel: string,\n): ProcessRecord {\n const raw = readJsonInput(filePath);\n if (!isRecord(raw) || !isRecord(raw.processDataSet)) {\n throw new CliError(\n `lifecyclemodel auto-build process file must contain processDataSet: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_INVALID',\n exitCode: 2,\n },\n );\n }\n\n const dataset = raw.processDataSet;\n const processInformation = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const nameInfo = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const geography = isRecord(processInformation.geography) ? processInformation.geography : {};\n const location = isRecord(geography.locationOfOperationSupplyOrProduction)\n ? geography.locationOfOperationSupplyOrProduction\n : {};\n const technology = isRecord(processInformation.technology) ? processInformation.technology : {};\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? processInformation.quantitativeReference\n : {};\n const referenceExchangeInternalId = nonEmptyString(\n quantitativeReference.referenceToReferenceFlow,\n );\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `lifecyclemodel auto-build process is missing referenceToReferenceFlow: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REFERENCE_FLOW_MISSING',\n exitCode: 2,\n },\n );\n }\n\n const exchangesCarrier = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonRecord>(exchangesCarrier.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => nonEmptyString(item['@dataSetInternalID']) === referenceExchangeInternalId,\n );\n if (!referenceExchange) {\n throw new CliError(\n `lifecyclemodel auto-build reference exchange ${referenceExchangeInternalId} not found: ${filePath}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_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 = nonEmptyString(flowRef['@refObjectId']);\n if (!flowUuid) {\n return;\n }\n\n const amount = numberOrZero(exchange.meanAmount ?? exchange.resultingAmount);\n const direction = nonEmptyString(exchange.exchangeDirection);\n if (direction === 'Input') {\n inputAmounts[flowUuid] = amount;\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = amount;\n }\n });\n\n const processUuid = nonEmptyString(dataSetInformation['common:UUID']);\n if (!processUuid) {\n throw new CliError(`lifecyclemodel auto-build process is missing common:UUID: ${filePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_UUID_MISSING',\n exitCode: 2,\n });\n }\n\n const publication = resolvePublicationBlock(dataset);\n const version = nonEmptyString(publication['common:dataSetVersion']) ?? '00.00.001';\n const referenceFlowRef = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n const referenceFlowUuid = nonEmptyString(referenceFlowRef['@refObjectId']);\n const referenceDirection = nonEmptyString(referenceExchange.exchangeDirection);\n if (!referenceFlowUuid || (referenceDirection !== 'Input' && referenceDirection !== 'Output')) {\n throw new CliError(`lifecyclemodel auto-build reference exchange is incomplete: ${filePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_REFERENCE_EXCHANGE_INVALID',\n exitCode: 2,\n });\n }\n\n const includedProcessRefs = ensureList(technology.referenceToIncludedProcesses).filter(isRecord);\n const [nameEn, nameZh] = multilangText(nameInfo.baseName);\n const [routeEn] = multilangText(nameInfo.treatmentStandardsRoutes);\n const [mixEn] = multilangText(nameInfo.mixAndLocationTypes);\n const classificationPath = extractClassificationPath(\n dataSetInformation.classificationInformation,\n );\n\n return {\n processUuid,\n version,\n raw,\n referenceExchangeInternalId,\n referenceFlowUuid,\n referenceDirection,\n referenceAmount: numberOrZero(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n ),\n inputAmounts,\n outputAmounts,\n nameEn,\n nameZh,\n routeEn,\n mixEn,\n geographyCode: nonEmptyString(location['@location']) ?? '',\n classificationPath,\n tokenSet: tokenizeText(\n [nameEn, routeEn, mixEn, classificationPath.join(' ')].filter(Boolean).join(' '),\n ),\n sourceKind,\n sourceLabel,\n includedProcessRefCount: includedProcessRefs.length,\n };\n}\n\nfunction scoreEdgeCandidate(\n src: ProcessRecord,\n dst: ProcessRecord,\n flowUuid: string,\n downstreamAmount: number,\n): { confidence: number; reasons: string[] } {\n let score = 10;\n const reasons = ['shared flow UUID'];\n\n if (src.referenceFlowUuid === flowUuid && src.referenceDirection === 'Output') {\n score += 3;\n reasons.push('upstream reference flow matches shared flow');\n }\n\n if (dst.referenceFlowUuid === flowUuid && dst.referenceDirection === 'Input') {\n score += 3;\n reasons.push('downstream reference flow matches shared flow');\n }\n\n const classOverlap = classificationOverlap(src.classificationPath, dst.classificationPath);\n if (classOverlap > 0) {\n score += Math.min(classOverlap, 3);\n reasons.push(`classification prefix overlap=${classOverlap}`);\n }\n\n if (src.geographyCode && dst.geographyCode && src.geographyCode === dst.geographyCode) {\n score += 1;\n reasons.push(`same geography=${src.geographyCode}`);\n }\n\n const tokenOverlap = [...src.tokenSet].filter((token) => dst.tokenSet.has(token)).length;\n if (tokenOverlap > 0) {\n score += Math.min(tokenOverlap, 4) / 4;\n reasons.push(`token overlap=${tokenOverlap}`);\n }\n\n const upstreamAmount = src.outputAmounts[flowUuid] ?? 0;\n if (upstreamAmount > 0 && downstreamAmount > 0) {\n const ratio = downstreamAmount / upstreamAmount;\n if (ratio >= 0.5 && ratio <= 2) {\n score += 1;\n reasons.push(`amount ratio plausible=${formatNumber(ratio)}`);\n }\n }\n\n return { confidence: score, reasons };\n}\n\nfunction inferEdges(processMap: Record<string, ProcessRecord>): Edge[] {\n const byFlow = new Map<string, { producers: Set<string>; consumers: Set<string> }>();\n\n Object.entries(processMap).forEach(([processId, record]) => {\n Object.keys(record.outputAmounts).forEach((flowUuid) => {\n const group = byFlow.get(flowUuid) ?? {\n producers: new Set<string>(),\n consumers: new Set<string>(),\n };\n group.producers.add(processId);\n byFlow.set(flowUuid, group);\n });\n\n Object.keys(record.inputAmounts).forEach((flowUuid) => {\n const group = byFlow.get(flowUuid) ?? {\n producers: new Set<string>(),\n consumers: new Set<string>(),\n };\n group.consumers.add(processId);\n byFlow.set(flowUuid, group);\n });\n });\n\n const edgeMap = new Map<string, Edge>();\n\n byFlow.forEach((participants, flowUuid) => {\n if (participants.producers.size === 0 || participants.consumers.size === 0) {\n return;\n }\n\n const passThrough = [...participants.producers].filter((item) =>\n participants.consumers.has(item),\n );\n const candidatePairs: Array<[string, string]> = [];\n\n if (passThrough.length > 0) {\n [...participants.producers]\n .filter((item) => !passThrough.includes(item))\n .forEach((producer) => {\n passThrough.forEach((bridge) => {\n candidatePairs.push([producer, bridge]);\n });\n });\n\n passThrough.forEach((bridge) => {\n [...participants.consumers]\n .filter((item) => !passThrough.includes(item))\n .forEach((consumer) => {\n candidatePairs.push([bridge, consumer]);\n });\n });\n } else {\n participants.producers.forEach((producer) => {\n participants.consumers.forEach((consumer) => {\n candidatePairs.push([producer, consumer]);\n });\n });\n }\n\n candidatePairs.forEach(([src, dst]) => {\n const downstreamAmount = processMap[dst]?.inputAmounts[flowUuid];\n const scored = scoreEdgeCandidate(\n processMap[src] as ProcessRecord,\n processMap[dst] as ProcessRecord,\n flowUuid,\n downstreamAmount as number,\n );\n edgeMap.set(`${src}::${dst}::${flowUuid}`, {\n src,\n dst,\n flowUuid,\n downstreamInputAmount: downstreamAmount,\n confidence: scored.confidence,\n reasons: scored.reasons,\n });\n });\n });\n\n const grouped = new Map<string, Edge[]>();\n [...edgeMap.values()].forEach((edge) => {\n const key = `${edge.dst}::${edge.flowUuid}`;\n const bucket = grouped.get(key) ?? [];\n bucket.push(edge);\n grouped.set(key, bucket);\n });\n\n const filtered: Edge[] = [];\n grouped.forEach((group) => {\n const ordered = [...group].sort(\n (left, right) => right.confidence - left.confidence || left.src.localeCompare(right.src),\n );\n\n if (\n ordered.length >= 2 &&\n ordered[0] &&\n ordered[1] &&\n ordered[0].confidence - ordered[1].confidence >= 2\n ) {\n filtered.push(ordered[0]);\n return;\n }\n\n filtered.push(...ordered);\n });\n\n return filtered.sort(\n (left, right) =>\n right.confidence - left.confidence ||\n left.flowUuid.localeCompare(right.flowUuid) ||\n left.src.localeCompare(right.src) ||\n left.dst.localeCompare(right.dst),\n );\n}\n\nfunction chooseReferenceProcess(\n processMap: Record<string, ProcessRecord>,\n edges: Edge[],\n state: JsonRecord,\n preferredProcessIds: Set<string>,\n): string {\n const flowSummary = isRecord(state.flow_summary) ? state.flow_summary : {};\n const targetFlowUuid = nonEmptyString(flowSummary.uuid) ?? '';\n const indegree = new Map<string, number>();\n const outdegree = new Map<string, number>();\n\n edges.forEach((edge) => {\n indegree.set(edge.dst, (indegree.get(edge.dst) ?? 0) + 1);\n outdegree.set(edge.src, (outdegree.get(edge.src) ?? 0) + 1);\n });\n\n let candidates = Object.entries(processMap)\n .filter(\n ([processId, record]) =>\n preferredProcessIds.has(processId) &&\n record.referenceFlowUuid === targetFlowUuid &&\n record.referenceDirection === 'Output',\n )\n .map(([processId]) => processId);\n\n if (candidates.length === 0 && targetFlowUuid) {\n candidates = Object.entries(processMap)\n .filter(\n ([processId, record]) =>\n preferredProcessIds.has(processId) && targetFlowUuid in record.outputAmounts,\n )\n .map(([processId]) => processId);\n }\n\n if (candidates.length === 0) {\n candidates = [...preferredProcessIds].sort();\n }\n\n const buildRankKey = (processId: string): string => {\n const record = processMap[processId] as ProcessRecord;\n const targetRank = Number(\n Object.prototype.hasOwnProperty.call(record.outputAmounts, targetFlowUuid),\n );\n const terminalRank = Number((outdegree.get(processId) ?? 0) === 0);\n const indegreeRank = String(indegree.get(processId) ?? 0).padStart(8, '0');\n return `${targetRank}|${terminalRank}|${indegreeRank}|${processId}`;\n };\n\n return [...candidates]\n .sort((left, right) => buildRankKey(left).localeCompare(buildRankKey(right)))\n .pop() as string;\n}\n\nfunction collectReachable(finalProcessId: string, edges: Edge[]): Set<string> {\n const reverseAdj = new Map<string, string[]>();\n\n edges.forEach((edge) => {\n const bucket = reverseAdj.get(edge.dst) ?? [];\n bucket.push(edge.src);\n reverseAdj.set(edge.dst, bucket);\n });\n\n const reachable = new Set<string>([finalProcessId]);\n const queue = [finalProcessId];\n\n while (queue.length > 0) {\n const current = queue.shift() as string;\n (reverseAdj.get(current) ?? []).forEach((upstream) => {\n if (reachable.has(upstream)) {\n return;\n }\n reachable.add(upstream);\n queue.push(upstream);\n });\n }\n\n return reachable;\n}\n\nfunction topologicalOrder(processIds: Set<string>, edges: Edge[]): string[] {\n const indegree = new Map<string, number>();\n const adj = new Map<string, string[]>();\n [...processIds].forEach((processId) => {\n indegree.set(processId, 0);\n });\n\n edges.forEach((edge) => {\n if (!processIds.has(edge.src) || !processIds.has(edge.dst)) {\n return;\n }\n\n indegree.set(edge.dst, (indegree.get(edge.dst) as number) + 1);\n const bucket = adj.get(edge.src) ?? [];\n bucket.push(edge.dst);\n adj.set(edge.src, bucket);\n });\n\n const queue = [...processIds]\n .filter((processId) => (indegree.get(processId) as number) === 0)\n .sort();\n const ordered: string[] = [];\n\n while (queue.length > 0) {\n const current = queue.shift() as string;\n ordered.push(current);\n (adj.get(current) ?? []).sort().forEach((downstream) => {\n indegree.set(downstream, (indegree.get(downstream) as number) - 1);\n if ((indegree.get(downstream) as number) === 0) {\n queue.push(downstream);\n queue.sort();\n }\n });\n }\n\n if (ordered.length !== processIds.size) {\n [...processIds]\n .filter((processId) => !ordered.includes(processId))\n .sort()\n .forEach((processId) => ordered.push(processId));\n }\n\n return ordered;\n}\n\nfunction computeMultiplicationFactors(\n processMap: Record<string, ProcessRecord>,\n reachable: Set<string>,\n edges: Edge[],\n order: string[],\n finalProcessId: string,\n): Record<string, number> {\n const factors: Record<string, number> = {};\n [...reachable].forEach((processId) => {\n factors[processId] = 0;\n });\n factors[finalProcessId] = 1;\n\n const incoming = new Map<string, Edge[]>();\n edges.forEach((edge) => {\n if (!reachable.has(edge.src) || !reachable.has(edge.dst)) {\n return;\n }\n const bucket = incoming.get(edge.dst) ?? [];\n bucket.push(edge);\n incoming.set(edge.dst, bucket);\n });\n\n [...order].reverse().forEach((current) => {\n const currentFactor = factors[current] as number;\n if (Math.abs(currentFactor) < EPSILON) {\n return;\n }\n\n (incoming.get(current) ?? []).forEach((edge) => {\n const upstreamOutput = processMap[edge.src]?.outputAmounts[edge.flowUuid] ?? 1;\n const safeUpstreamOutput = Math.abs(upstreamOutput) < EPSILON ? 1 : upstreamOutput;\n const delta = (currentFactor * edge.downstreamInputAmount) / safeUpstreamOutput;\n factors[edge.src] += delta;\n });\n });\n\n return factors;\n}\n\nfunction exchangeAmount(exchange: JsonRecord): number {\n return numberOrZero(exchange.meanAmount ?? exchange.resultingAmount);\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonRecord,\n amount: number,\n internalId: string,\n quantitativeReference = false,\n): JsonRecord {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const amountValue = toJsonNumber(amount);\n cloned.meanAmount = amountValue;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = amountValue;\n }\n cloned.quantitativeReference = quantitativeReference;\n return cloned;\n}\n\nfunction buildProcessInstances(\n processMap: Record<string, ProcessRecord>,\n order: string[],\n edges: Edge[],\n factors: Record<string, number>,\n): { processInstances: JsonRecord[]; internalIds: Record<string, string> } {\n const internalIds = Object.fromEntries(\n order.map((processId, index) => [processId, String(index + 1)]),\n );\n const outgoing = new Map<string, Edge[]>();\n edges.forEach((edge) => {\n if (!(edge.src in internalIds) || !(edge.dst in internalIds)) {\n return;\n }\n const bucket = outgoing.get(edge.src) ?? [];\n bucket.push(edge);\n outgoing.set(edge.src, bucket);\n });\n\n const processInstances = order.map((processId) => {\n const record = processMap[processId] as ProcessRecord;\n const dataset = record.raw.processDataSet as JsonRecord;\n const processInformation = isRecord(dataset.processInformation)\n ? dataset.processInformation\n : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const nameInfo = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const shortDescription = copyJson(nameInfo.baseName ?? []);\n const outputGroups: JsonRecord[] = [];\n const byFlow = new Map<string, Edge[]>();\n\n (outgoing.get(processId) ?? []).forEach((edge) => {\n const bucket = byFlow.get(edge.flowUuid) ?? [];\n bucket.push(edge);\n byFlow.set(edge.flowUuid, bucket);\n });\n\n byFlow.forEach((groupedEdges, flowUuid) => {\n const downstreamPayload = groupedEdges.map((edge) => ({\n '@id': internalIds[edge.dst],\n '@flowUUID': flowUuid,\n '@dominant': 'true',\n }));\n outputGroups.push({\n '@dominant': 'true',\n '@flowUUID': flowUuid,\n downstreamProcess:\n downstreamPayload.length === 1 ? downstreamPayload[0] : downstreamPayload,\n });\n });\n\n return {\n '@dataSetInternalID': internalIds[processId],\n '@multiplicationFactor': formatNumber(factors[processId] ?? 0),\n referenceToProcess: buildGlobalReference(\n record.processUuid,\n record.version,\n shortDescription,\n 'process data set',\n `../processes/${record.processUuid}_${record.version}.xml`,\n ),\n ...(outputGroups.length > 0\n ? {\n connections: {\n outputExchange: outputGroups.length === 1 ? outputGroups[0] : outputGroups,\n },\n }\n : {}),\n };\n });\n\n return { processInstances, internalIds };\n}\n\nfunction buildLifecycleModelDataset(\n runName: string,\n state: JsonRecord,\n processMap: Record<string, ProcessRecord>,\n order: string[],\n edges: Edge[],\n factors: Record<string, number>,\n finalProcessId: string,\n): { model: JsonRecord; summary: JsonRecord } {\n const finalRecord = processMap[finalProcessId] as ProcessRecord;\n const finalDataset = isRecord(finalRecord.raw.processDataSet)\n ? finalRecord.raw.processDataSet\n : {};\n const finalProcessInformation = isRecord(finalDataset.processInformation)\n ? finalDataset.processInformation\n : {};\n const finalInfo = isRecord(finalProcessInformation.dataSetInformation)\n ? finalProcessInformation.dataSetInformation\n : {};\n const finalName = isRecord(finalInfo.name) ? finalInfo.name : {};\n\n const flowDataset = extractFlowDatasetFromState(state);\n const flowInformation = isRecord(flowDataset.flowInformation) ? flowDataset.flowInformation : {};\n const flowInfo = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const flowName = isRecord(flowInfo.name) ? flowInfo.name : {};\n const flowSummary = isRecord(state.flow_summary) ? state.flow_summary : {};\n const modelUuid = uuid5FromText(UUID_NAMESPACE_URL, runName);\n const modelVersion = '01.01.000';\n const { processInstances, internalIds } = buildProcessInstances(\n processMap,\n order,\n edges,\n factors,\n );\n\n const administrativeInformation = isRecord(finalDataset.administrativeInformation)\n ? finalDataset.administrativeInformation\n : {};\n const commissionerAndGoal = copyJson(\n administrativeInformation['common:commissionerAndGoal'] ??\n administrativeInformation.commissionerAndGoal ??\n {},\n );\n const dataEntryBy = copyJson(\n administrativeInformation.dataEntryBy ?? administrativeInformation['common:dataEntryBy'] ?? {},\n );\n if (isRecord(dataEntryBy)) {\n const enteringRef = dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'];\n if (enteringRef !== undefined) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheDataSet'] = copyJson(enteringRef);\n }\n }\n\n const publication = copyJson(resolvePublicationBlock(finalDataset));\n publication['common:dataSetVersion'] = modelVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/lifecyclemodels/${modelUuid}?version=${modelVersion}`;\n if (!Array.isArray(publication['common:accessRestrictions'])) {\n publication['common:accessRestrictions'] = [];\n }\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? finalDataset.modellingAndValidation\n : {};\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n const compliance = copyJson(\n isRecord(complianceDeclarations.compliance) ? complianceDeclarations.compliance : {},\n );\n compliance['common:approvalOfOverallCompliance'] ??= 'Fully compliant';\n compliance['common:nomenclatureCompliance'] ??= 'Not defined';\n compliance['common:methodologicalCompliance'] ??= 'Not defined';\n compliance['common:reviewCompliance'] ??= 'Not defined';\n compliance['common:documentationCompliance'] ??= 'Not defined';\n compliance['common:qualityCompliance'] ??= 'Not defined';\n\n const reviewRef =\n (isRecord(commissionerAndGoal)\n ? commissionerAndGoal['common:referenceToCommissioner']\n : undefined) ??\n (isRecord(dataEntryBy)\n ? dataEntryBy['common:referenceToPersonOrEntityEnteringTheDataSet']\n : undefined) ??\n publication['common:referenceToOwnershipOfDataSet'] ??\n {};\n\n const review = {\n 'common:referenceToNameOfReviewerAndInstitution': copyJson(reviewRef),\n 'common:otherReviewDetails': multilangFromText(\n 'Local native CLI lifecyclemodel auto-build artifact; not independently reviewed.',\n '本地原生 CLI lifecyclemodel auto-build 产物,未经过独立评审。',\n ),\n };\n\n const generalComment = ensureList(finalInfo['common:generalComment']).filter(\n (item) => item !== undefined,\n );\n generalComment.push(\n ...multilangFromText(\n `Built locally from process-automated-builder run ${runName}. ${nonEmptyString(state.technical_description) ?? ''}`.trim(),\n `本地基于 process-automated-builder 运行 ${runName} 生成。`,\n ),\n );\n generalComment.push(\n ...multilangFromText(\n 'This CLI slice emits native json_ordered only. Platform-specific derivations stay in later publish flows.',\n '该 CLI 切片只产出原生 json_ordered。平台特有衍生字段保留在后续发布流程。',\n ),\n );\n\n const resultingProcess = buildGlobalReference(\n modelUuid,\n modelVersion,\n copyJson(flowName.baseName ?? finalName.baseName ?? []),\n 'process data set',\n `../processes/${modelUuid}_${modelVersion}.xml`,\n );\n\n const model = {\n lifeCycleModelDataSet: {\n '@xmlns': 'http://eplca.jrc.ec.europa.eu/ILCD/LifeCycleModel/2017',\n '@xmlns:common': 'http://lca.jrc.it/ILCD/Common',\n '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n '@version': '1.1',\n '@xsi:schemaLocation':\n 'http://eplca.jrc.ec.europa.eu/ILCD/LifeCycleModel/2017 ../../schemas/ILCD_LifeCycleModelDataSet.xsd',\n lifeCycleModelInformation: {\n dataSetInformation: {\n 'common:UUID': modelUuid,\n name: {\n baseName: copyJson(flowName.baseName ?? finalName.baseName ?? []),\n treatmentStandardsRoutes: copyJson(\n flowName.treatmentStandardsRoutes ?? finalName.treatmentStandardsRoutes ?? [],\n ),\n mixAndLocationTypes: copyJson(\n flowName.mixAndLocationTypes ?? finalName.mixAndLocationTypes ?? [],\n ),\n functionalUnitFlowProperties: multilangFromText(\n `Reference process output scaled to 1 unit of ${nonEmptyString(flowSummary.base_name_en) ?? nonEmptyString(flowSummary.base_name) ?? firstText(flowName.baseName)}`,\n `参考过程输出缩放到 1 单位 ${nonEmptyString(flowSummary.base_name_zh) ?? nonEmptyString(flowSummary.base_name) ?? ''}`,\n ),\n },\n classificationInformation: copyJson(finalInfo.classificationInformation ?? {}),\n referenceToResultingProcess: resultingProcess,\n 'common:generalComment': generalComment,\n },\n quantitativeReference: {\n referenceToReferenceProcess: internalIds[finalProcessId],\n },\n technology: {\n processes: {\n processInstance: processInstances.length === 1 ? processInstances[0] : processInstances,\n },\n },\n },\n modellingAndValidation: {\n dataSourcesTreatmentEtc: {\n useAdviceForDataSet: multilangFromText(\n nonEmptyString(state.scope) ??\n 'Built from local process exports and shared-flow graph inference.',\n '基于本地 process 导出结果和共享 flow 图推断生成。',\n ),\n },\n validation: {\n review,\n },\n complianceDeclarations: {\n compliance,\n },\n },\n administrativeInformation: {\n 'common:commissionerAndGoal': commissionerAndGoal,\n dataEntryBy,\n publicationAndOwnership: publication,\n },\n },\n };\n\n return {\n model,\n summary: {\n run_name: runName,\n model_uuid: modelUuid,\n model_version: modelVersion,\n reference_process_uuid: finalProcessId,\n reference_process_internal_id: internalIds[finalProcessId],\n reference_flow_uuid: nonEmptyString(flowSummary.uuid),\n reference_to_resulting_process_uuid: modelUuid,\n process_count: order.length,\n edge_count: edges.length,\n multiplication_factors: Object.fromEntries(\n order.map((processId) => [processId, formatNumber(factors[processId] ?? 0)]),\n ),\n ordered_processes: order.map((processId) => {\n const record = processMap[processId] as ProcessRecord;\n return {\n process_uuid: processId,\n name_en: record.nameEn,\n name_zh: record.nameZh,\n route_en: record.routeEn,\n geography_code: record.geographyCode,\n classification_path: record.classificationPath,\n };\n }),\n source_counts: {\n local_run_export: Object.keys(processMap).length,\n used_local_run_processes: order.length,\n },\n },\n };\n}\n\nfunction buildLocalModels(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n): LifecyclemodelAutoBuildLocalReport[] {\n return normalized.local_runs.map((runDir) => {\n const statePath = path.join(runDir, 'cache', 'process_from_flow_state.json');\n const processDir = path.join(runDir, 'exports', 'processes');\n\n if (!existsSync(statePath)) {\n throw new CliError(`lifecyclemodel auto-build run is missing state file: ${runDir}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_STATE_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n if (!existsSync(processDir)) {\n throw new CliError(`lifecyclemodel auto-build run is missing exported processes: ${runDir}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_EXPORTS_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const state = readJsonInput(statePath);\n if (!isRecord(state)) {\n throw new CliError(`lifecyclemodel auto-build state must be a JSON object: ${statePath}`, {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_STATE_INVALID',\n exitCode: 2,\n });\n }\n\n const processFiles = readdirSync(processDir)\n .filter((item) => item.endsWith('.json'))\n .sort()\n .map((item) => path.join(processDir, item));\n\n if (processFiles.length === 0) {\n throw new CliError(\n `lifecyclemodel auto-build run has no exported process JSON files: ${runDir}`,\n {\n code: 'LIFECYCLEMODEL_AUTO_BUILD_PROCESS_EXPORTS_EMPTY',\n exitCode: 2,\n },\n );\n }\n\n const processMap = Object.fromEntries(\n processFiles.map((filePath) => {\n const record = loadProcessRecord(filePath, 'local_run_export', runDir);\n return [record.processUuid, record];\n }),\n );\n\n const edges = inferEdges(processMap);\n const preferredProcessIds = new Set(Object.keys(processMap));\n const finalProcessId = chooseReferenceProcess(processMap, edges, state, preferredProcessIds);\n const reachable = collectReachable(finalProcessId, edges);\n const order = topologicalOrder(reachable, edges);\n const filteredEdges = edges.filter(\n (edge) => reachable.has(edge.src) && reachable.has(edge.dst),\n );\n const factors = computeMultiplicationFactors(\n processMap,\n reachable,\n filteredEdges,\n order,\n finalProcessId,\n );\n const runName = path.basename(runDir);\n const { model, summary } = buildLifecycleModelDataset(\n runName,\n state,\n processMap,\n order,\n filteredEdges,\n factors,\n finalProcessId,\n );\n const runOut = path.join(layout.modelsDir, runName);\n const bundleOut = path.join(runOut, 'tidas_bundle', 'lifecyclemodels');\n mkdirSync(bundleOut, { recursive: true });\n\n const modelUuid = summary.model_uuid as string;\n const modelVersion = summary.model_version as string;\n const modelFile = path.join(bundleOut, `${modelUuid}_${modelVersion}.json`);\n const summaryFile = path.join(runOut, 'summary.json');\n const connectionsFile = path.join(runOut, 'connections.json');\n const processCatalogFile = path.join(runOut, 'process-catalog.json');\n\n writeJsonArtifact(modelFile, model);\n writeJsonArtifact(summaryFile, summary);\n writeJsonArtifact(\n connectionsFile,\n filteredEdges.map((edge) => ({\n src: edge.src,\n dst: edge.dst,\n flow_uuid: edge.flowUuid,\n downstream_input_amount: formatNumber(edge.downstreamInputAmount),\n confidence: formatNumber(edge.confidence),\n reasons: edge.reasons,\n src_name_en: processMap[edge.src].nameEn,\n dst_name_en: processMap[edge.dst].nameEn,\n src_source_kind: processMap[edge.src].sourceKind,\n dst_source_kind: processMap[edge.dst].sourceKind,\n })),\n );\n writeJsonArtifact(\n processCatalogFile,\n Object.entries(processMap)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([processId, record]) => ({\n process_uuid: processId,\n name_en: record.nameEn,\n name_zh: record.nameZh,\n route_en: record.routeEn,\n mix_en: record.mixEn,\n geography_code: record.geographyCode,\n classification_path: record.classificationPath,\n reference_flow_uuid: record.referenceFlowUuid,\n reference_direction: record.referenceDirection,\n reference_amount: formatNumber(record.referenceAmount),\n input_flow_count: Object.keys(record.inputAmounts).length,\n output_flow_count: Object.keys(record.outputAmounts).length,\n source_kind: record.sourceKind,\n source_label: record.sourceLabel,\n included_process_ref_count: record.includedProcessRefCount,\n })),\n );\n\n return {\n run_dir: runDir,\n run_name: runName,\n model_file: modelFile,\n summary_file: summaryFile,\n connections_file: connectionsFile,\n process_catalog_file: processCatalogFile,\n summary,\n };\n });\n}\n\nfunction buildNextActions(layout: LifecyclemodelAutoBuildLayout): string[] {\n return [\n `inspect: ${layout.runPlanPath}`,\n `inspect: ${layout.modelsDir}`,\n `run: tiangong-lca lifecyclemodel validate-build --run-dir ${layout.runRoot}`,\n `run: tiangong-lca lifecyclemodel publish-build --run-dir ${layout.runRoot}`,\n ];\n}\n\nfunction buildReport(\n normalized: NormalizedLifecyclemodelAutoBuildRequest,\n layout: LifecyclemodelAutoBuildLayout,\n localBuildReports: LifecyclemodelAutoBuildLocalReport[],\n now: Date,\n): LifecyclemodelAutoBuildReport {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: 'completed_local_lifecyclemodel_auto_build_run',\n request_path: normalized.request_path,\n run_id: normalized.run_id,\n run_root: normalized.run_root,\n local_run_count: normalized.local_runs.length,\n built_model_count: localBuildReports.length,\n files: {\n request_snapshot: layout.requestSnapshotPath,\n normalized_request: layout.normalizedRequestPath,\n run_plan: layout.runPlanPath,\n resolved_manifest: layout.resolvedManifestPath,\n selection_brief: layout.selectionBriefPath,\n reference_model_summary: layout.referenceModelSummaryPath,\n invocation_index: layout.invocationIndexPath,\n run_manifest: layout.runManifestPath,\n report: layout.reportPath,\n },\n local_build_reports: localBuildReports,\n next_actions: buildNextActions(layout),\n };\n}\n\nexport async function runLifecyclemodelAutoBuild(\n options: RunLifecyclemodelAutoBuildOptions,\n): Promise<LifecyclemodelAutoBuildReport> {\n const input = options.inputValue ?? readJsonInput(options.inputPath);\n const now = options.now ?? new Date();\n const normalized = normalizeLifecyclemodelAutoBuildRequest(input, {\n inputPath: options.inputPath,\n outDir: options.outDir,\n now,\n runIdOverride: options.runIdOverride,\n });\n const layout = buildLayout(normalized.run_root, normalized.run_id);\n\n ensureEmptyRunRoot(layout.runRoot);\n ensureLayout(layout);\n\n writeJsonArtifact(layout.requestSnapshotPath, input);\n writeJsonArtifact(layout.normalizedRequestPath, normalized);\n writeTextArtifact(layout.selectionBriefPath, buildSelectionBrief(normalized.manifest));\n writeJsonArtifact(\n layout.referenceModelSummaryPath,\n buildReferenceModelSummary(normalized.manifest),\n );\n writeJsonArtifact(layout.resolvedManifestPath, normalized.manifest);\n writeJsonArtifact(\n layout.invocationIndexPath,\n buildInvocationIndex(normalized, options, layout, now),\n );\n writeJsonArtifact(\n layout.runManifestPath,\n buildRunManifest({\n layout,\n command: options.outDir\n ? [\n 'lifecyclemodel',\n 'auto-build',\n '--input',\n options.inputPath,\n '--out-dir',\n options.outDir,\n ]\n : ['lifecyclemodel', 'auto-build', '--input', options.inputPath],\n cwd: options.cwd,\n createdAt: now,\n }),\n );\n\n const plan = buildPlan(normalized, layout, now);\n writeJsonArtifact(layout.runPlanPath, plan);\n\n const localBuildReports = buildLocalModels(normalized, layout);\n const completedPlan = {\n ...plan,\n local_build_reports: localBuildReports,\n };\n writeJsonArtifact(layout.runPlanPath, completedPlan);\n\n const report = buildReport(normalized, layout, localBuildReports, now);\n writeJsonArtifact(layout.reportPath, report);\n writeLatestRunId(layout, normalized.run_id);\n return report;\n}\n\nexport const __testInternals = {\n DEFAULT_MANIFEST,\n copyJson,\n ensureList,\n numberOrZero,\n firstText,\n langTextMap,\n localizedText,\n multilangText,\n multilangFromText,\n deepMerge,\n buildLayout,\n buildSelectionBrief,\n buildReferenceModelSummary,\n normalizeLocalRuns,\n uuid5FromText,\n extractClassificationPath,\n classificationOverlap,\n extractFlowDatasetFromState,\n resolvePublicationBlock,\n loadProcessRecord,\n scoreEdgeCandidate,\n inferEdges,\n chooseReferenceProcess,\n collectReachable,\n topologicalOrder,\n computeMultiplicationFactors,\n exchangeAmount,\n cloneExchangeWithAmount,\n buildProcessInstances,\n buildLifecycleModelDataset,\n buildPlan,\n formatNumber,\n buildNameSummary,\n toJsonNumber,\n};\n"]}
|