@tiangong-lca/cli 0.0.1

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 (96) hide show
  1. package/README.md +368 -0
  2. package/bin/tiangong.d.ts +1 -0
  3. package/bin/tiangong.js +32 -0
  4. package/dist/scripts/assert-full-coverage.js +77 -0
  5. package/dist/scripts/assert-full-coverage.js.map +1 -0
  6. package/dist/src/cli.js +2740 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/lib/artifacts.js +86 -0
  9. package/dist/src/lib/artifacts.js.map +1 -0
  10. package/dist/src/lib/dotenv.js +36 -0
  11. package/dist/src/lib/dotenv.js.map +1 -0
  12. package/dist/src/lib/env.js +139 -0
  13. package/dist/src/lib/env.js.map +1 -0
  14. package/dist/src/lib/errors.js +38 -0
  15. package/dist/src/lib/errors.js.map +1 -0
  16. package/dist/src/lib/flow-build-alias-map.js +299 -0
  17. package/dist/src/lib/flow-build-alias-map.js.map +1 -0
  18. package/dist/src/lib/flow-get.js +81 -0
  19. package/dist/src/lib/flow-get.js.map +1 -0
  20. package/dist/src/lib/flow-governance.js +164 -0
  21. package/dist/src/lib/flow-governance.js.map +1 -0
  22. package/dist/src/lib/flow-list.js +187 -0
  23. package/dist/src/lib/flow-list.js.map +1 -0
  24. package/dist/src/lib/flow-publish-reviewed-data.js +808 -0
  25. package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -0
  26. package/dist/src/lib/flow-publish-version.js +541 -0
  27. package/dist/src/lib/flow-publish-version.js.map +1 -0
  28. package/dist/src/lib/flow-read.js +310 -0
  29. package/dist/src/lib/flow-read.js.map +1 -0
  30. package/dist/src/lib/flow-regen-product.js +1396 -0
  31. package/dist/src/lib/flow-regen-product.js.map +1 -0
  32. package/dist/src/lib/flow-remediate.js +821 -0
  33. package/dist/src/lib/flow-remediate.js.map +1 -0
  34. package/dist/src/lib/http.js +45 -0
  35. package/dist/src/lib/http.js.map +1 -0
  36. package/dist/src/lib/io.js +30 -0
  37. package/dist/src/lib/io.js.map +1 -0
  38. package/dist/src/lib/kb-search.js +83 -0
  39. package/dist/src/lib/kb-search.js.map +1 -0
  40. package/dist/src/lib/lifecyclemodel-auto-build.js +1328 -0
  41. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -0
  42. package/dist/src/lib/lifecyclemodel-orchestrate.js +1556 -0
  43. package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -0
  44. package/dist/src/lib/lifecyclemodel-publish-build.js +296 -0
  45. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -0
  46. package/dist/src/lib/lifecyclemodel-publish-resulting-process.js +101 -0
  47. package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -0
  48. package/dist/src/lib/lifecyclemodel-resulting-process.js +1152 -0
  49. package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -0
  50. package/dist/src/lib/lifecyclemodel-validate-build.js +238 -0
  51. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -0
  52. package/dist/src/lib/llm.js +383 -0
  53. package/dist/src/lib/llm.js.map +1 -0
  54. package/dist/src/lib/process-auto-build.js +717 -0
  55. package/dist/src/lib/process-auto-build.js.map +1 -0
  56. package/dist/src/lib/process-batch-build.js +409 -0
  57. package/dist/src/lib/process-batch-build.js.map +1 -0
  58. package/dist/src/lib/process-get.js +66 -0
  59. package/dist/src/lib/process-get.js.map +1 -0
  60. package/dist/src/lib/process-publish-build.js +451 -0
  61. package/dist/src/lib/process-publish-build.js.map +1 -0
  62. package/dist/src/lib/process-resume-build.js +364 -0
  63. package/dist/src/lib/process-resume-build.js.map +1 -0
  64. package/dist/src/lib/publish.js +562 -0
  65. package/dist/src/lib/publish.js.map +1 -0
  66. package/dist/src/lib/remote.js +88 -0
  67. package/dist/src/lib/remote.js.map +1 -0
  68. package/dist/src/lib/review-flow.js +1110 -0
  69. package/dist/src/lib/review-flow.js.map +1 -0
  70. package/dist/src/lib/review-lifecyclemodel.js +727 -0
  71. package/dist/src/lib/review-lifecyclemodel.js.map +1 -0
  72. package/dist/src/lib/review-process.js +702 -0
  73. package/dist/src/lib/review-process.js.map +1 -0
  74. package/dist/src/lib/run.js +106 -0
  75. package/dist/src/lib/run.js.map +1 -0
  76. package/dist/src/lib/state-lock.js +150 -0
  77. package/dist/src/lib/state-lock.js.map +1 -0
  78. package/dist/src/lib/supabase-client.js +269 -0
  79. package/dist/src/lib/supabase-client.js.map +1 -0
  80. package/dist/src/lib/supabase-json-ordered-write.js +186 -0
  81. package/dist/src/lib/supabase-json-ordered-write.js.map +1 -0
  82. package/dist/src/lib/supabase-rest.js +138 -0
  83. package/dist/src/lib/supabase-rest.js.map +1 -0
  84. package/dist/src/lib/supabase-session.js +424 -0
  85. package/dist/src/lib/supabase-session.js.map +1 -0
  86. package/dist/src/lib/tidas-sdk-package-validator.js +493 -0
  87. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -0
  88. package/dist/src/lib/unstructured.js +203 -0
  89. package/dist/src/lib/unstructured.js.map +1 -0
  90. package/dist/src/lib/user-api-key.js +75 -0
  91. package/dist/src/lib/user-api-key.js.map +1 -0
  92. package/dist/src/lib/validation.js +191 -0
  93. package/dist/src/lib/validation.js.map +1 -0
  94. package/dist/src/main.js +38 -0
  95. package/dist/src/main.js.map +1 -0
  96. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-lifecyclemodel.js","sourceRoot":"","sources":["../../../src/lib/review-lifecyclemodel.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n readJsonArtifact,\n writeJsonArtifact,\n writeJsonLinesArtifact,\n writeTextArtifact,\n} from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { ValidationIssue } from './validation.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype ModelEntry = {\n runName: string;\n modelFiles: string[];\n summaryPath: string;\n connectionsPath: string;\n processCatalogPath: string;\n};\n\ntype ModelFileReviewInfo = {\n modelFile: string;\n modelUuid: string;\n modelVersion: string;\n referenceProcessInternalId: string | null;\n resultingProcessUuid: string | null;\n processInstanceCount: number;\n zeroMultiplicationFactorCount: number;\n};\n\ntype LifecyclemodelValidationAggregate = {\n ok: boolean | null;\n reportPath: string | null;\n modelReports: Map<string, LifecyclemodelModelValidationSummary>;\n};\n\ntype LifecyclemodelModelValidationSummary = {\n ok: boolean | null;\n reportFile: string | null;\n engineCount: number;\n issues: ValidationIssue[];\n};\n\ntype SeverityCounts = {\n error: number;\n warning: number;\n info: number;\n};\n\nexport type LifecyclemodelReviewFinding = {\n run_name: string;\n model_file: string | null;\n severity: 'error' | 'warning' | 'info';\n rule_id: string;\n source: 'validation' | 'review';\n message: string;\n evidence: JsonObject;\n};\n\nexport type LifecyclemodelReviewModelSummary = {\n run_name: string;\n model_files: string[];\n model_uuids: string[];\n model_versions: string[];\n reference_process_uuids: string[];\n reference_process_internal_ids: string[];\n resulting_process_uuids: string[];\n summary_process_count: number | null;\n process_instance_count: number;\n summary_edge_count: number | null;\n connection_count: number | null;\n process_catalog_count: number | null;\n multiplication_factor_count: number;\n zero_multiplication_factor_count: number;\n validation: {\n available: boolean;\n ok: boolean | null;\n report_file: string | null;\n engine_count: number;\n issue_count: number;\n };\n artifacts: {\n summary: string | null;\n connections: string | null;\n process_catalog: string | null;\n };\n finding_count: number;\n severity_counts: SeverityCounts;\n};\n\nexport type LifecyclemodelReviewReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_lifecyclemodel_review';\n run_id: string;\n run_root: string;\n out_dir: string;\n logic_version: string;\n model_count: number;\n finding_count: number;\n severity_counts: SeverityCounts;\n validation: {\n available: boolean;\n ok: boolean | null;\n report: string | null;\n };\n files: {\n run_manifest: string;\n invocation_index: string;\n validation_report: string | null;\n model_summaries: string;\n findings: string;\n summary: string;\n review_zh: string;\n review_en: string;\n timing: string;\n report: string;\n };\n model_summaries: LifecyclemodelReviewModelSummary[];\n next_actions: string[];\n};\n\nexport type RunLifecyclemodelReviewOptions = {\n runDir: string;\n outDir: string;\n startTs?: string;\n endTs?: string;\n logicVersion?: string;\n now?: () => Date;\n cwd?: string;\n};\n\nexport type LifecyclemodelReviewLayout = {\n runId: string;\n runRoot: string;\n outDir: string;\n modelsDir: string;\n reportsDir: string;\n manifestsDir: string;\n runManifestPath: string;\n invocationIndexPath: string;\n validationReportPath: string;\n modelSummariesPath: string;\n findingsPath: string;\n summaryPath: string;\n reviewZhPath: string;\n reviewEnPath: string;\n timingPath: string;\n reportPath: string;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\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 deepGet(value: unknown, pathParts: string[]): unknown {\n let current: unknown = value;\n for (const part of pathParts) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[part];\n }\n return current;\n}\n\nfunction listify(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [value];\n}\n\nfunction toNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n return null;\n}\n\nfunction toNonNegativeInteger(value: unknown): number | null {\n const parsed = toNumber(value);\n if (parsed === null || !Number.isInteger(parsed) || parsed < 0) {\n return null;\n }\n return parsed;\n}\n\nfunction uniqueStrings(values: Array<string | null | undefined>): string[] {\n return [\n ...new Set(\n values.filter(\n (value): value is string => typeof value === 'string' && value.trim().length > 0,\n ),\n ),\n ];\n}\n\nfunction copyJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction emptySeverityCounts(): SeverityCounts {\n return {\n error: 0,\n warning: 0,\n info: 0,\n };\n}\n\nfunction severityCounts(findings: LifecyclemodelReviewFinding[]): SeverityCounts {\n return findings.reduce<SeverityCounts>((counts, finding) => {\n counts[finding.severity] += 1;\n return counts;\n }, emptySeverityCounts());\n}\n\nfunction readRequiredJsonObject(\n filePath: string,\n missingCode: string,\n invalidCode: string,\n label: string,\n): JsonObject {\n if (!existsSync(filePath)) {\n throw new CliError(`Required lifecyclemodel ${label} artifact not found: ${filePath}`, {\n code: missingCode,\n exitCode: 2,\n details: { filePath, label },\n });\n }\n\n const value = readJsonArtifact(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected lifecyclemodel ${label} artifact JSON object: ${filePath}`, {\n code: invalidCode,\n exitCode: 2,\n details: { filePath, label },\n });\n }\n\n return value;\n}\n\nfunction readOptionalJsonObject(\n filePath: string,\n invalidCode: string,\n label: string,\n): JsonObject | null {\n if (!existsSync(filePath)) {\n return null;\n }\n\n const value = readJsonArtifact(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected lifecyclemodel ${label} artifact JSON object: ${filePath}`, {\n code: invalidCode,\n exitCode: 2,\n details: { filePath, label },\n });\n }\n\n return value;\n}\n\nfunction readOptionalJsonArray(\n filePath: string,\n invalidCode: string,\n label: string,\n): unknown[] | null {\n if (!existsSync(filePath)) {\n return null;\n }\n\n const value = readJsonArtifact(filePath);\n if (!Array.isArray(value)) {\n throw new CliError(`Expected lifecyclemodel ${label} artifact JSON array: ${filePath}`, {\n code: invalidCode,\n exitCode: 2,\n details: { filePath, label },\n });\n }\n\n return value;\n}\n\nfunction buildLayout(runRoot: string, outDir: string): LifecyclemodelReviewLayout {\n const runId = path.basename(runRoot);\n return {\n runId,\n runRoot,\n outDir,\n modelsDir: path.join(runRoot, 'models'),\n reportsDir: path.join(runRoot, 'reports'),\n manifestsDir: path.join(runRoot, 'manifests'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n validationReportPath: path.join(\n runRoot,\n 'reports',\n 'lifecyclemodel-validate-build-report.json',\n ),\n modelSummariesPath: path.join(outDir, 'model_summaries.jsonl'),\n findingsPath: path.join(outDir, 'findings.jsonl'),\n summaryPath: path.join(outDir, 'lifecyclemodel_review_summary.json'),\n reviewZhPath: path.join(outDir, 'lifecyclemodel_review_zh.md'),\n reviewEnPath: path.join(outDir, 'lifecyclemodel_review_en.md'),\n timingPath: path.join(outDir, 'lifecyclemodel_review_timing.md'),\n reportPath: path.join(outDir, 'lifecyclemodel_review_report.json'),\n };\n}\n\nfunction resolveLayout(options: RunLifecyclemodelReviewOptions): LifecyclemodelReviewLayout {\n const runDir = nonEmptyString(options.runDir);\n if (!runDir) {\n throw new CliError('Missing required --run-dir for review lifecyclemodel.', {\n code: 'LIFECYCLEMODEL_REVIEW_RUN_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n const outDir = nonEmptyString(options.outDir);\n if (!outDir) {\n throw new CliError('Missing required --out-dir for review lifecyclemodel.', {\n code: 'LIFECYCLEMODEL_REVIEW_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n return buildLayout(path.resolve(runDir), path.resolve(outDir));\n}\n\nfunction ensureRunRootExists(layout: LifecyclemodelReviewLayout): void {\n if (!existsSync(layout.runRoot)) {\n throw new CliError(`lifecyclemodel review run root not found: ${layout.runRoot}`, {\n code: 'LIFECYCLEMODEL_REVIEW_RUN_NOT_FOUND',\n exitCode: 2,\n });\n }\n}\n\nfunction readRequiredRunManifest(layout: LifecyclemodelReviewLayout): JsonObject {\n const manifest = readRequiredJsonObject(\n layout.runManifestPath,\n 'LIFECYCLEMODEL_REVIEW_RUN_MANIFEST_MISSING',\n 'LIFECYCLEMODEL_REVIEW_RUN_MANIFEST_INVALID',\n 'run-manifest',\n );\n\n const manifestRunId = nonEmptyString(manifest.runId);\n if (manifestRunId && manifestRunId !== layout.runId) {\n throw new CliError(\n `lifecyclemodel review run manifest runId mismatch: ${layout.runManifestPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_RUN_MANIFEST_MISMATCH',\n exitCode: 2,\n details: {\n expected: layout.runId,\n actual: manifestRunId,\n },\n },\n );\n }\n\n return manifest;\n}\n\nfunction readInvocationIndex(layout: LifecyclemodelReviewLayout): JsonObject {\n if (!existsSync(layout.invocationIndexPath)) {\n return {\n schema_version: 1,\n invocations: [],\n };\n }\n\n const value = readJsonArtifact(layout.invocationIndexPath);\n if (!isRecord(value)) {\n throw new CliError(\n `Expected lifecyclemodel review invocation index JSON object: ${layout.invocationIndexPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_INVOCATION_INDEX_INVALID',\n exitCode: 2,\n },\n );\n }\n\n if (value.invocations === undefined) {\n return {\n schema_version: 1,\n invocations: [],\n };\n }\n\n if (!Array.isArray(value.invocations)) {\n throw new CliError(\n `Expected lifecyclemodel review invocation index to contain an invocations array: ${layout.invocationIndexPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_INVOCATION_INDEX_INVALID',\n exitCode: 2,\n },\n );\n }\n\n return value;\n}\n\nfunction discoverModelEntries(layout: LifecyclemodelReviewLayout): ModelEntry[] {\n const runNames = existsSync(layout.modelsDir) ? readdirSync(layout.modelsDir).sort() : [];\n const entries = runNames.flatMap((runName) => {\n const lifecyclemodelsDir = path.join(\n layout.modelsDir,\n runName,\n 'tidas_bundle',\n 'lifecyclemodels',\n );\n if (!existsSync(lifecyclemodelsDir)) {\n return [];\n }\n\n const modelFiles = readdirSync(lifecyclemodelsDir)\n .filter((entry) => entry.endsWith('.json'))\n .sort()\n .map((entry) => path.join(lifecyclemodelsDir, entry));\n\n if (modelFiles.length === 0) {\n throw new CliError(\n `lifecyclemodel review found a bundle without lifecyclemodel JSON files: ${lifecyclemodelsDir}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_MODELS_EMPTY',\n exitCode: 2,\n },\n );\n }\n\n return [\n {\n runName,\n modelFiles,\n summaryPath: path.join(layout.modelsDir, runName, 'summary.json'),\n connectionsPath: path.join(layout.modelsDir, runName, 'connections.json'),\n processCatalogPath: path.join(layout.modelsDir, runName, 'process-catalog.json'),\n },\n ];\n });\n\n if (entries.length === 0) {\n throw new CliError(\n `lifecyclemodel review run does not contain any model bundles: ${layout.modelsDir}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_MODELS_NOT_FOUND',\n exitCode: 2,\n },\n );\n }\n\n return entries;\n}\n\nfunction normalizeValidationIssue(raw: unknown): ValidationIssue {\n if (!isRecord(raw)) {\n return {\n issue_code: 'validation_issue',\n severity: 'error',\n category: 'unknown',\n file_path: '<unknown>',\n message: String(raw),\n location: '<root>',\n context: {},\n };\n }\n\n const severity =\n raw.severity === 'warning' || raw.severity === 'info' || raw.severity === 'error'\n ? raw.severity\n : 'error';\n\n return {\n issue_code: nonEmptyString(raw.issue_code) ?? 'validation_issue',\n severity,\n category: nonEmptyString(raw.category) ?? 'unknown',\n file_path: nonEmptyString(raw.file_path) ?? '<unknown>',\n message: nonEmptyString(raw.message) ?? JSON.stringify(raw),\n location: nonEmptyString(raw.location) ?? '<root>',\n context: isRecord(raw.context) ? raw.context : {},\n };\n}\n\nfunction collectValidationIssues(validation: JsonObject): ValidationIssue[] {\n const executionReports = Array.isArray(validation.reports) ? validation.reports : [];\n const seen = new Set<string>();\n const issues: ValidationIssue[] = [];\n\n executionReports.forEach((report) => {\n if (!isRecord(report) || !isRecord(report.report)) {\n return;\n }\n\n const rawIssues = Array.isArray(report.report.issues) ? report.report.issues : [];\n rawIssues.forEach((rawIssue) => {\n const issue = normalizeValidationIssue(rawIssue);\n const key = JSON.stringify([\n issue.issue_code,\n issue.severity,\n issue.category,\n issue.file_path,\n issue.message,\n issue.location,\n ]);\n if (seen.has(key)) {\n return;\n }\n seen.add(key);\n issues.push(issue);\n });\n });\n\n return issues;\n}\n\nfunction readValidationAggregate(\n layout: LifecyclemodelReviewLayout,\n): LifecyclemodelValidationAggregate {\n const aggregate = readOptionalJsonObject(\n layout.validationReportPath,\n 'LIFECYCLEMODEL_REVIEW_VALIDATION_REPORT_INVALID',\n 'validate-build report',\n );\n\n if (!aggregate) {\n return {\n ok: null,\n reportPath: null,\n modelReports: new Map(),\n };\n }\n\n if (aggregate.model_reports !== undefined && !Array.isArray(aggregate.model_reports)) {\n throw new CliError(\n `Expected lifecyclemodel validate-build report to contain a model_reports array: ${layout.validationReportPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_VALIDATION_REPORT_INVALID',\n exitCode: 2,\n },\n );\n }\n\n const modelReports = new Map<string, LifecyclemodelModelValidationSummary>();\n for (const rawEntry of Array.isArray(aggregate.model_reports) ? aggregate.model_reports : []) {\n if (!isRecord(rawEntry)) {\n throw new CliError(\n `Expected lifecyclemodel validate-build model report entry JSON object: ${layout.validationReportPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_VALIDATION_REPORT_INVALID',\n exitCode: 2,\n },\n );\n }\n\n const runName = nonEmptyString(rawEntry.run_name);\n if (!runName || !isRecord(rawEntry.validation)) {\n throw new CliError(\n `Expected lifecyclemodel validate-build model report entry to contain run_name and validation: ${layout.validationReportPath}`,\n {\n code: 'LIFECYCLEMODEL_REVIEW_VALIDATION_REPORT_INVALID',\n exitCode: 2,\n },\n );\n }\n\n const validation = rawEntry.validation;\n const executionReports = Array.isArray(validation.reports) ? validation.reports : [];\n modelReports.set(runName, {\n ok: typeof validation.ok === 'boolean' ? validation.ok : null,\n reportFile: nonEmptyString(rawEntry.report_file),\n engineCount: executionReports.length,\n issues: collectValidationIssues(validation),\n });\n }\n\n return {\n ok: typeof aggregate.ok === 'boolean' ? aggregate.ok : null,\n reportPath: layout.validationReportPath,\n modelReports,\n };\n}\n\nfunction modelRoot(value: JsonObject): JsonObject {\n return isRecord(value.lifeCycleModelDataSet)\n ? (value.lifeCycleModelDataSet as JsonObject)\n : value;\n}\n\nfunction readModelFileReviewInfo(filePath: string): ModelFileReviewInfo {\n const payload = readJsonArtifact(filePath);\n if (!isRecord(payload)) {\n throw new CliError(`Expected lifecyclemodel review payload JSON object: ${filePath}`, {\n code: 'LIFECYCLEMODEL_REVIEW_MODEL_INVALID',\n exitCode: 2,\n });\n }\n\n const root = modelRoot(payload);\n const processInstances = listify(\n deepGet(root, ['lifeCycleModelInformation', 'technology', 'processes', 'processInstance']),\n ).filter(isRecord);\n const zeroMultiplicationFactorCount = processInstances.filter(\n (instance) => toNumber(instance['@multiplicationFactor']) === 0,\n ).length;\n\n return {\n modelFile: filePath,\n modelUuid:\n nonEmptyString(\n deepGet(root, ['lifeCycleModelInformation', 'dataSetInformation', 'common:UUID']),\n ) ?? path.basename(filePath),\n modelVersion:\n nonEmptyString(\n deepGet(root, [\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n ) ?? 'unknown',\n referenceProcessInternalId: nonEmptyString(\n deepGet(root, [\n 'lifeCycleModelInformation',\n 'quantitativeReference',\n 'referenceToReferenceProcess',\n ]),\n ),\n resultingProcessUuid: nonEmptyString(\n deepGet(root, [\n 'lifeCycleModelInformation',\n 'dataSetInformation',\n 'referenceToResultingProcess',\n '@refObjectId',\n ]),\n ),\n processInstanceCount: processInstances.length,\n zeroMultiplicationFactorCount,\n };\n}\n\nfunction makeFinding(\n runName: string,\n modelFile: string | null,\n severity: LifecyclemodelReviewFinding['severity'],\n ruleId: string,\n source: LifecyclemodelReviewFinding['source'],\n message: string,\n evidence: JsonObject,\n): LifecyclemodelReviewFinding {\n return {\n run_name: runName,\n model_file: modelFile,\n severity,\n rule_id: ruleId,\n source,\n message,\n evidence,\n };\n}\n\nfunction buildModelReview(\n entry: ModelEntry,\n validationAggregate: LifecyclemodelValidationAggregate,\n): {\n summary: LifecyclemodelReviewModelSummary;\n findings: LifecyclemodelReviewFinding[];\n} {\n const summaryArtifact = readOptionalJsonObject(\n entry.summaryPath,\n 'LIFECYCLEMODEL_REVIEW_SUMMARY_INVALID',\n 'summary',\n );\n const connections = readOptionalJsonArray(\n entry.connectionsPath,\n 'LIFECYCLEMODEL_REVIEW_CONNECTIONS_INVALID',\n 'connections',\n );\n const processCatalog = readOptionalJsonArray(\n entry.processCatalogPath,\n 'LIFECYCLEMODEL_REVIEW_PROCESS_CATALOG_INVALID',\n 'process-catalog',\n );\n const modelFileInfos = entry.modelFiles.map((modelFile) => readModelFileReviewInfo(modelFile));\n const validation = validationAggregate.modelReports.get(entry.runName) ?? {\n ok: null,\n reportFile: null,\n engineCount: 0,\n issues: [],\n };\n\n const findings: LifecyclemodelReviewFinding[] = [];\n validation.issues.forEach((issue) => {\n findings.push(\n makeFinding(\n entry.runName,\n issue.file_path,\n issue.severity,\n `validation:${issue.issue_code}`,\n 'validation',\n issue.message,\n {\n category: issue.category,\n location: issue.location,\n context: issue.context,\n },\n ),\n );\n });\n\n const modelUuids = uniqueStrings(modelFileInfos.map((info) => info.modelUuid));\n const modelVersions = uniqueStrings(modelFileInfos.map((info) => info.modelVersion));\n const resultingProcessUuids = uniqueStrings(\n modelFileInfos.map((info) => info.resultingProcessUuid),\n );\n const referenceProcessInternalIds = uniqueStrings(\n modelFileInfos.map((info) => info.referenceProcessInternalId),\n );\n const referenceProcessUuids = uniqueStrings([\n nonEmptyString(summaryArtifact?.reference_process_uuid),\n ]);\n const processInstanceCount = modelFileInfos.reduce(\n (sum, info) => sum + info.processInstanceCount,\n 0,\n );\n const zeroMultiplicationFactorCount = modelFileInfos.reduce(\n (sum, info) => sum + info.zeroMultiplicationFactorCount,\n 0,\n );\n const summaryProcessCount = toNonNegativeInteger(summaryArtifact?.process_count);\n const summaryEdgeCount = toNonNegativeInteger(summaryArtifact?.edge_count);\n const multiplicationFactors = isRecord(summaryArtifact?.multiplication_factors)\n ? (summaryArtifact?.multiplication_factors as JsonObject)\n : null;\n const multiplicationFactorCount = multiplicationFactors\n ? Object.keys(multiplicationFactors).length\n : 0;\n\n if (!summaryArtifact) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'missing_model_summary',\n 'review',\n 'Model bundle is missing summary.json generated by lifecyclemodel auto-build.',\n {\n summary_path: entry.summaryPath,\n },\n ),\n );\n }\n\n if (!connections) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'missing_connections_artifact',\n 'review',\n 'Model bundle is missing connections.json generated by lifecyclemodel auto-build.',\n {\n connections_path: entry.connectionsPath,\n },\n ),\n );\n }\n\n if (!processCatalog) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'missing_process_catalog',\n 'review',\n 'Model bundle is missing process-catalog.json generated by lifecyclemodel auto-build.',\n {\n process_catalog_path: entry.processCatalogPath,\n },\n ),\n );\n }\n\n if (referenceProcessUuids.length === 0) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'missing_reference_process_uuid',\n 'review',\n 'Review could not resolve reference_process_uuid from summary.json.',\n {\n summary_path: summaryArtifact ? entry.summaryPath : null,\n },\n ),\n );\n }\n\n if (resultingProcessUuids.length === 0) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'missing_resulting_process_ref',\n 'review',\n 'Review could not resolve referenceToResultingProcess from the lifecyclemodel payload.',\n {\n model_files: entry.modelFiles,\n },\n ),\n );\n }\n\n if (processInstanceCount === 0) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'error',\n 'empty_process_instances',\n 'review',\n 'Lifecyclemodel payload does not contain any processInstance entries.',\n {\n model_files: entry.modelFiles,\n },\n ),\n );\n }\n\n if (summaryProcessCount !== null && summaryProcessCount !== processInstanceCount) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'process_count_mismatch',\n 'review',\n 'summary.json process_count does not match the number of processInstance entries in the payload.',\n {\n summary_process_count: summaryProcessCount,\n process_instance_count: processInstanceCount,\n },\n ),\n );\n }\n\n if (connections && summaryEdgeCount !== null && connections.length !== summaryEdgeCount) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'edge_count_mismatch',\n 'review',\n 'summary.json edge_count does not match the connections.json row count.',\n {\n summary_edge_count: summaryEdgeCount,\n connection_count: connections.length,\n },\n ),\n );\n }\n\n if (processCatalog && processCatalog.length !== processInstanceCount) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'process_catalog_count_mismatch',\n 'review',\n 'process-catalog.json row count does not match the number of processInstance entries in the payload.',\n {\n process_catalog_count: processCatalog.length,\n process_instance_count: processInstanceCount,\n },\n ),\n );\n }\n\n if (\n summaryArtifact &&\n multiplicationFactors &&\n multiplicationFactorCount !== processInstanceCount\n ) {\n findings.push(\n makeFinding(\n entry.runName,\n entry.modelFiles[0] ?? null,\n 'warning',\n 'multiplication_factor_count_mismatch',\n 'review',\n 'summary.json multiplication_factors count does not match the number of processInstance entries in the payload.',\n {\n multiplication_factor_count: multiplicationFactorCount,\n process_instance_count: processInstanceCount,\n },\n ),\n );\n }\n\n const counts = severityCounts(findings);\n return {\n summary: {\n run_name: entry.runName,\n model_files: entry.modelFiles,\n model_uuids: modelUuids,\n model_versions: modelVersions,\n reference_process_uuids: referenceProcessUuids,\n reference_process_internal_ids: referenceProcessInternalIds,\n resulting_process_uuids: resultingProcessUuids,\n summary_process_count: summaryProcessCount,\n process_instance_count: processInstanceCount,\n summary_edge_count: summaryEdgeCount,\n connection_count: connections ? connections.length : null,\n process_catalog_count: processCatalog ? processCatalog.length : null,\n multiplication_factor_count: multiplicationFactorCount,\n zero_multiplication_factor_count: zeroMultiplicationFactorCount,\n validation: {\n available: validationAggregate.reportPath !== null,\n ok: validation.ok,\n report_file: validation.reportFile,\n engine_count: validation.engineCount,\n issue_count: validation.issues.length,\n },\n artifacts: {\n summary: summaryArtifact ? entry.summaryPath : null,\n connections: connections ? entry.connectionsPath : null,\n process_catalog: processCatalog ? entry.processCatalogPath : null,\n },\n finding_count: findings.length,\n severity_counts: counts,\n },\n findings,\n };\n}\n\nfunction buildInvocationIndex(\n layout: LifecyclemodelReviewLayout,\n invocationIndex: JsonObject,\n options: RunLifecyclemodelReviewOptions,\n now: Date,\n): JsonObject {\n const priorInvocations = Array.isArray(invocationIndex.invocations)\n ? [...invocationIndex.invocations]\n : [];\n const command = [\n 'review',\n 'lifecyclemodel',\n '--run-dir',\n options.runDir,\n '--out-dir',\n options.outDir,\n ];\n\n if (nonEmptyString(options.logicVersion)) {\n command.push('--logic-version', options.logicVersion as string);\n }\n if (nonEmptyString(options.startTs)) {\n command.push('--start-ts', options.startTs as string);\n }\n if (nonEmptyString(options.endTs)) {\n command.push('--end-ts', options.endTs as string);\n }\n\n return {\n ...invocationIndex,\n schema_version:\n typeof invocationIndex.schema_version === 'number' ? invocationIndex.schema_version : 1,\n invocations: [\n ...priorInvocations,\n {\n command,\n cwd: options.cwd ?? process.cwd(),\n created_at: now.toISOString(),\n run_id: layout.runId,\n run_root: layout.runRoot,\n report_path: layout.reportPath,\n },\n ],\n };\n}\n\nfunction buildNextActions(\n layout: LifecyclemodelReviewLayout,\n validationAggregate: LifecyclemodelValidationAggregate,\n): string[] {\n return [\n `inspect: ${layout.findingsPath}`,\n validationAggregate.reportPath\n ? `inspect: ${validationAggregate.reportPath}`\n : `run: tiangong lifecyclemodel validate-build --run-dir ${layout.runRoot}`,\n `run: tiangong lifecyclemodel publish-build --run-dir ${layout.runRoot}`,\n ];\n}\n\nfunction renderZhReview(options: {\n runId: string;\n logicVersion: string;\n runRoot: string;\n modelSummaries: LifecyclemodelReviewModelSummary[];\n findings: LifecyclemodelReviewFinding[];\n validation: LifecyclemodelReviewReport['validation'];\n}): string {\n const lines = [\n '# lifecyclemodel_review_zh\\n',\n `- run_id: \\`${options.runId}\\`\\n`,\n `- logic_version: \\`${options.logicVersion}\\`\\n`,\n `- run_root: \\`${options.runRoot}\\`\\n`,\n '\\n## 总览\\n',\n `- model bundle 数量: **${options.modelSummaries.length}**\\n`,\n `- findings 数量: **${options.findings.length}**\\n`,\n `- validation report: \\`${options.validation.available ? 'available' : 'missing'}\\`\\n`,\n ];\n\n lines.push(\n '\\n## 模型摘要\\n|run name|model uuid 数|processInstance|connections|validation issues|findings|\\n|---|---:|---:|---:|---:|---:|\\n',\n );\n options.modelSummaries.forEach((summary) => {\n lines.push(\n `|${summary.run_name}|${summary.model_uuids.length}|${summary.process_instance_count}|${summary.connection_count ?? 0}|${summary.validation.issue_count}|${summary.finding_count}|\\n`,\n );\n });\n\n lines.push('\\n## Findings\\n');\n if (options.findings.length === 0) {\n lines.push('- 未发现新的 lifecyclemodel review findings。\\n');\n } else {\n lines.push('\\n|run name|severity|source|rule id|message|\\n|---|---|---|---|---|\\n');\n options.findings.slice(0, 200).forEach((finding) => {\n lines.push(\n `|${finding.run_name}|${finding.severity}|${finding.source}|${finding.rule_id}|${finding.message.replace(/\\|/gu, '/')}|\\n`,\n );\n });\n }\n\n lines.push(\n '\\n## 说明\\n',\n '- 当前 review lifecyclemodel 保持 local-first / artifact-first,只读取现有 build run 与 validate-build 产物。\\n',\n '- 当前命令不引入 Python、LangGraph 或 skill 私有 review runtime。\\n',\n );\n\n return lines.join('');\n}\n\nfunction renderEnReview(options: {\n runId: string;\n logicVersion: string;\n runRoot: string;\n modelSummaries: LifecyclemodelReviewModelSummary[];\n findings: LifecyclemodelReviewFinding[];\n validation: LifecyclemodelReviewReport['validation'];\n}): string {\n const lines = [\n '# lifecyclemodel_review_en\\n',\n `- run_id: \\`${options.runId}\\`\\n`,\n `- logic_version: \\`${options.logicVersion}\\`\\n`,\n `- run_root: \\`${options.runRoot}\\`\\n`,\n '\\n## Summary\\n',\n `- model bundles: **${options.modelSummaries.length}**\\n`,\n `- findings: **${options.findings.length}**\\n`,\n `- validation report: \\`${options.validation.available ? 'available' : 'missing'}\\`\\n`,\n ];\n\n lines.push(\n '\\n## Model overview\\n|run name|model uuids|process instances|connections|validation issues|findings|\\n|---|---:|---:|---:|---:|---:|\\n',\n );\n options.modelSummaries.forEach((summary) => {\n lines.push(\n `|${summary.run_name}|${summary.model_uuids.length}|${summary.process_instance_count}|${summary.connection_count ?? 0}|${summary.validation.issue_count}|${summary.finding_count}|\\n`,\n );\n });\n\n if (options.findings.length > 0) {\n lines.push('\\n## Findings\\n');\n options.findings.slice(0, 100).forEach((finding) => {\n lines.push(`- [${finding.severity}] ${finding.run_name}: ${finding.message}\\n`);\n });\n }\n\n return lines.join('');\n}\n\nfunction renderTiming(options: {\n runId: string;\n startTs?: string;\n endTs?: string;\n modelCount: number;\n}): string {\n const lines = ['# lifecyclemodel_review_timing\\n', `- run_id: \\`${options.runId}\\`\\n`];\n if (options.startTs && options.endTs) {\n const started = Date.parse(options.startTs);\n const ended = Date.parse(options.endTs);\n if (!Number.isFinite(started) || !Number.isFinite(ended)) {\n throw new CliError('Expected --start-ts and --end-ts to be valid ISO timestamps.', {\n code: 'LIFECYCLEMODEL_REVIEW_INVALID_TIMESTAMP',\n exitCode: 2,\n });\n }\n\n lines.push(`- start: \\`${options.startTs}\\`\\n`);\n lines.push(`- end: \\`${options.endTs}\\`\\n`);\n lines.push(`- total elapsed: **${((ended - started) / 60_000).toFixed(2)} min**\\n`);\n }\n\n lines.push(`- model bundles reviewed: \\`${options.modelCount}\\`\\n`);\n lines.push(\n '- major time consumers: model JSON parsing, validation issue aggregation, artifact checks.\\n',\n );\n return lines.join('');\n}\n\nexport async function runLifecyclemodelReview(\n options: RunLifecyclemodelReviewOptions,\n): Promise<LifecyclemodelReviewReport> {\n const layout = resolveLayout(options);\n ensureRunRootExists(layout);\n readRequiredRunManifest(layout);\n const invocationIndex = readInvocationIndex(layout);\n const validationAggregate = readValidationAggregate(layout);\n const modelEntries = discoverModelEntries(layout);\n const logicVersion = options.logicVersion?.trim() || 'lifecyclemodel-review-v1.0';\n const now = options.now ?? (() => new Date());\n const generatedAt = now();\n\n const reviewedModels = modelEntries.map((entry) => buildModelReview(entry, validationAggregate));\n const modelSummaries = reviewedModels.map((model) => model.summary);\n const findings = reviewedModels.flatMap((model) => model.findings);\n const report: LifecyclemodelReviewReport = {\n schema_version: 1,\n generated_at_utc: generatedAt.toISOString(),\n status: 'completed_local_lifecyclemodel_review',\n run_id: layout.runId,\n run_root: layout.runRoot,\n out_dir: layout.outDir,\n logic_version: logicVersion,\n model_count: modelSummaries.length,\n finding_count: findings.length,\n severity_counts: severityCounts(findings),\n validation: {\n available: validationAggregate.reportPath !== null,\n ok: validationAggregate.ok,\n report: validationAggregate.reportPath,\n },\n files: {\n run_manifest: layout.runManifestPath,\n invocation_index: layout.invocationIndexPath,\n validation_report: validationAggregate.reportPath,\n model_summaries: layout.modelSummariesPath,\n findings: layout.findingsPath,\n summary: layout.summaryPath,\n review_zh: layout.reviewZhPath,\n review_en: layout.reviewEnPath,\n timing: layout.timingPath,\n report: layout.reportPath,\n },\n model_summaries: modelSummaries,\n next_actions: buildNextActions(layout, validationAggregate),\n };\n\n writeJsonArtifact(\n layout.invocationIndexPath,\n buildInvocationIndex(layout, invocationIndex, options, generatedAt),\n );\n writeJsonLinesArtifact(layout.modelSummariesPath, modelSummaries);\n writeJsonLinesArtifact(layout.findingsPath, findings);\n writeJsonArtifact(layout.summaryPath, {\n run_id: report.run_id,\n logic_version: report.logic_version,\n model_count: report.model_count,\n finding_count: report.finding_count,\n severity_counts: copyJson(report.severity_counts),\n validation: copyJson(report.validation),\n });\n writeTextArtifact(\n layout.reviewZhPath,\n renderZhReview({\n runId: report.run_id,\n logicVersion: report.logic_version,\n runRoot: report.run_root,\n modelSummaries,\n findings,\n validation: report.validation,\n }),\n );\n writeTextArtifact(\n layout.reviewEnPath,\n renderEnReview({\n runId: report.run_id,\n logicVersion: report.logic_version,\n runRoot: report.run_root,\n modelSummaries,\n findings,\n validation: report.validation,\n }),\n );\n writeTextArtifact(\n layout.timingPath,\n renderTiming({\n runId: report.run_id,\n startTs: options.startTs,\n endTs: options.endTs,\n modelCount: report.model_count,\n }),\n );\n writeJsonArtifact(layout.reportPath, report);\n\n return report;\n}\n\nexport const __testInternals = {\n buildLayout,\n resolveLayout,\n readInvocationIndex,\n discoverModelEntries,\n readValidationAggregate,\n readModelFileReviewInfo,\n buildModelReview,\n buildInvocationIndex,\n buildNextActions,\n renderZhReview,\n renderEnReview,\n renderTiming,\n};\n"]}