@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.
Files changed (58) hide show
  1. package/README.md +73 -30
  2. package/dist/src/cli.js +912 -113
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/lib/dataset-local.js +231 -0
  5. package/dist/src/lib/dataset-local.js.map +1 -0
  6. package/dist/src/lib/dataset-references-rewrite.js +214 -0
  7. package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
  8. package/dist/src/lib/dataset-validate.js +191 -0
  9. package/dist/src/lib/dataset-validate.js.map +1 -0
  10. package/dist/src/lib/flow-regen-product.js +2 -10
  11. package/dist/src/lib/flow-regen-product.js.map +1 -1
  12. package/dist/src/lib/flow-remediate.js +4 -8
  13. package/dist/src/lib/flow-remediate.js.map +1 -1
  14. package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
  15. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
  16. package/dist/src/lib/lifecyclemodel-graph.js +248 -0
  17. package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
  18. package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
  19. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
  20. package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
  21. package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
  22. package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
  23. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
  24. package/dist/src/lib/process-auto-build.js +11 -8
  25. package/dist/src/lib/process-auto-build.js.map +1 -1
  26. package/dist/src/lib/process-batch-build.js +6 -3
  27. package/dist/src/lib/process-batch-build.js.map +1 -1
  28. package/dist/src/lib/process-dedup-review.js +870 -0
  29. package/dist/src/lib/process-dedup-review.js.map +1 -0
  30. package/dist/src/lib/process-payload-validation.js +50 -0
  31. package/dist/src/lib/process-payload-validation.js.map +1 -0
  32. package/dist/src/lib/process-publish-build.js +4 -6
  33. package/dist/src/lib/process-publish-build.js.map +1 -1
  34. package/dist/src/lib/process-refresh-references.js +1028 -0
  35. package/dist/src/lib/process-refresh-references.js.map +1 -0
  36. package/dist/src/lib/process-resume-build.js +4 -6
  37. package/dist/src/lib/process-resume-build.js.map +1 -1
  38. package/dist/src/lib/process-save-draft-run.js +31 -12
  39. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  40. package/dist/src/lib/process-scope-statistics.js +859 -0
  41. package/dist/src/lib/process-scope-statistics.js.map +1 -0
  42. package/dist/src/lib/process-verify-rows.js +250 -0
  43. package/dist/src/lib/process-verify-rows.js.map +1 -0
  44. package/dist/src/lib/publish.js +1 -1
  45. package/dist/src/lib/publish.js.map +1 -1
  46. package/dist/src/lib/remote.js +4 -4
  47. package/dist/src/lib/remote.js.map +1 -1
  48. package/dist/src/lib/review-lifecyclemodel.js +2 -2
  49. package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
  50. package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
  51. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  52. package/dist/src/lib/tidas-sdk-validation.js +96 -0
  53. package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
  54. package/dist/src/lib/user-api-key.js +1 -1
  55. package/dist/src/lib/user-api-key.js.map +1 -1
  56. package/package.json +4 -4
  57. /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
  58. /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"flow-remediate.js","sourceRoot":"","sources":["../../../src/lib/flow-remediate.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n normalizeText,\n type JsonRecord,\n} from './flow-governance.js';\n\nconst CONTACT_UUID = 'f4b4c314-8c4c-4c83-968f-5b3c7724f6a8';\nconst CONTACT_VERSION = '01.00.000';\nconst COMPLIANCE_SOURCE_UUID = 'd92a1a12-2545-49e2-a585-55c259997756';\nconst COMPLIANCE_SOURCE_VERSION = '20.20.002';\nconst ILCD_FORMAT_SOURCE_UUID = 'a97a0155-0234-4b87-b4ce-a45da52f2a40';\nconst ILCD_FORMAT_SOURCE_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_UUID = '93a60a56-a3c8-11da-a746-0800200b9a66';\nconst DEFAULT_MASS_FLOW_PROPERTY_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_NAME = 'Mass';\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u;\nconst VERSION_QUERY_RE = /([?&]version=)(\\d+\\.\\d+\\.\\d+)/u;\nconst LOCAL_URI_VERSION_RE = /_(\\d+\\.\\d+\\.\\d+)\\.xml$/u;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst GENERIC_MASS_HINTS = new Set([\n 'flow property for kg',\n 'flow property for kilogram',\n 'flow property for kilograms',\n 'kg',\n 'kilogram',\n 'kilograms',\n 'mass',\n 'mass flow',\n 'mass flow kg',\n]);\n\ntype FlowValidationIssue = {\n validator: 'tidas_sdk';\n path: string;\n message: string;\n code: string;\n};\n\ntype FlowRemediationAuditRow = {\n id: unknown;\n user_id: unknown;\n state_code: unknown;\n version_before: string;\n version_after: string;\n valid_after_remediation: boolean;\n applied_fixes: string[];\n original_reason: unknown[];\n final_reason: FlowValidationIssue[];\n};\n\ntype FlowRemediationRowResult = {\n row: JsonRecord;\n valid: boolean;\n appliedFixes: string[];\n finalReasons: FlowValidationIssue[];\n versionBefore: string;\n versionAfter: string;\n};\n\ntype FlowValidationResult =\n | {\n success: true;\n }\n | {\n success: false;\n issues: FlowValidationIssue[];\n };\n\ntype FlowSdkValidationEntity = {\n validate?: () => unknown;\n};\n\ntype FlowSdkModule = {\n createFlow?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => FlowSdkValidationEntity;\n};\n\ntype FlowRemediationFiles = {\n allRemediated: string;\n readyForMcp: string;\n residualManualQueue: string;\n audit: string;\n report: string;\n prompt: string;\n};\n\nexport type FlowRemediationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_remediation';\n input_file: string;\n out_dir: string;\n counts: {\n input_rows: number;\n state_code_0_rows: number;\n state_code_100_rows: number;\n remediated_rows: number;\n ready_for_mcp_rows: number;\n residual_manual_rows: number;\n };\n applied_fix_counts: Record<string, number>;\n residual_manual_ids: string[];\n validation_backend: 'tidas_sdk';\n files: {\n all_remediated: string;\n ready_for_mcp: string;\n residual_manual_queue: string;\n audit: string;\n prompt: string;\n report: string;\n };\n};\n\nexport type RunFlowRemediateOptions = {\n inputFile: string;\n outDir: string;\n};\n\ntype FlowRemediationDeps = {\n loadSdkModule?: () => FlowSdkModule & { location?: string };\n now?: () => Date;\n};\n\ntype FlowPropertyDescriptor = {\n uuid: string;\n name: string;\n version: string;\n};\n\nfunction build_sdk_candidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolve_sdk_module_from_candidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): FlowSdkModule & { location: string } {\n const details: string[] = [];\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as FlowSdkModule;\n if (typeof loaded.createFlow === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createFlow export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk flow factory.', {\n code: 'FLOW_REMEDIATE_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolve_local_sdk_module(): FlowSdkModule & { location: string } {\n return resolve_sdk_module_from_candidates(createRequire(import.meta.url), build_sdk_candidates());\n}\n\nfunction assert_input_file(inputFile: string): string {\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_REMEDIATE_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Flow remediation input file not found: ${resolved}`, {\n code: 'FLOW_REMEDIATE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REMEDIATE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction build_output_files(outDir: string): FlowRemediationFiles {\n return {\n allRemediated: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_all.jsonl`),\n readyForMcp: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_ready_for_mcp.jsonl`),\n residualManualQueue: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue.jsonl`),\n audit: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_audit.jsonl`),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_report.json`),\n prompt: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue_prompt.md`),\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n process: 'processes',\n 'process data set': 'processes',\n flow: 'flows',\n 'flow data set': 'flows',\n source: 'sources',\n 'source data set': 'sources',\n contact: 'contacts',\n 'contact data set': 'contacts',\n 'flow property data set': 'flowproperties',\n };\n const kind = datasetKind.trim().toLowerCase();\n const folder = folderMap[kind] ?? 'datasets';\n const versionText = version.trim() || '01.01.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction build_dataset_format_reference(): JsonRecord {\n return {\n '@refObjectId': ILCD_FORMAT_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri('source', ILCD_FORMAT_SOURCE_UUID, ILCD_FORMAT_SOURCE_VERSION),\n '@version': ILCD_FORMAT_SOURCE_VERSION,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': 'ILCD format' }],\n };\n}\n\nfunction normalize_multilang_entries(value: unknown): JsonRecord[] | null {\n if (typeof value === 'string') {\n const text = value.trim();\n return text ? [{ '@xml:lang': 'en', '#text': text }] : null;\n }\n\n if (Array.isArray(value)) {\n const entries = value.flatMap((item) => normalize_multilang_entries(item) ?? []);\n return entries.length ? entries : null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n const text = coerceText(value['#text']);\n if (!text) {\n return null;\n }\n\n return [\n {\n '@xml:lang': coerceText(value['@xml:lang']) || 'en',\n '#text': text,\n },\n ];\n}\n\nfunction first_text(value: unknown, fallback = ''): string {\n const normalized = normalize_multilang_entries(value);\n return normalized?.[0]?.['#text'] ? String(normalized[0]['#text']) : fallback;\n}\n\nfunction normalize_multilang_field(container: JsonRecord, key: string, fixes: string[]): void {\n if (!(key in container)) {\n return;\n }\n const normalized = normalize_multilang_entries(container[key]);\n if (!normalized) {\n delete container[key];\n fixes.push(`remove_empty_multilang:${key}`);\n return;\n }\n if (JSON.stringify(container[key]) !== JSON.stringify(normalized)) {\n container[key] = normalized;\n fixes.push(`normalize_multilang:${key}`);\n }\n}\n\nfunction normalize_name_block(dataSetInfo: JsonRecord, fixes: string[]): void {\n const nameBlock = isRecord(dataSetInfo.name) ? dataSetInfo.name : null;\n if (!nameBlock) {\n return;\n }\n\n for (const key of [\n 'baseName',\n 'flowProperties',\n 'mixAndLocationTypes',\n 'treatmentStandardsRoutes',\n ]) {\n if (!(key in nameBlock)) {\n continue;\n }\n const normalized = normalize_multilang_entries(nameBlock[key]);\n if (!normalized) {\n delete nameBlock[key];\n fixes.push(`remove_empty_name_field:${key}`);\n continue;\n }\n if (JSON.stringify(nameBlock[key]) !== JSON.stringify(normalized)) {\n nameBlock[key] = normalized;\n fixes.push(`normalize_name_field:${key}`);\n }\n }\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = version.split('.');\n const numbers = [0, 0, 0].map((_, index) => {\n const raw = parts[index];\n const parsed = raw ? Number.parseInt(raw, 10) : 0;\n return Number.isInteger(parsed) ? parsed : 0;\n });\n numbers[2] += 1;\n return `${numbers[0].toString().padStart(2, '0')}.${numbers[1].toString().padStart(2, '0')}.${numbers[2]\n .toString()\n .padStart(3, '0')}`;\n}\n\nfunction version_from_uri(uri: string): string {\n const text = uri.trim();\n if (!text) {\n return '';\n }\n const localMatch = text.match(LOCAL_URI_VERSION_RE);\n if (localMatch) {\n return localMatch[1] as string;\n }\n const queryMatch = text.match(VERSION_QUERY_RE);\n return queryMatch?.[2] ?? '';\n}\n\nfunction normalize_reference_block(\n ref: unknown,\n defaultType: string,\n shortDescriptionFallback: string,\n): JsonRecord | null {\n if (!isRecord(ref)) {\n return null;\n }\n const refObjectId = coerceText(ref['@refObjectId']).toLowerCase();\n if (!refObjectId) {\n return null;\n }\n\n const refType = coerceText(ref['@type']) || defaultType;\n const version =\n coerceText(ref['@version']) ||\n version_from_uri(coerceText(ref['@uri'])) ||\n (refObjectId === ILCD_FORMAT_SOURCE_UUID\n ? ILCD_FORMAT_SOURCE_VERSION\n : refObjectId === COMPLIANCE_SOURCE_UUID\n ? COMPLIANCE_SOURCE_VERSION\n : '');\n const shortDescription =\n normalize_multilang_entries(ref['common:shortDescription']) ??\n (shortDescriptionFallback ? [{ '@xml:lang': 'en', '#text': shortDescriptionFallback }] : null);\n\n const result: JsonRecord = {\n '@type': refType,\n '@refObjectId': refObjectId,\n '@uri': version\n ? build_local_dataset_uri(refType, refObjectId, version)\n : coerceText(ref['@uri']),\n };\n if (version) {\n result['@version'] = version;\n }\n if (shortDescription) {\n result['common:shortDescription'] = shortDescription;\n }\n return result;\n}\n\nfunction canonical_contact_reference(): JsonRecord {\n return {\n '@type': 'contact data set',\n '@refObjectId': CONTACT_UUID,\n '@uri': build_local_dataset_uri('contact data set', CONTACT_UUID, CONTACT_VERSION),\n '@version': CONTACT_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'Tiangong LCA Data Working Group' },\n { '@xml:lang': 'zh', '#text': '天工LCA数据团队' },\n ],\n };\n}\n\nfunction canonical_compliance_block(): JsonRecord {\n return {\n 'common:referenceToComplianceSystem': {\n '@refObjectId': COMPLIANCE_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri(\n 'source data set',\n COMPLIANCE_SOURCE_UUID,\n COMPLIANCE_SOURCE_VERSION,\n ),\n '@version': COMPLIANCE_SOURCE_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'ILCD Data Network - Entry-level' },\n ],\n },\n 'common:approvalOfOverallCompliance': 'Fully compliant',\n };\n}\n\nfunction normalize_hint_text(value: unknown): string {\n return normalizeText(first_text(value));\n}\n\nfunction infer_flow_property_descriptor_from_hint(value: unknown): FlowPropertyDescriptor | null {\n const normalized = normalize_hint_text(value);\n if (!normalized) {\n return null;\n }\n\n if (\n GENERIC_MASS_HINTS.has(normalized) ||\n (normalized.startsWith('flow property for ') && /\\b(kg|kilogram|kilograms)\\b/u.test(normalized))\n ) {\n return {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n };\n }\n\n return null;\n}\n\nfunction build_flow_property_item(\n descriptor: FlowPropertyDescriptor,\n internalId: string,\n meanValue: string,\n): JsonRecord {\n return {\n '@dataSetInternalID': internalId,\n meanValue,\n referenceToFlowPropertyDataSet: {\n '@type': 'flow property data set',\n '@refObjectId': descriptor.uuid,\n '@uri': build_local_dataset_uri(\n 'flow property data set',\n descriptor.uuid,\n descriptor.version,\n ),\n '@version': descriptor.version,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': descriptor.name }],\n },\n };\n}\n\nfunction normalize_flow_properties(\n dataset: JsonRecord,\n fixes: string[],\n): { items: JsonRecord[]; unresolved: FlowValidationIssue[] } {\n const flowPropertiesBlock = isRecord(dataset.flowProperties) ? dataset.flowProperties : {};\n dataset.flowProperties = flowPropertiesBlock;\n const rawItems = flowPropertiesBlock.flowProperty;\n const items = Array.isArray(rawItems) ? rawItems : rawItems ? [rawItems] : [];\n const normalizedItems: JsonRecord[] = [];\n const unresolved: FlowValidationIssue[] = [];\n let repairedUnknownUuid = false;\n let filledMissingUuid = false;\n let usedDefaultMassFallback = false;\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!isRecord(item)) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty',\n message: 'flowProperty item is not an object',\n code: 'unsupported_item_type',\n });\n continue;\n }\n\n const reference = isRecord(item.referenceToFlowPropertyDataSet)\n ? item.referenceToFlowPropertyDataSet\n : null;\n const hint = reference?.['common:shortDescription'] ?? reference;\n const internalId = coerceText(item['@dataSetInternalID']) || String(index);\n const meanValue = coerceText(item.meanValue) || '1.0';\n const refUuid = coerceText(reference?.['@refObjectId']).toLowerCase();\n const refVersion =\n coerceText(reference?.['@version']) || version_from_uri(coerceText(reference?.['@uri']));\n let descriptor: FlowPropertyDescriptor | null;\n\n if (refUuid && UUID_RE.test(refUuid)) {\n descriptor = {\n uuid: refUuid,\n name: first_text(hint, DEFAULT_MASS_FLOW_PROPERTY_NAME),\n version:\n refVersion ||\n (refUuid === DEFAULT_MASS_FLOW_PROPERTY_UUID\n ? DEFAULT_MASS_FLOW_PROPERTY_VERSION\n : '01.01.000'),\n };\n } else {\n descriptor = infer_flow_property_descriptor_from_hint(hint);\n if (descriptor) {\n if (refUuid) {\n repairedUnknownUuid = true;\n } else {\n filledMissingUuid = true;\n }\n }\n }\n\n if (!descriptor) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty.referenceToFlowPropertyDataSet.@refObjectId',\n message: refUuid\n ? `Unknown flow property UUID: ${refUuid}`\n : 'Unable to infer flow property UUID from the reference block',\n code: 'unknown_flow_property_uuid',\n });\n continue;\n }\n\n normalizedItems.push(build_flow_property_item(descriptor, internalId, meanValue));\n }\n\n if (!normalizedItems.length) {\n if (!items.length) {\n normalizedItems.push(\n build_flow_property_item(\n {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n },\n '0',\n '1.0',\n ),\n );\n usedDefaultMassFallback = true;\n } else {\n delete flowPropertiesBlock.flowProperty;\n return { items: [], unresolved };\n }\n }\n\n flowPropertiesBlock.flowProperty =\n normalizedItems.length === 1 ? normalizedItems[0] : normalizedItems;\n fixes.push('normalize_flow_properties');\n if (repairedUnknownUuid) {\n fixes.push('repair_unknown_flow_property_uuid_from_short_description');\n }\n if (filledMissingUuid) {\n fixes.push('fill_missing_flow_property_uuid_from_short_description');\n }\n if (usedDefaultMassFallback) {\n fixes.push('set_default_mass_flow_property');\n }\n return { items: normalizedItems, unresolved };\n}\n\nfunction normalize_quantitative_reference(\n dataset: JsonRecord,\n normalizedFlowProperties: JsonRecord[],\n fixes: string[],\n unresolved: FlowValidationIssue[],\n): void {\n const flowInformation = isRecord(dataset.flowInformation) ? dataset.flowInformation : {};\n dataset.flowInformation = flowInformation;\n const quantitativeReference = isRecord(flowInformation.quantitativeReference)\n ? flowInformation.quantitativeReference\n : {};\n flowInformation.quantitativeReference = quantitativeReference;\n\n if (!normalizedFlowProperties.length) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowInformation.quantitativeReference.referenceToReferenceFlowProperty',\n message:\n 'Cannot infer referenceToReferenceFlowProperty without any valid flowProperty entries',\n code: 'missing_flow_properties',\n });\n return;\n }\n\n const allowedIds = new Set(\n normalizedFlowProperties\n .map((item) => coerceText(item['@dataSetInternalID']))\n .filter((value) => value.length > 0),\n );\n const current = coerceText(quantitativeReference.referenceToReferenceFlowProperty);\n if (!allowedIds.has(current)) {\n quantitativeReference.referenceToReferenceFlowProperty = coerceText(\n normalizedFlowProperties[0]?.['@dataSetInternalID'],\n );\n fixes.push('set_reference_to_reference_flow_property');\n }\n}\n\nfunction normalize_technology_multilang_fields(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology)) {\n return;\n }\n normalize_multilang_field(technology, 'technologicalApplicability', fixes);\n}\n\nfunction normalize_technical_specification(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology) || !('referenceToTechnicalSpecification' in technology)) {\n return;\n }\n const normalized = normalize_reference_block(\n technology.referenceToTechnicalSpecification,\n 'source data set',\n first_text(technology.referenceToTechnicalSpecification),\n );\n if (!normalized) {\n delete technology.referenceToTechnicalSpecification;\n fixes.push('remove_invalid_reference_to_technical_specification');\n return;\n }\n if (JSON.stringify(technology.referenceToTechnicalSpecification) !== JSON.stringify(normalized)) {\n technology.referenceToTechnicalSpecification = normalized;\n fixes.push('normalize_reference_to_technical_specification');\n }\n}\n\nfunction update_permanent_dataset_uri(uriValue: unknown, targetVersion: string): unknown {\n const uri = coerceText(uriValue);\n if (!uri) {\n return uriValue;\n }\n if (VERSION_QUERY_RE.test(uri)) {\n return uri.replace(VERSION_QUERY_RE, `$1${targetVersion}`);\n }\n return uriValue;\n}\n\nfunction parse_validation_error(error: unknown): FlowValidationIssue[] {\n if (isRecord(error) && Array.isArray(error.issues)) {\n const issues = error.issues.filter(isRecord).map((issue) => {\n const pathValue = Array.isArray(issue.path)\n ? issue.path.map((part) => String(part)).join('.')\n : '<exception>';\n return {\n validator: 'tidas_sdk' as const,\n path: pathValue || '<exception>',\n message: coerceText(issue.message) || String(error),\n code: coerceText(issue.code) || 'validation_error',\n };\n });\n if (issues.length) {\n return issues;\n }\n }\n\n return [\n {\n validator: 'tidas_sdk',\n path: '<exception>',\n message: String(error),\n code: 'exception',\n },\n ];\n}\n\nfunction validate_flow_payload(\n payload: JsonRecord,\n deps: FlowRemediationDeps,\n): FlowValidationResult {\n const sdkModule = (deps.loadSdkModule ?? resolve_local_sdk_module)();\n if (typeof sdkModule.createFlow !== 'function') {\n throw new CliError('Resolved tidas-sdk core module does not expose createFlow.', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n\n try {\n const entity = sdkModule.createFlow(payload, {\n mode: 'strict',\n throwOnError: false,\n deepValidation: true,\n });\n if (!entity || typeof entity.validate !== 'function') {\n throw new CliError('Resolved tidas-sdk flow entity does not expose validate().', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n const result = entity.validate();\n if (isRecord(result) && result.success === true) {\n return { success: true };\n }\n return {\n success: false,\n issues: parse_validation_error(isRecord(result) ? result.error : result),\n };\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n return {\n success: false,\n issues: parse_validation_error(error),\n };\n }\n}\n\nfunction remediate_row(row: JsonRecord, deps: FlowRemediationDeps): FlowRemediationRowResult {\n const working = JSON.parse(JSON.stringify(row)) as JsonRecord;\n const payload = isRecord(working.json_ordered) ? working.json_ordered : null;\n const flowDataSet = isRecord(payload?.flowDataSet) ? payload.flowDataSet : null;\n\n if (!payload || !flowDataSet) {\n return {\n row: working,\n valid: false,\n appliedFixes: [],\n finalReasons: [\n {\n validator: 'tidas_sdk',\n path: 'json_ordered.flowDataSet',\n message: 'Missing flowDataSet payload',\n code: 'missing_flow_dataset',\n },\n ],\n versionBefore: '',\n versionAfter: '',\n };\n }\n\n const fixes: string[] = [];\n const residualUnresolved: FlowValidationIssue[] = [];\n const flowInformation = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n flowDataSet.flowInformation = flowInformation;\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n flowInformation.dataSetInformation = dataSetInformation;\n\n normalize_name_block(dataSetInformation, fixes);\n for (const key of [\n 'common:synonyms',\n 'common:generalComment',\n 'common:shortDescription',\n 'common:name',\n 'common:shortName',\n ]) {\n normalize_multilang_field(dataSetInformation, key, fixes);\n }\n if (isRecord(dataSetInformation['common:other'])) {\n delete dataSetInformation['common:other'];\n fixes.push('remove_common_other_object');\n }\n if (dataSetInformation.CASNumber === '') {\n delete dataSetInformation.CASNumber;\n fixes.push('remove_empty_cas_number');\n }\n\n const administrativeInformation = isRecord(flowDataSet.administrativeInformation)\n ? flowDataSet.administrativeInformation\n : {};\n flowDataSet.administrativeInformation = administrativeInformation;\n const dataEntryBy = isRecord(administrativeInformation.dataEntryBy)\n ? administrativeInformation.dataEntryBy\n : {};\n administrativeInformation.dataEntryBy = dataEntryBy;\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n\n const formatReference = build_dataset_format_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToDataSetFormat']) !==\n JSON.stringify(formatReference)\n ) {\n dataEntryBy['common:referenceToDataSetFormat'] = formatReference;\n fixes.push('set_reference_to_dataset_format');\n }\n\n const contactReference = canonical_contact_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToPersonOrEntityEnteringTheData']) !==\n JSON.stringify(contactReference)\n ) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'] = contactReference;\n fixes.push('set_reference_to_person_or_entity_entering_the_data');\n }\n if (\n JSON.stringify(publicationAndOwnership['common:referenceToOwnershipOfDataSet']) !==\n JSON.stringify(contactReference)\n ) {\n publicationAndOwnership['common:referenceToOwnershipOfDataSet'] = contactReference;\n fixes.push('set_reference_to_ownership_of_dataset');\n }\n\n const modellingAndValidation = isRecord(flowDataSet.modellingAndValidation)\n ? flowDataSet.modellingAndValidation\n : {};\n flowDataSet.modellingAndValidation = modellingAndValidation;\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n modellingAndValidation.complianceDeclarations = complianceDeclarations;\n const complianceBlock = canonical_compliance_block();\n if (JSON.stringify(complianceDeclarations.compliance) !== JSON.stringify(complianceBlock)) {\n complianceDeclarations.compliance = complianceBlock;\n fixes.push('set_compliance_block');\n }\n\n const flowProperties = normalize_flow_properties(flowDataSet, fixes);\n residualUnresolved.push(...flowProperties.unresolved);\n normalize_quantitative_reference(flowDataSet, flowProperties.items, fixes, residualUnresolved);\n normalize_technology_multilang_fields(flowDataSet, fixes);\n normalize_technical_specification(flowDataSet, fixes);\n\n const flowUuid =\n coerceText(dataSetInformation['common:UUID']) || coerceText(working.id) || 'unknown-flow';\n if (!coerceText(publicationAndOwnership['common:dataSetVersion'])) {\n publicationAndOwnership['common:dataSetVersion'] = '01.01.000';\n }\n\n const versionBefore = coerceText(publicationAndOwnership['common:dataSetVersion']);\n let versionAfter = versionBefore;\n const stateCode = Number.parseInt(coerceText(working.state_code) || '0', 10) || 0;\n\n if (stateCode === 100) {\n versionAfter = bump_ilcd_version(versionBefore);\n if (versionAfter !== versionBefore) {\n publicationAndOwnership['common:dataSetVersion'] = versionAfter;\n fixes.push('bump_dataset_version');\n publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] = {\n '@type': 'flow data set',\n '@refObjectId': flowUuid,\n '@uri': build_local_dataset_uri('flow data set', flowUuid, versionBefore),\n '@version': versionBefore,\n 'common:shortDescription': [\n {\n '@xml:lang': 'en',\n '#text': first_text(deepGet(dataSetInformation, ['name', 'baseName']), flowUuid),\n },\n ],\n };\n fixes.push('set_reference_to_preceding_dataset_version');\n const permanentUri = update_permanent_dataset_uri(\n publicationAndOwnership['common:permanentDataSetURI'],\n versionAfter,\n );\n if (permanentUri !== publicationAndOwnership['common:permanentDataSetURI']) {\n publicationAndOwnership['common:permanentDataSetURI'] = permanentUri;\n fixes.push('update_permanent_dataset_uri_version');\n }\n if ('version' in working) {\n working.version = versionAfter;\n }\n }\n } else if (\n isRecord(publicationAndOwnership['common:referenceToPrecedingDataSetVersion']) &&\n !Object.keys(publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] as JsonRecord)\n .length\n ) {\n delete publicationAndOwnership['common:referenceToPrecedingDataSetVersion'];\n fixes.push('remove_empty_reference_to_preceding_dataset_version');\n }\n\n const validation = validate_flow_payload(payload, deps);\n const finalReasons =\n validation.success === true\n ? residualUnresolved\n : [...residualUnresolved, ...validation.issues];\n\n working.json_ordered = payload;\n working.reason = finalReasons;\n\n return {\n row: working,\n valid: finalReasons.length === 0,\n appliedFixes: fixes,\n finalReasons,\n versionBefore,\n versionAfter,\n };\n}\n\nfunction build_prompt(manualRows: JsonRecord[], manualFile: string, promptFile: string): string {\n if (!manualRows.length) {\n return `本轮 deterministic remediation 之后,residual manual queue 为 0。\n\n输入文件:\n\\`${manualFile}\\`\n\n结果:\n1. 当前没有需要再交给 OpenClaw 手工修复的 flow。\n2. 可直接对 ready-for-MCP 文件执行后续批量处理。\n3. 如果后续换了新的输入批次,再重新生成 residual manual queue prompt。\n`;\n }\n\n const queueIds = manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0)\n .map((value) => `- \\`${value}\\``)\n .join('\\n');\n const outputFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_fixed.jsonl`,\n );\n const stillInvalidFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_still_invalid.jsonl`,\n );\n\n return `你现在要处理 residual manual queue 中 deterministic remediator 之后仍未通过 tidas-sdk 本地校验的 flow。\n\n输入文件:\n\\`${manualFile}\\`\n\n输出文件:\n\\`${outputFile}\\`\n\n执行要求:\n1. 只修改每条记录里的 json_ordered.flowDataSet,保留外层 envelope key:id、user_id、json_ordered、reason、state_code。\n2. 保持相同 UUID,不要改 id。\n3. state_code=0 的 flow 保持当前 common:dataSetVersion 不变。\n4. state_code=100 的 flow 已经完成 deterministic version bump,并已补 common:referenceToPrecedingDataSetVersion;除非绝对必要,不要再次 bump version。\n5. 优先补齐合法的 flowProperties.flowProperty 和 flowInformation.quantitativeReference.referenceToReferenceFlowProperty,让数据先通过本地 TIDAS SDK 校验。\n6. 不要无故重写 classification、命名、comment;如果必须改,改动最小,并在结果里保留必要说明。\n7. 每条输出仍按一行一个 JSON object 的 JSONL 形式写入。\n8. 修复成功的行把 reason 置为 [];如果仍无法修复,单独另存并写明残留原因。\n\n当前 residual manual queue 共 ${manualRows.length} 条:\n${queueIds || '- None'}\n\n建议步骤:\n1. 逐条读取 reason 和 json_ordered.flowDataSet。\n2. 先判断缺失的是 flowProperties 本体,还是只有 quantitative reference 丢失。\n3. 能从现有 classificationInformation、baseName、flow type、name.flowProperties 推断合法 flow property 的,补成最小合法块。\n4. 每改完一条都本地验证一次 TIDAS SDK。\n5. 把通过校验的 patched row 写到 \\`${outputFile}\\`。\n\n如果你还要保留未解决项,另写一个旁路文件:\n\\`${stillInvalidFile}\\`\n`;\n}\n\nexport async function runFlowRemediate(\n options: RunFlowRemediateOptions,\n deps: FlowRemediationDeps = {},\n): Promise<FlowRemediationReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const rows = loadRowsFromFile(inputFile);\n const files = build_output_files(outDir);\n const now = deps.now ?? (() => new Date());\n\n const remediatedRows: JsonRecord[] = [];\n const validRows: JsonRecord[] = [];\n const manualRows: JsonRecord[] = [];\n const auditRows: FlowRemediationAuditRow[] = [];\n const appliedFixCounts: Record<string, number> = {};\n\n for (const row of rows) {\n const result = remediate_row(row, deps);\n remediatedRows.push(result.row);\n if (result.valid) {\n validRows.push(result.row);\n } else {\n manualRows.push(result.row);\n }\n\n result.appliedFixes.forEach((fix) => {\n appliedFixCounts[fix] = (appliedFixCounts[fix] ?? 0) + 1;\n });\n\n auditRows.push({\n id: row.id,\n user_id: row.user_id,\n state_code: row.state_code,\n version_before: result.versionBefore,\n version_after: result.versionAfter,\n valid_after_remediation: result.valid,\n applied_fixes: result.appliedFixes,\n original_reason: Array.isArray(row.reason) ? row.reason : [],\n final_reason: result.finalReasons,\n });\n }\n\n writeJsonLinesArtifact(files.allRemediated, remediatedRows);\n writeJsonLinesArtifact(files.readyForMcp, validRows);\n writeJsonLinesArtifact(files.residualManualQueue, manualRows);\n writeJsonLinesArtifact(files.audit, auditRows);\n writeTextArtifact(\n files.prompt,\n build_prompt(manualRows, files.residualManualQueue, files.prompt),\n );\n\n const report: FlowRemediationReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_remediation',\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n input_rows: rows.length,\n state_code_0_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 0,\n ).length,\n state_code_100_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 100,\n ).length,\n remediated_rows: remediatedRows.length,\n ready_for_mcp_rows: validRows.length,\n residual_manual_rows: manualRows.length,\n },\n applied_fix_counts: Object.fromEntries(\n Object.entries(appliedFixCounts).sort(([left], [right]) => left.localeCompare(right)),\n ),\n residual_manual_ids: manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0),\n validation_backend: 'tidas_sdk',\n files: {\n all_remediated: files.allRemediated,\n ready_for_mcp: files.readyForMcp,\n residual_manual_queue: files.residualManualQueue,\n audit: files.audit,\n prompt: files.prompt,\n report: files.report,\n },\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n build_dataset_format_reference,\n build_flow_property_item,\n build_output_files,\n build_prompt,\n build_local_dataset_uri,\n bump_ilcd_version,\n canonical_compliance_block,\n canonical_contact_reference,\n infer_flow_property_descriptor_from_hint,\n normalize_flow_properties,\n normalize_multilang_entries,\n normalize_multilang_field,\n normalize_name_block,\n normalize_quantitative_reference,\n normalize_reference_block,\n parse_validation_error,\n remediate_row,\n resolve_sdk_module_from_candidates,\n update_permanent_dataset_uri,\n validate_flow_payload,\n version_from_uri,\n};\n"]}
1
+ {"version":3,"file":"flow-remediate.js","sourceRoot":"","sources":["../../../src/lib/flow-remediate.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n normalizeText,\n type JsonRecord,\n} from './flow-governance.js';\nimport {\n type SdkValidationEntity,\n validateEntityWithDeepFallback,\n} from './tidas-sdk-validation.js';\n\nconst CONTACT_UUID = 'f4b4c314-8c4c-4c83-968f-5b3c7724f6a8';\nconst CONTACT_VERSION = '01.00.000';\nconst COMPLIANCE_SOURCE_UUID = 'd92a1a12-2545-49e2-a585-55c259997756';\nconst COMPLIANCE_SOURCE_VERSION = '20.20.002';\nconst ILCD_FORMAT_SOURCE_UUID = 'a97a0155-0234-4b87-b4ce-a45da52f2a40';\nconst ILCD_FORMAT_SOURCE_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_UUID = '93a60a56-a3c8-11da-a746-0800200b9a66';\nconst DEFAULT_MASS_FLOW_PROPERTY_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_NAME = 'Mass';\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u;\nconst VERSION_QUERY_RE = /([?&]version=)(\\d+\\.\\d+\\.\\d+)/u;\nconst LOCAL_URI_VERSION_RE = /_(\\d+\\.\\d+\\.\\d+)\\.xml$/u;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst GENERIC_MASS_HINTS = new Set([\n 'flow property for kg',\n 'flow property for kilogram',\n 'flow property for kilograms',\n 'kg',\n 'kilogram',\n 'kilograms',\n 'mass',\n 'mass flow',\n 'mass flow kg',\n]);\n\ntype FlowValidationIssue = {\n validator: 'tidas_sdk';\n path: string;\n message: string;\n code: string;\n};\n\ntype FlowRemediationAuditRow = {\n id: unknown;\n user_id: unknown;\n state_code: unknown;\n version_before: string;\n version_after: string;\n valid_after_remediation: boolean;\n applied_fixes: string[];\n original_reason: unknown[];\n final_reason: FlowValidationIssue[];\n};\n\ntype FlowRemediationRowResult = {\n row: JsonRecord;\n valid: boolean;\n appliedFixes: string[];\n finalReasons: FlowValidationIssue[];\n versionBefore: string;\n versionAfter: string;\n};\n\ntype FlowValidationResult =\n | {\n success: true;\n }\n | {\n success: false;\n issues: FlowValidationIssue[];\n };\n\ntype FlowSdkModule = {\n createFlow?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => SdkValidationEntity;\n};\n\ntype FlowRemediationFiles = {\n allRemediated: string;\n readyForMcp: string;\n residualManualQueue: string;\n audit: string;\n report: string;\n prompt: string;\n};\n\nexport type FlowRemediationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_remediation';\n input_file: string;\n out_dir: string;\n counts: {\n input_rows: number;\n state_code_0_rows: number;\n state_code_100_rows: number;\n remediated_rows: number;\n ready_for_mcp_rows: number;\n residual_manual_rows: number;\n };\n applied_fix_counts: Record<string, number>;\n residual_manual_ids: string[];\n validation_backend: 'tidas_sdk';\n files: {\n all_remediated: string;\n ready_for_mcp: string;\n residual_manual_queue: string;\n audit: string;\n prompt: string;\n report: string;\n };\n};\n\nexport type RunFlowRemediateOptions = {\n inputFile: string;\n outDir: string;\n};\n\ntype FlowRemediationDeps = {\n loadSdkModule?: () => FlowSdkModule & { location?: string };\n now?: () => Date;\n};\n\ntype FlowPropertyDescriptor = {\n uuid: string;\n name: string;\n version: string;\n};\n\nfunction build_sdk_candidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolve_sdk_module_from_candidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): FlowSdkModule & { location: string } {\n const details: string[] = [];\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as FlowSdkModule;\n if (typeof loaded.createFlow === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createFlow export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk flow factory.', {\n code: 'FLOW_REMEDIATE_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolve_local_sdk_module(): FlowSdkModule & { location: string } {\n return resolve_sdk_module_from_candidates(createRequire(import.meta.url), build_sdk_candidates());\n}\n\nfunction assert_input_file(inputFile: string): string {\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_REMEDIATE_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Flow remediation input file not found: ${resolved}`, {\n code: 'FLOW_REMEDIATE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REMEDIATE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction build_output_files(outDir: string): FlowRemediationFiles {\n return {\n allRemediated: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_all.jsonl`),\n readyForMcp: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_ready_for_mcp.jsonl`),\n residualManualQueue: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue.jsonl`),\n audit: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_audit.jsonl`),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_report.json`),\n prompt: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue_prompt.md`),\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n process: 'processes',\n 'process data set': 'processes',\n flow: 'flows',\n 'flow data set': 'flows',\n source: 'sources',\n 'source data set': 'sources',\n contact: 'contacts',\n 'contact data set': 'contacts',\n 'flow property data set': 'flowproperties',\n };\n const kind = datasetKind.trim().toLowerCase();\n const folder = folderMap[kind] ?? 'datasets';\n const versionText = version.trim() || '01.01.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction build_dataset_format_reference(): JsonRecord {\n return {\n '@refObjectId': ILCD_FORMAT_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri('source', ILCD_FORMAT_SOURCE_UUID, ILCD_FORMAT_SOURCE_VERSION),\n '@version': ILCD_FORMAT_SOURCE_VERSION,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': 'ILCD format' }],\n };\n}\n\nfunction normalize_multilang_entries(value: unknown): JsonRecord[] | null {\n if (typeof value === 'string') {\n const text = value.trim();\n return text ? [{ '@xml:lang': 'en', '#text': text }] : null;\n }\n\n if (Array.isArray(value)) {\n const entries = value.flatMap((item) => normalize_multilang_entries(item) ?? []);\n return entries.length ? entries : null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n const text = coerceText(value['#text']);\n if (!text) {\n return null;\n }\n\n return [\n {\n '@xml:lang': coerceText(value['@xml:lang']) || 'en',\n '#text': text,\n },\n ];\n}\n\nfunction first_text(value: unknown, fallback = ''): string {\n const normalized = normalize_multilang_entries(value);\n return normalized?.[0]?.['#text'] ? String(normalized[0]['#text']) : fallback;\n}\n\nfunction normalize_multilang_field(container: JsonRecord, key: string, fixes: string[]): void {\n if (!(key in container)) {\n return;\n }\n const normalized = normalize_multilang_entries(container[key]);\n if (!normalized) {\n delete container[key];\n fixes.push(`remove_empty_multilang:${key}`);\n return;\n }\n if (JSON.stringify(container[key]) !== JSON.stringify(normalized)) {\n container[key] = normalized;\n fixes.push(`normalize_multilang:${key}`);\n }\n}\n\nfunction normalize_name_block(dataSetInfo: JsonRecord, fixes: string[]): void {\n const nameBlock = isRecord(dataSetInfo.name) ? dataSetInfo.name : null;\n if (!nameBlock) {\n return;\n }\n\n for (const key of [\n 'baseName',\n 'flowProperties',\n 'mixAndLocationTypes',\n 'treatmentStandardsRoutes',\n ]) {\n if (!(key in nameBlock)) {\n continue;\n }\n const normalized = normalize_multilang_entries(nameBlock[key]);\n if (!normalized) {\n delete nameBlock[key];\n fixes.push(`remove_empty_name_field:${key}`);\n continue;\n }\n if (JSON.stringify(nameBlock[key]) !== JSON.stringify(normalized)) {\n nameBlock[key] = normalized;\n fixes.push(`normalize_name_field:${key}`);\n }\n }\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = version.split('.');\n const numbers = [0, 0, 0].map((_, index) => {\n const raw = parts[index];\n const parsed = raw ? Number.parseInt(raw, 10) : 0;\n return Number.isInteger(parsed) ? parsed : 0;\n });\n numbers[2] += 1;\n return `${numbers[0].toString().padStart(2, '0')}.${numbers[1].toString().padStart(2, '0')}.${numbers[2]\n .toString()\n .padStart(3, '0')}`;\n}\n\nfunction version_from_uri(uri: string): string {\n const text = uri.trim();\n if (!text) {\n return '';\n }\n const localMatch = text.match(LOCAL_URI_VERSION_RE);\n if (localMatch) {\n return localMatch[1] as string;\n }\n const queryMatch = text.match(VERSION_QUERY_RE);\n return queryMatch?.[2] ?? '';\n}\n\nfunction normalize_reference_block(\n ref: unknown,\n defaultType: string,\n shortDescriptionFallback: string,\n): JsonRecord | null {\n if (!isRecord(ref)) {\n return null;\n }\n const refObjectId = coerceText(ref['@refObjectId']).toLowerCase();\n if (!refObjectId) {\n return null;\n }\n\n const refType = coerceText(ref['@type']) || defaultType;\n const version =\n coerceText(ref['@version']) ||\n version_from_uri(coerceText(ref['@uri'])) ||\n (refObjectId === ILCD_FORMAT_SOURCE_UUID\n ? ILCD_FORMAT_SOURCE_VERSION\n : refObjectId === COMPLIANCE_SOURCE_UUID\n ? COMPLIANCE_SOURCE_VERSION\n : '');\n const shortDescription =\n normalize_multilang_entries(ref['common:shortDescription']) ??\n (shortDescriptionFallback ? [{ '@xml:lang': 'en', '#text': shortDescriptionFallback }] : null);\n\n const result: JsonRecord = {\n '@type': refType,\n '@refObjectId': refObjectId,\n '@uri': version\n ? build_local_dataset_uri(refType, refObjectId, version)\n : coerceText(ref['@uri']),\n };\n if (version) {\n result['@version'] = version;\n }\n if (shortDescription) {\n result['common:shortDescription'] = shortDescription;\n }\n return result;\n}\n\nfunction canonical_contact_reference(): JsonRecord {\n return {\n '@type': 'contact data set',\n '@refObjectId': CONTACT_UUID,\n '@uri': build_local_dataset_uri('contact data set', CONTACT_UUID, CONTACT_VERSION),\n '@version': CONTACT_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'Tiangong LCA Data Working Group' },\n { '@xml:lang': 'zh', '#text': '天工LCA数据团队' },\n ],\n };\n}\n\nfunction canonical_compliance_block(): JsonRecord {\n return {\n 'common:referenceToComplianceSystem': {\n '@refObjectId': COMPLIANCE_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri(\n 'source data set',\n COMPLIANCE_SOURCE_UUID,\n COMPLIANCE_SOURCE_VERSION,\n ),\n '@version': COMPLIANCE_SOURCE_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'ILCD Data Network - Entry-level' },\n ],\n },\n 'common:approvalOfOverallCompliance': 'Fully compliant',\n };\n}\n\nfunction normalize_hint_text(value: unknown): string {\n return normalizeText(first_text(value));\n}\n\nfunction infer_flow_property_descriptor_from_hint(value: unknown): FlowPropertyDescriptor | null {\n const normalized = normalize_hint_text(value);\n if (!normalized) {\n return null;\n }\n\n if (\n GENERIC_MASS_HINTS.has(normalized) ||\n (normalized.startsWith('flow property for ') && /\\b(kg|kilogram|kilograms)\\b/u.test(normalized))\n ) {\n return {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n };\n }\n\n return null;\n}\n\nfunction build_flow_property_item(\n descriptor: FlowPropertyDescriptor,\n internalId: string,\n meanValue: string,\n): JsonRecord {\n return {\n '@dataSetInternalID': internalId,\n meanValue,\n referenceToFlowPropertyDataSet: {\n '@type': 'flow property data set',\n '@refObjectId': descriptor.uuid,\n '@uri': build_local_dataset_uri(\n 'flow property data set',\n descriptor.uuid,\n descriptor.version,\n ),\n '@version': descriptor.version,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': descriptor.name }],\n },\n };\n}\n\nfunction normalize_flow_properties(\n dataset: JsonRecord,\n fixes: string[],\n): { items: JsonRecord[]; unresolved: FlowValidationIssue[] } {\n const flowPropertiesBlock = isRecord(dataset.flowProperties) ? dataset.flowProperties : {};\n dataset.flowProperties = flowPropertiesBlock;\n const rawItems = flowPropertiesBlock.flowProperty;\n const items = Array.isArray(rawItems) ? rawItems : rawItems ? [rawItems] : [];\n const normalizedItems: JsonRecord[] = [];\n const unresolved: FlowValidationIssue[] = [];\n let repairedUnknownUuid = false;\n let filledMissingUuid = false;\n let usedDefaultMassFallback = false;\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!isRecord(item)) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty',\n message: 'flowProperty item is not an object',\n code: 'unsupported_item_type',\n });\n continue;\n }\n\n const reference = isRecord(item.referenceToFlowPropertyDataSet)\n ? item.referenceToFlowPropertyDataSet\n : null;\n const hint = reference?.['common:shortDescription'] ?? reference;\n const internalId = coerceText(item['@dataSetInternalID']) || String(index);\n const meanValue = coerceText(item.meanValue) || '1.0';\n const refUuid = coerceText(reference?.['@refObjectId']).toLowerCase();\n const refVersion =\n coerceText(reference?.['@version']) || version_from_uri(coerceText(reference?.['@uri']));\n let descriptor: FlowPropertyDescriptor | null;\n\n if (refUuid && UUID_RE.test(refUuid)) {\n descriptor = {\n uuid: refUuid,\n name: first_text(hint, DEFAULT_MASS_FLOW_PROPERTY_NAME),\n version:\n refVersion ||\n (refUuid === DEFAULT_MASS_FLOW_PROPERTY_UUID\n ? DEFAULT_MASS_FLOW_PROPERTY_VERSION\n : '01.01.000'),\n };\n } else {\n descriptor = infer_flow_property_descriptor_from_hint(hint);\n if (descriptor) {\n if (refUuid) {\n repairedUnknownUuid = true;\n } else {\n filledMissingUuid = true;\n }\n }\n }\n\n if (!descriptor) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty.referenceToFlowPropertyDataSet.@refObjectId',\n message: refUuid\n ? `Unknown flow property UUID: ${refUuid}`\n : 'Unable to infer flow property UUID from the reference block',\n code: 'unknown_flow_property_uuid',\n });\n continue;\n }\n\n normalizedItems.push(build_flow_property_item(descriptor, internalId, meanValue));\n }\n\n if (!normalizedItems.length) {\n if (!items.length) {\n normalizedItems.push(\n build_flow_property_item(\n {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n },\n '0',\n '1.0',\n ),\n );\n usedDefaultMassFallback = true;\n } else {\n delete flowPropertiesBlock.flowProperty;\n return { items: [], unresolved };\n }\n }\n\n flowPropertiesBlock.flowProperty =\n normalizedItems.length === 1 ? normalizedItems[0] : normalizedItems;\n fixes.push('normalize_flow_properties');\n if (repairedUnknownUuid) {\n fixes.push('repair_unknown_flow_property_uuid_from_short_description');\n }\n if (filledMissingUuid) {\n fixes.push('fill_missing_flow_property_uuid_from_short_description');\n }\n if (usedDefaultMassFallback) {\n fixes.push('set_default_mass_flow_property');\n }\n return { items: normalizedItems, unresolved };\n}\n\nfunction normalize_quantitative_reference(\n dataset: JsonRecord,\n normalizedFlowProperties: JsonRecord[],\n fixes: string[],\n unresolved: FlowValidationIssue[],\n): void {\n const flowInformation = isRecord(dataset.flowInformation) ? dataset.flowInformation : {};\n dataset.flowInformation = flowInformation;\n const quantitativeReference = isRecord(flowInformation.quantitativeReference)\n ? flowInformation.quantitativeReference\n : {};\n flowInformation.quantitativeReference = quantitativeReference;\n\n if (!normalizedFlowProperties.length) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowInformation.quantitativeReference.referenceToReferenceFlowProperty',\n message:\n 'Cannot infer referenceToReferenceFlowProperty without any valid flowProperty entries',\n code: 'missing_flow_properties',\n });\n return;\n }\n\n const allowedIds = new Set(\n normalizedFlowProperties\n .map((item) => coerceText(item['@dataSetInternalID']))\n .filter((value) => value.length > 0),\n );\n const current = coerceText(quantitativeReference.referenceToReferenceFlowProperty);\n if (!allowedIds.has(current)) {\n quantitativeReference.referenceToReferenceFlowProperty = coerceText(\n normalizedFlowProperties[0]?.['@dataSetInternalID'],\n );\n fixes.push('set_reference_to_reference_flow_property');\n }\n}\n\nfunction normalize_technology_multilang_fields(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology)) {\n return;\n }\n normalize_multilang_field(technology, 'technologicalApplicability', fixes);\n}\n\nfunction normalize_technical_specification(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology) || !('referenceToTechnicalSpecification' in technology)) {\n return;\n }\n const normalized = normalize_reference_block(\n technology.referenceToTechnicalSpecification,\n 'source data set',\n first_text(technology.referenceToTechnicalSpecification),\n );\n if (!normalized) {\n delete technology.referenceToTechnicalSpecification;\n fixes.push('remove_invalid_reference_to_technical_specification');\n return;\n }\n if (JSON.stringify(technology.referenceToTechnicalSpecification) !== JSON.stringify(normalized)) {\n technology.referenceToTechnicalSpecification = normalized;\n fixes.push('normalize_reference_to_technical_specification');\n }\n}\n\nfunction update_permanent_dataset_uri(uriValue: unknown, targetVersion: string): unknown {\n const uri = coerceText(uriValue);\n if (!uri) {\n return uriValue;\n }\n if (VERSION_QUERY_RE.test(uri)) {\n return uri.replace(VERSION_QUERY_RE, `$1${targetVersion}`);\n }\n return uriValue;\n}\n\nfunction parse_validation_error(error: unknown): FlowValidationIssue[] {\n if (isRecord(error) && Array.isArray(error.issues)) {\n const issues = error.issues.filter(isRecord).map((issue) => {\n const pathValue = Array.isArray(issue.path)\n ? issue.path.map((part) => String(part)).join('.')\n : '<exception>';\n return {\n validator: 'tidas_sdk' as const,\n path: pathValue || '<exception>',\n message: coerceText(issue.message) || String(error),\n code: coerceText(issue.code) || 'validation_error',\n };\n });\n if (issues.length) {\n return issues;\n }\n }\n\n return [\n {\n validator: 'tidas_sdk',\n path: '<exception>',\n message: String(error),\n code: 'exception',\n },\n ];\n}\n\nfunction validate_flow_payload(\n payload: JsonRecord,\n deps: FlowRemediationDeps,\n): FlowValidationResult {\n const sdkModule = (deps.loadSdkModule ?? resolve_local_sdk_module)();\n if (typeof sdkModule.createFlow !== 'function') {\n throw new CliError('Resolved tidas-sdk core module does not expose createFlow.', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n\n try {\n const result = validateEntityWithDeepFallback(payload, sdkModule.createFlow);\n if (!result) {\n throw new CliError(\n 'Resolved tidas-sdk flow entity does not expose validateEnhanced() or validate().',\n {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n },\n );\n }\n if (isRecord(result) && result.success === true) {\n return { success: true };\n }\n return {\n success: false,\n issues: parse_validation_error(isRecord(result) ? result.error : result),\n };\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n return {\n success: false,\n issues: parse_validation_error(error),\n };\n }\n}\n\nfunction remediate_row(row: JsonRecord, deps: FlowRemediationDeps): FlowRemediationRowResult {\n const working = JSON.parse(JSON.stringify(row)) as JsonRecord;\n const payload = isRecord(working.json_ordered) ? working.json_ordered : null;\n const flowDataSet = isRecord(payload?.flowDataSet) ? payload.flowDataSet : null;\n\n if (!payload || !flowDataSet) {\n return {\n row: working,\n valid: false,\n appliedFixes: [],\n finalReasons: [\n {\n validator: 'tidas_sdk',\n path: 'json_ordered.flowDataSet',\n message: 'Missing flowDataSet payload',\n code: 'missing_flow_dataset',\n },\n ],\n versionBefore: '',\n versionAfter: '',\n };\n }\n\n const fixes: string[] = [];\n const residualUnresolved: FlowValidationIssue[] = [];\n const flowInformation = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n flowDataSet.flowInformation = flowInformation;\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n flowInformation.dataSetInformation = dataSetInformation;\n\n normalize_name_block(dataSetInformation, fixes);\n for (const key of [\n 'common:synonyms',\n 'common:generalComment',\n 'common:shortDescription',\n 'common:name',\n 'common:shortName',\n ]) {\n normalize_multilang_field(dataSetInformation, key, fixes);\n }\n if (isRecord(dataSetInformation['common:other'])) {\n delete dataSetInformation['common:other'];\n fixes.push('remove_common_other_object');\n }\n if (dataSetInformation.CASNumber === '') {\n delete dataSetInformation.CASNumber;\n fixes.push('remove_empty_cas_number');\n }\n\n const administrativeInformation = isRecord(flowDataSet.administrativeInformation)\n ? flowDataSet.administrativeInformation\n : {};\n flowDataSet.administrativeInformation = administrativeInformation;\n const dataEntryBy = isRecord(administrativeInformation.dataEntryBy)\n ? administrativeInformation.dataEntryBy\n : {};\n administrativeInformation.dataEntryBy = dataEntryBy;\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n\n const formatReference = build_dataset_format_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToDataSetFormat']) !==\n JSON.stringify(formatReference)\n ) {\n dataEntryBy['common:referenceToDataSetFormat'] = formatReference;\n fixes.push('set_reference_to_dataset_format');\n }\n\n const contactReference = canonical_contact_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToPersonOrEntityEnteringTheData']) !==\n JSON.stringify(contactReference)\n ) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'] = contactReference;\n fixes.push('set_reference_to_person_or_entity_entering_the_data');\n }\n if (\n JSON.stringify(publicationAndOwnership['common:referenceToOwnershipOfDataSet']) !==\n JSON.stringify(contactReference)\n ) {\n publicationAndOwnership['common:referenceToOwnershipOfDataSet'] = contactReference;\n fixes.push('set_reference_to_ownership_of_dataset');\n }\n\n const modellingAndValidation = isRecord(flowDataSet.modellingAndValidation)\n ? flowDataSet.modellingAndValidation\n : {};\n flowDataSet.modellingAndValidation = modellingAndValidation;\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n modellingAndValidation.complianceDeclarations = complianceDeclarations;\n const complianceBlock = canonical_compliance_block();\n if (JSON.stringify(complianceDeclarations.compliance) !== JSON.stringify(complianceBlock)) {\n complianceDeclarations.compliance = complianceBlock;\n fixes.push('set_compliance_block');\n }\n\n const flowProperties = normalize_flow_properties(flowDataSet, fixes);\n residualUnresolved.push(...flowProperties.unresolved);\n normalize_quantitative_reference(flowDataSet, flowProperties.items, fixes, residualUnresolved);\n normalize_technology_multilang_fields(flowDataSet, fixes);\n normalize_technical_specification(flowDataSet, fixes);\n\n const flowUuid =\n coerceText(dataSetInformation['common:UUID']) || coerceText(working.id) || 'unknown-flow';\n if (!coerceText(publicationAndOwnership['common:dataSetVersion'])) {\n publicationAndOwnership['common:dataSetVersion'] = '01.01.000';\n }\n\n const versionBefore = coerceText(publicationAndOwnership['common:dataSetVersion']);\n let versionAfter = versionBefore;\n const stateCode = Number.parseInt(coerceText(working.state_code) || '0', 10) || 0;\n\n if (stateCode === 100) {\n versionAfter = bump_ilcd_version(versionBefore);\n if (versionAfter !== versionBefore) {\n publicationAndOwnership['common:dataSetVersion'] = versionAfter;\n fixes.push('bump_dataset_version');\n publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] = {\n '@type': 'flow data set',\n '@refObjectId': flowUuid,\n '@uri': build_local_dataset_uri('flow data set', flowUuid, versionBefore),\n '@version': versionBefore,\n 'common:shortDescription': [\n {\n '@xml:lang': 'en',\n '#text': first_text(deepGet(dataSetInformation, ['name', 'baseName']), flowUuid),\n },\n ],\n };\n fixes.push('set_reference_to_preceding_dataset_version');\n const permanentUri = update_permanent_dataset_uri(\n publicationAndOwnership['common:permanentDataSetURI'],\n versionAfter,\n );\n if (permanentUri !== publicationAndOwnership['common:permanentDataSetURI']) {\n publicationAndOwnership['common:permanentDataSetURI'] = permanentUri;\n fixes.push('update_permanent_dataset_uri_version');\n }\n if ('version' in working) {\n working.version = versionAfter;\n }\n }\n } else if (\n isRecord(publicationAndOwnership['common:referenceToPrecedingDataSetVersion']) &&\n !Object.keys(publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] as JsonRecord)\n .length\n ) {\n delete publicationAndOwnership['common:referenceToPrecedingDataSetVersion'];\n fixes.push('remove_empty_reference_to_preceding_dataset_version');\n }\n\n const validation = validate_flow_payload(payload, deps);\n const finalReasons =\n validation.success === true\n ? residualUnresolved\n : [...residualUnresolved, ...validation.issues];\n\n working.json_ordered = payload;\n working.reason = finalReasons;\n\n return {\n row: working,\n valid: finalReasons.length === 0,\n appliedFixes: fixes,\n finalReasons,\n versionBefore,\n versionAfter,\n };\n}\n\nfunction build_prompt(manualRows: JsonRecord[], manualFile: string, promptFile: string): string {\n if (!manualRows.length) {\n return `本轮 deterministic remediation 之后,residual manual queue 为 0。\n\n输入文件:\n\\`${manualFile}\\`\n\n结果:\n1. 当前没有需要再交给 OpenClaw 手工修复的 flow。\n2. 可直接对 ready-for-MCP 文件执行后续批量处理。\n3. 如果后续换了新的输入批次,再重新生成 residual manual queue prompt。\n`;\n }\n\n const queueIds = manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0)\n .map((value) => `- \\`${value}\\``)\n .join('\\n');\n const outputFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_fixed.jsonl`,\n );\n const stillInvalidFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_still_invalid.jsonl`,\n );\n\n return `你现在要处理 residual manual queue 中 deterministic remediator 之后仍未通过 tidas-sdk 本地校验的 flow。\n\n输入文件:\n\\`${manualFile}\\`\n\n输出文件:\n\\`${outputFile}\\`\n\n执行要求:\n1. 只修改每条记录里的 json_ordered.flowDataSet,保留外层 envelope key:id、user_id、json_ordered、reason、state_code。\n2. 保持相同 UUID,不要改 id。\n3. state_code=0 的 flow 保持当前 common:dataSetVersion 不变。\n4. state_code=100 的 flow 已经完成 deterministic version bump,并已补 common:referenceToPrecedingDataSetVersion;除非绝对必要,不要再次 bump version。\n5. 优先补齐合法的 flowProperties.flowProperty 和 flowInformation.quantitativeReference.referenceToReferenceFlowProperty,让数据先通过本地 TIDAS SDK 校验。\n6. 不要无故重写 classification、命名、comment;如果必须改,改动最小,并在结果里保留必要说明。\n7. 每条输出仍按一行一个 JSON object 的 JSONL 形式写入。\n8. 修复成功的行把 reason 置为 [];如果仍无法修复,单独另存并写明残留原因。\n\n当前 residual manual queue 共 ${manualRows.length} 条:\n${queueIds || '- None'}\n\n建议步骤:\n1. 逐条读取 reason 和 json_ordered.flowDataSet。\n2. 先判断缺失的是 flowProperties 本体,还是只有 quantitative reference 丢失。\n3. 能从现有 classificationInformation、baseName、flow type、name.flowProperties 推断合法 flow property 的,补成最小合法块。\n4. 每改完一条都本地验证一次 TIDAS SDK。\n5. 把通过校验的 patched row 写到 \\`${outputFile}\\`。\n\n如果你还要保留未解决项,另写一个旁路文件:\n\\`${stillInvalidFile}\\`\n`;\n}\n\nexport async function runFlowRemediate(\n options: RunFlowRemediateOptions,\n deps: FlowRemediationDeps = {},\n): Promise<FlowRemediationReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const rows = loadRowsFromFile(inputFile);\n const files = build_output_files(outDir);\n const now = deps.now ?? (() => new Date());\n\n const remediatedRows: JsonRecord[] = [];\n const validRows: JsonRecord[] = [];\n const manualRows: JsonRecord[] = [];\n const auditRows: FlowRemediationAuditRow[] = [];\n const appliedFixCounts: Record<string, number> = {};\n\n for (const row of rows) {\n const result = remediate_row(row, deps);\n remediatedRows.push(result.row);\n if (result.valid) {\n validRows.push(result.row);\n } else {\n manualRows.push(result.row);\n }\n\n result.appliedFixes.forEach((fix) => {\n appliedFixCounts[fix] = (appliedFixCounts[fix] ?? 0) + 1;\n });\n\n auditRows.push({\n id: row.id,\n user_id: row.user_id,\n state_code: row.state_code,\n version_before: result.versionBefore,\n version_after: result.versionAfter,\n valid_after_remediation: result.valid,\n applied_fixes: result.appliedFixes,\n original_reason: Array.isArray(row.reason) ? row.reason : [],\n final_reason: result.finalReasons,\n });\n }\n\n writeJsonLinesArtifact(files.allRemediated, remediatedRows);\n writeJsonLinesArtifact(files.readyForMcp, validRows);\n writeJsonLinesArtifact(files.residualManualQueue, manualRows);\n writeJsonLinesArtifact(files.audit, auditRows);\n writeTextArtifact(\n files.prompt,\n build_prompt(manualRows, files.residualManualQueue, files.prompt),\n );\n\n const report: FlowRemediationReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_remediation',\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n input_rows: rows.length,\n state_code_0_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 0,\n ).length,\n state_code_100_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 100,\n ).length,\n remediated_rows: remediatedRows.length,\n ready_for_mcp_rows: validRows.length,\n residual_manual_rows: manualRows.length,\n },\n applied_fix_counts: Object.fromEntries(\n Object.entries(appliedFixCounts).sort(([left], [right]) => left.localeCompare(right)),\n ),\n residual_manual_ids: manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0),\n validation_backend: 'tidas_sdk',\n files: {\n all_remediated: files.allRemediated,\n ready_for_mcp: files.readyForMcp,\n residual_manual_queue: files.residualManualQueue,\n audit: files.audit,\n prompt: files.prompt,\n report: files.report,\n },\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n build_dataset_format_reference,\n build_flow_property_item,\n build_output_files,\n build_prompt,\n build_local_dataset_uri,\n bump_ilcd_version,\n canonical_compliance_block,\n canonical_contact_reference,\n infer_flow_property_descriptor_from_hint,\n normalize_flow_properties,\n normalize_multilang_entries,\n normalize_multilang_field,\n normalize_name_block,\n normalize_quantitative_reference,\n normalize_reference_block,\n parse_validation_error,\n remediate_row,\n resolve_sdk_module_from_candidates,\n update_permanent_dataset_uri,\n validate_flow_payload,\n version_from_uri,\n};\n"]}
@@ -302,7 +302,7 @@ function normalizeLocalRuns(value, requestDir) {
302
302
  });
303
303
  return normalized;
304
304
  }
305
- function resolveRunRoot(requestDir, runId, outDirOverride, requestOutDir) {
305
+ function resolveRunRoot(requestDir, outDirOverride, requestOutDir) {
306
306
  const override = nonEmptyString(outDirOverride);
307
307
  if (override) {
308
308
  return path.resolve(requestDir, override);
@@ -311,7 +311,10 @@ function resolveRunRoot(requestDir, runId, outDirOverride, requestOutDir) {
311
311
  if (requestValue) {
312
312
  return path.resolve(requestDir, requestValue);
313
313
  }
314
- return path.join(requestDir, 'artifacts', 'lifecyclemodel_auto_build', runId);
314
+ throw new CliError('Missing required lifecyclemodel auto-build run root. Provide --out-dir or request.out_dir.', {
315
+ code: 'LIFECYCLEMODEL_AUTO_BUILD_RUN_ROOT_REQUIRED',
316
+ exitCode: 2,
317
+ });
315
318
  }
316
319
  function buildLayout(runRoot, runId) {
317
320
  const collectionDir = path.dirname(runRoot);
@@ -369,7 +372,7 @@ export function normalizeLifecyclemodelAutoBuildRequest(input, options) {
369
372
  const requestDir = path.dirname(requestPath);
370
373
  const mergedManifest = deepMerge(DEFAULT_MANIFEST, request);
371
374
  if (mergedManifest.allow_remote_write === true) {
372
- throw new CliError('allow_remote_write=true is not supported by tiangong lifecyclemodel auto-build. Keep the run read-only.', {
375
+ throw new CliError('allow_remote_write=true is not supported by tiangong-lca lifecyclemodel auto-build. Keep the run read-only.', {
373
376
  code: 'LIFECYCLEMODEL_AUTO_BUILD_REMOTE_WRITE_UNSUPPORTED',
374
377
  exitCode: 2,
375
378
  });
@@ -387,7 +390,7 @@ export function normalizeLifecyclemodelAutoBuildRequest(input, options) {
387
390
  schema_version: 1,
388
391
  request_path: requestPath,
389
392
  run_id: runId,
390
- run_root: resolveRunRoot(requestDir, runId, options.outDir, request.out_dir),
393
+ run_root: resolveRunRoot(requestDir, options.outDir, request.out_dir),
391
394
  manifest: mergedManifest,
392
395
  local_runs: normalizeLocalRuns(mergedManifest.local_runs, requestDir),
393
396
  };
@@ -505,12 +508,12 @@ function buildPlan(normalized, layout, now) {
505
508
  {
506
509
  name: 'validate',
507
510
  mode: 'deferred',
508
- description: 'Deferred to tiangong lifecyclemodel validate-build.',
511
+ description: 'Deferred to tiangong-lca lifecyclemodel validate-build.',
509
512
  },
510
513
  {
511
514
  name: 'publish',
512
515
  mode: 'deferred',
513
- description: 'Deferred to tiangong lifecyclemodel publish-build.',
516
+ description: 'Deferred to tiangong-lca lifecyclemodel publish-build.',
514
517
  },
515
518
  ],
516
519
  local_runs: normalized.local_runs,
@@ -1214,8 +1217,8 @@ function buildNextActions(layout) {
1214
1217
  return [
1215
1218
  `inspect: ${layout.runPlanPath}`,
1216
1219
  `inspect: ${layout.modelsDir}`,
1217
- `run: tiangong lifecyclemodel validate-build --run-dir ${layout.runRoot}`,
1218
- `run: tiangong lifecyclemodel publish-build --run-dir ${layout.runRoot}`,
1220
+ `run: tiangong-lca lifecyclemodel validate-build --run-dir ${layout.runRoot}`,
1221
+ `run: tiangong-lca lifecyclemodel publish-build --run-dir ${layout.runRoot}`,
1219
1222
  ];
1220
1223
  }
1221
1224
  function buildReport(normalized, layout, localBuildReports, now) {