@tiangong-lca/cli 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -30
- package/dist/src/cli.js +913 -113
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-local.js +231 -0
- package/dist/src/lib/dataset-local.js.map +1 -0
- package/dist/src/lib/dataset-references-rewrite.js +214 -0
- package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
- package/dist/src/lib/dataset-validate.js +191 -0
- package/dist/src/lib/dataset-validate.js.map +1 -0
- package/dist/src/lib/flow-regen-product.js +2 -10
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js +4 -8
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
- package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-bundle-save.js +468 -0
- package/dist/src/lib/lifecyclemodel-bundle-save.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-graph.js +248 -0
- package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js +3 -1
- package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/process-auto-build.js +11 -8
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-batch-build.js +6 -3
- package/dist/src/lib/process-batch-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +870 -0
- package/dist/src/lib/process-dedup-review.js.map +1 -0
- package/dist/src/lib/process-payload-validation.js +50 -0
- package/dist/src/lib/process-payload-validation.js.map +1 -0
- package/dist/src/lib/process-publish-build.js +4 -6
- package/dist/src/lib/process-publish-build.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +1028 -0
- package/dist/src/lib/process-refresh-references.js.map +1 -0
- package/dist/src/lib/process-resume-build.js +4 -6
- package/dist/src/lib/process-resume-build.js.map +1 -1
- package/dist/src/lib/process-save-draft-run.js +31 -12
- package/dist/src/lib/process-save-draft-run.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +859 -0
- package/dist/src/lib/process-scope-statistics.js.map +1 -0
- package/dist/src/lib/process-verify-rows.js +250 -0
- package/dist/src/lib/process-verify-rows.js.map +1 -0
- package/dist/src/lib/publish.js +54 -4
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/remote.js +4 -4
- package/dist/src/lib/remote.js.map +1 -1
- package/dist/src/lib/review-lifecyclemodel.js +2 -2
- package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/tidas-sdk-validation.js +96 -0
- package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
- package/dist/src/lib/user-api-key.js +1 -1
- package/dist/src/lib/user-api-key.js.map +1 -1
- package/package.json +4 -4
- /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
- /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-refresh-references.js","sourceRoot":"","sources":["../../../src/lib/process-refresh-references.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n syncStateAwareProcessRecord,\n type ProcessStateAwareWriteResult,\n type SyncStateAwareProcessRecordOptions,\n} from './process-save-draft.js';\nimport {\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { deriveSupabaseProjectBaseUrl, requireSupabaseRestRuntime } from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport { redactEmail, requireUserApiKeyCredentials } from './user-api-key.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype ProcessManifestRow = {\n id: string;\n version: string;\n modified_at: string | null;\n state_code: number | null;\n model_id: string | null;\n};\n\ntype ProcessDetailRow = ProcessManifestRow & {\n user_id: string | null;\n json: JsonObject;\n};\n\ntype LatestReferenceRow = {\n id: string;\n version: string;\n json: JsonObject;\n modified_at: string | null;\n state_code: number | null;\n user_id: string | null;\n team_id: string | null;\n};\n\ntype LatestReferenceCacheEntry = {\n row: LatestReferenceRow | null;\n count: number;\n error?: string;\n};\n\ntype ReferenceNode = JsonObject & {\n '@refObjectId': string;\n '@version': string;\n '@type': string;\n};\n\ntype CollectedReference = {\n node: ReferenceNode;\n path: string;\n};\n\ntype TouchedReference = {\n id: string;\n type: string;\n from_version: string;\n to_version: string;\n path: string;\n};\n\ntype UnresolvedReference = {\n id: string;\n type: string;\n version: string;\n reason: string;\n};\n\ntype UpdateSummary = {\n version_updates: number;\n description_updates: number;\n touched_refs: TouchedReference[];\n unresolved_refs: UnresolvedReference[];\n};\n\ntype ProgressStatus = 'saved' | 'dry_run' | 'skipped' | 'validation_blocked' | 'error';\n\ntype ProgressRecord = {\n time: string;\n key: string;\n id?: string;\n version?: string;\n status: ProgressStatus;\n note?: string;\n ref_count?: number;\n version_updates?: number;\n description_updates?: number;\n unresolved_count?: number;\n changed_ref_count?: number;\n schema_validator?: string;\n schema_issue_count?: number;\n schema_issues?: ProcessPayloadValidationResult['issues'];\n touched_refs?: TouchedReference[];\n unresolved_refs?: UnresolvedReference[];\n write_path?: string;\n write_operation?: string;\n error?: string;\n};\n\ntype RefreshManifest = {\n schema_version: 1;\n generated_at_utc: string;\n user_id: string;\n masked_user_email: string;\n source: 'current_user_processes';\n order: 'modified_at.desc,id.asc';\n page_size: number;\n count: number;\n rows: ProcessManifestRow[];\n};\n\nexport type ProcessRefreshReferencesReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_reference_refresh' | 'completed_process_reference_refresh_with_errors';\n out_dir: string;\n mode: 'dry_run' | 'apply';\n user_id: string;\n masked_user_email: string;\n counts: {\n manifest: number;\n selected: number;\n already_completed: number;\n pending: number;\n saved: number;\n dry_run: number;\n skipped: number;\n validation_blocked: number;\n errors: number;\n };\n files: {\n manifest: string;\n progress_jsonl: string;\n errors_jsonl: string;\n validation_blockers_jsonl: string;\n summary_json: string;\n report_md: string;\n };\n};\n\nexport type RunProcessRefreshReferencesOptions = {\n outDir: string;\n apply?: boolean | null;\n reuseManifest?: boolean | null;\n limit?: number | null;\n pageSize?: number | null;\n concurrency?: number | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl?: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n};\n\nconst DEFAULT_TIMEOUT_MS = 15_000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_PAGE_SIZE = 500;\nconst DEFAULT_CONCURRENCY = 1;\nconst MAX_PAGE_SIZE = 1_000;\nconst MAX_CONCURRENCY = 8;\n\nconst TABLE_BY_TYPE = new Map<string, string>([\n ['contact data set', 'contacts'],\n ['source data set', 'sources'],\n ['unit group data set', 'unitgroups'],\n ['flow property data set', 'flowproperties'],\n ['flow data set', 'flows'],\n ['process data set', 'processes'],\n ['lifeCycleModel data set', 'lifecyclemodels'],\n ['LCIA method data set', 'lciamethods'],\n] as const);\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction requiredNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction toPositiveInteger(value: number, label: string, code: string, max?: number): number {\n if (!Number.isInteger(value) || value <= 0 || (max !== undefined && value > max)) {\n throw new CliError(\n max === undefined\n ? `Expected ${label} to be a positive integer.`\n : `Expected ${label} to be a positive integer not greater than ${max}.`,\n {\n code,\n exitCode: 2,\n },\n );\n }\n return value;\n}\n\nfunction toOptionalPositiveInteger(\n value: number | null | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n return toPositiveInteger(value, label, code);\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction recordKey(row: Pick<ProcessManifestRow, 'id' | 'version'>): string {\n return `${row.id}:${row.version}`;\n}\n\nfunction parseContentRangeTotal(value: string | null): number | null {\n if (!value) {\n return null;\n }\n const match = value.match(/\\/(\\d+|\\*)$/u);\n if (!match || match[1] === '*') {\n return null;\n }\n return Number.parseInt(match[1]!, 10);\n}\n\nfunction normalizeVersion(version: string): string {\n return version.trim();\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = normalizeVersion(left)\n .split('.')\n .map((part) => Number(part));\n const rightParts = normalizeVersion(right)\n .split('.')\n .map((part) => Number(part));\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const leftValue = Number.isFinite(leftParts[index]) ? leftParts[index] : 0;\n const rightValue = Number.isFinite(rightParts[index]) ? rightParts[index] : 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n\n return normalizeVersion(left).localeCompare(normalizeVersion(right));\n}\n\nfunction jsonToList(value: unknown): unknown[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction getLangList(value: unknown): JsonObject[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (value['#text'] !== undefined || value['@xml:lang'] !== undefined) {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const entries = getLangList(value);\n if (lang) {\n for (const entry of entries) {\n if (\n trimText(entry['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(entry['#text'])\n ) {\n return trimText(entry['#text']);\n }\n }\n }\n for (const entry of entries) {\n if (trimText(entry['#text'])) {\n return trimText(entry['#text']);\n }\n }\n return '';\n}\n\nfunction genFlowName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.flowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genFlowNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genFlowName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction genProcessName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.functionalUnitFlowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genProcessNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genProcessName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction normalizeDatasetPayload(payload: unknown, label: string): JsonObject {\n if (typeof payload === 'string') {\n try {\n const parsed = JSON.parse(payload) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(`Remote dataset payload was not a JSON object for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID',\n exitCode: 1,\n details: parsed,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Remote dataset payload was not valid JSON for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n if (!isRecord(payload)) {\n throw new CliError(`Remote dataset payload was missing json for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload;\n}\n\nfunction getShortDescription(payload: JsonObject, type: string): JsonObject[] {\n if (type === 'flow data set') {\n const flowDataSet = isRecord(payload.flowDataSet) ? payload.flowDataSet : {};\n const info = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genFlowNameJson(name);\n }\n\n if (type === 'process data set') {\n const processDataSet = isRecord(payload.processDataSet) ? payload.processDataSet : {};\n const info = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genProcessNameJson(name);\n }\n\n if (type === 'contact data set') {\n const contactDataSet = isRecord(payload.contactDataSet) ? payload.contactDataSet : {};\n const info = isRecord(contactDataSet.contactInformation)\n ? contactDataSet.contactInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (type === 'source data set') {\n const sourceDataSet = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : {};\n const info = isRecord(sourceDataSet.sourceInformation) ? sourceDataSet.sourceInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (type === 'flow property data set') {\n const flowPropertyDataSet = isRecord(payload.flowPropertyDataSet)\n ? payload.flowPropertyDataSet\n : {};\n const info = isRecord(flowPropertyDataSet.flowPropertyInformation)\n ? flowPropertyDataSet.flowPropertyInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (type === 'unit group data set') {\n const unitGroupDataSet = isRecord(payload.unitGroupDataSet) ? payload.unitGroupDataSet : {};\n const info = isRecord(unitGroupDataSet.unitGroupInformation)\n ? unitGroupDataSet.unitGroupInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (type === 'LCIA method data set') {\n const lciaMethodDataSet = isRecord(payload.lciaMethodDataSet) ? payload.lciaMethodDataSet : {};\n const info = isRecord(lciaMethodDataSet.LCIAMethodInformation)\n ? lciaMethodDataSet.LCIAMethodInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n return [];\n}\n\nasync function parseJsonResponse(response: ResponseLike, label: string): Promise<unknown> {\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (!text.trim()) {\n return null;\n }\n if (!contentType.includes('application/json')) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new CliError(`${label} returned invalid JSON.`, {\n code: 'PROCESS_REFRESH_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nasync function fetchJsonWithRetry(options: {\n url: string;\n init: RequestInit;\n label: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<{ status: number; headers: Headers; body: unknown }> {\n let lastError: unknown = null;\n\n for (let attempt = 1; attempt <= options.maxRetries; attempt += 1) {\n try {\n const response = await options.fetchImpl(options.url, {\n ...options.init,\n signal: AbortSignal.timeout(options.timeoutMs),\n });\n const body = await parseJsonResponse(response, options.label);\n if (!response.ok) {\n throw new CliError(`${options.label} failed with ${response.status}.`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: {\n status: response.status,\n body,\n url: options.url,\n },\n });\n }\n return {\n status: response.status,\n headers: new Headers({\n 'content-range': response.headers.get('content-range') ?? '',\n 'content-type': response.headers.get('content-type') ?? '',\n }),\n body,\n };\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxRetries) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, attempt * 1_500));\n }\n }\n\n if (lastError instanceof CliError) {\n throw lastError;\n }\n\n throw new CliError(`${options.label} failed after ${options.maxRetries} attempt(s).`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: String(lastError),\n });\n}\n\nasync function resolveRemoteAuth(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n maxRetries: number;\n}): Promise<{\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n maskedUserEmail: string;\n}> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n const userResponse = await fetchJsonWithRetry({\n url: `${deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl)}/auth/v1/user`,\n init: {\n method: 'GET',\n headers: {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: 'supabase current-user lookup',\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const userId = isRecord(userResponse.body) ? trimText(userResponse.body.id) : '';\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_REFRESH_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n });\n }\n\n return {\n projectBaseUrl: deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl),\n publishableKey: runtime.publishableKey,\n accessToken: session.accessToken,\n userId,\n maskedUserEmail: redactEmail(requireUserApiKeyCredentials(runtime.userApiKey).email),\n };\n}\n\nfunction normalizeManifestRow(value: unknown): ProcessManifestRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = trimText(value.id);\n const version = trimText(value.version);\n if (!id || !version) {\n return null;\n }\n return {\n id,\n version,\n modified_at: trimText(value.modified_at) || null,\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n model_id: trimText(value.model_id) || null,\n };\n}\n\nfunction readManifest(filePath: string): RefreshManifest | null {\n if (!existsSync(filePath)) {\n return null;\n }\n try {\n const parsed = JSON.parse(readFileSync(filePath, 'utf8')) as unknown;\n if (!isRecord(parsed) || !Array.isArray(parsed.rows)) {\n throw new Error('manifest rows missing');\n }\n const rows = parsed.rows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n const userId = trimText(parsed.user_id);\n const maskedUserEmail = trimText(parsed.masked_user_email);\n if (!userId || !maskedUserEmail) {\n throw new Error('manifest user metadata missing');\n }\n return {\n schema_version: 1,\n generated_at_utc: trimText(parsed.generated_at_utc) || nowIso(),\n user_id: userId,\n masked_user_email: maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size:\n typeof parsed.page_size === 'number' && Number.isInteger(parsed.page_size)\n ? parsed.page_size\n : DEFAULT_PAGE_SIZE,\n count:\n typeof parsed.count === 'number' && Number.isInteger(parsed.count)\n ? parsed.count\n : rows.length,\n rows,\n };\n } catch (error) {\n throw new CliError(`Manifest file is not valid JSON: ${filePath}`, {\n code: 'PROCESS_REFRESH_MANIFEST_INVALID',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nasync function snapshotProcesses(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n pageSize: number;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessManifestRow[]> {\n const rows: ProcessManifestRow[] = [];\n let total: number | null = null;\n\n for (let offset = 0; total === null || offset < total; offset += options.pageSize) {\n const url = new URL(`${options.projectBaseUrl}/rest/v1/processes`);\n url.searchParams.set('select', 'id,version,modified_at,state_code,model_id');\n url.searchParams.set('user_id', `eq.${options.userId}`);\n url.searchParams.set('order', 'modified_at.desc,id.asc');\n url.searchParams.set('limit', String(options.pageSize));\n url.searchParams.set('offset', String(offset));\n\n const page = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n Prefer: 'count=exact',\n },\n },\n label: `process refresh snapshot page fetch (offset=${offset})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const pageRows = Array.isArray(page.body) ? page.body : [];\n const normalizedRows = pageRows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n rows.push(...normalizedRows);\n total = parseContentRangeTotal(page.headers.get('content-range')) ?? rows.length;\n if (normalizedRows.length === 0) {\n break;\n }\n }\n\n const deduped: ProcessManifestRow[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n const key = recordKey(row);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(row);\n }\n\n return deduped;\n}\n\nfunction readCompleted(progressFile: string, applyMode: boolean): Set<string> {\n const completed = new Set<string>();\n if (!existsSync(progressFile)) {\n return completed;\n }\n const doneStatuses = applyMode\n ? new Set<ProgressStatus>(['saved', 'skipped', 'validation_blocked'])\n : new Set<ProgressStatus>(['dry_run', 'skipped', 'validation_blocked']);\n const lines = readFileSync(progressFile, 'utf8').split(/\\r?\\n/u).filter(Boolean);\n\n for (const line of lines) {\n try {\n const record = JSON.parse(line) as unknown;\n if (!isRecord(record)) {\n continue;\n }\n const key = trimText(record.key);\n const status = trimText(record.status) as ProgressStatus;\n if (key && doneStatuses.has(status)) {\n completed.add(key);\n }\n } catch {\n // Ignore corrupt progress rows and continue resuming from the valid ones.\n }\n }\n\n return completed;\n}\n\nasync function fetchProcessDetail(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n row: ProcessManifestRow;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessDetailRow> {\n const url = new URL(`${options.projectBaseUrl}/rest/v1/processes`);\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,model_id,user_id');\n url.searchParams.set('id', `eq.${options.row.id}`);\n url.searchParams.set('version', `eq.${options.row.version}`);\n url.searchParams.set('limit', '1');\n\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: `process refresh detail fetch (${recordKey(options.row)})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const firstRow = rows[0];\n if (!isRecord(firstRow)) {\n throw new CliError(`Process not found for ${recordKey(options.row)}.`, {\n code: 'PROCESS_REFRESH_DETAIL_NOT_FOUND',\n exitCode: 1,\n });\n }\n\n return {\n id: trimText(firstRow.id) || options.row.id,\n version: trimText(firstRow.version) || options.row.version,\n modified_at: trimText(firstRow.modified_at) || null,\n state_code: typeof firstRow.state_code === 'number' ? firstRow.state_code : null,\n model_id: trimText(firstRow.model_id) || null,\n user_id: trimText(firstRow.user_id) || null,\n json: normalizeDatasetPayload(firstRow.json, recordKey(options.row)),\n };\n}\n\nfunction collectRefs(root: JsonObject): CollectedReference[] {\n const refs: CollectedReference[] = [];\n const visited = new WeakSet<object>();\n\n const walk = (current: unknown, pathParts: string[]) => {\n if (!isRecord(current) && !Array.isArray(current)) {\n return;\n }\n if (visited.has(current)) {\n return;\n }\n visited.add(current);\n\n if (\n isRecord(current) &&\n typeof current['@refObjectId'] === 'string' &&\n typeof current['@version'] === 'string' &&\n typeof current['@type'] === 'string' &&\n TABLE_BY_TYPE.has(current['@type'])\n ) {\n refs.push({\n node: current as ReferenceNode,\n path: pathParts.join('.'),\n });\n }\n\n if (Array.isArray(current)) {\n current.forEach((item, index) => walk(item, [...pathParts, String(index)]));\n return;\n }\n\n Object.entries(current).forEach(([key, value]) => walk(value, [...pathParts, key]));\n };\n\n walk(root, []);\n return refs;\n}\n\nasync function fetchLatestRefs(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n refs: CollectedReference[];\n cache: Map<string, LatestReferenceCacheEntry>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<void> {\n const missingByTable = new Map<string, Set<string>>();\n\n for (const ref of options.refs) {\n const table = TABLE_BY_TYPE.get(ref.node['@type']);\n const id = ref.node['@refObjectId'];\n const cacheKey = table ? `${table}:${id}` : '';\n if (!table || options.cache.has(cacheKey)) {\n continue;\n }\n if (!missingByTable.has(table)) {\n missingByTable.set(table, new Set<string>());\n }\n missingByTable.get(table)?.add(id);\n }\n\n for (const [table, idSet] of missingByTable.entries()) {\n const ids = Array.from(idSet);\n for (let offset = 0; offset < ids.length; offset += 50) {\n const chunk = ids.slice(offset, offset + 50);\n const url = new URL(`${options.projectBaseUrl}/rest/v1/${table}`);\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,user_id,team_id');\n url.searchParams.set('id', `in.(${chunk.join(',')})`);\n url.searchParams.set('order', 'version.desc');\n\n try {\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: `reference refresh ${table} lookup`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const byId = new Map<string, LatestReferenceRow[]>();\n for (const rawRow of rows) {\n if (!isRecord(rawRow)) {\n continue;\n }\n const id = trimText(rawRow.id);\n const version = trimText(rawRow.version);\n if (!id || !version) {\n continue;\n }\n const normalized: LatestReferenceRow = {\n id,\n version,\n json: normalizeDatasetPayload(rawRow.json, `${table}:${id}@${version}`),\n modified_at: trimText(rawRow.modified_at) || null,\n state_code: typeof rawRow.state_code === 'number' ? rawRow.state_code : null,\n user_id: trimText(rawRow.user_id) || null,\n team_id: trimText(rawRow.team_id) || null,\n };\n const existing = byId.get(id) ?? [];\n existing.push(normalized);\n byId.set(id, existing);\n }\n\n for (const id of chunk) {\n const versions = byId.get(id) ?? [];\n versions.sort((left, right) => compareVersions(right.version, left.version));\n options.cache.set(`${table}:${id}`, {\n row: versions[0] ?? null,\n count: versions.length,\n });\n }\n } catch (error) {\n const message = String(error);\n for (const id of chunk) {\n options.cache.set(`${table}:${id}`, {\n row: null,\n count: 0,\n error: message,\n });\n }\n }\n }\n }\n}\n\nfunction updateProcessJson(\n payload: JsonObject,\n refs: CollectedReference[],\n cache: Map<string, LatestReferenceCacheEntry>,\n): UpdateSummary {\n let versionUpdates = 0;\n let descriptionUpdates = 0;\n const touchedRefs: TouchedReference[] = [];\n const unresolvedRefs: UnresolvedReference[] = [];\n\n for (const ref of refs) {\n const table = TABLE_BY_TYPE.get(ref.node['@type']);\n const cacheKey = table ? `${table}:${ref.node['@refObjectId']}` : '';\n const latest = cacheKey ? cache.get(cacheKey) : null;\n\n if (!latest?.row) {\n unresolvedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n version: ref.node['@version'],\n reason: latest?.error ?? 'no accessible version',\n });\n continue;\n }\n\n const currentVersion = ref.node['@version'];\n const latestVersion = latest.row.version;\n const description = getShortDescription(latest.row.json, ref.node['@type']);\n const beforeDescription = JSON.stringify(ref.node['common:shortDescription'] ?? null);\n const afterDescription = description.length ? JSON.stringify(description) : beforeDescription;\n\n if (compareVersions(latestVersion, currentVersion) > 0) {\n ref.node['@version'] = latestVersion;\n versionUpdates += 1;\n }\n\n if (description.length && beforeDescription !== afterDescription) {\n ref.node['common:shortDescription'] = description;\n descriptionUpdates += 1;\n }\n\n if (ref.node['@version'] !== currentVersion || beforeDescription !== afterDescription) {\n touchedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n from_version: currentVersion,\n to_version: ref.node['@version'],\n path: ref.path,\n });\n }\n }\n\n void payload;\n return {\n version_updates: versionUpdates,\n description_updates: descriptionUpdates,\n touched_refs: touchedRefs,\n unresolved_refs: unresolvedRefs,\n };\n}\n\nfunction appendReportHeader(\n reportFile: string,\n context: {\n mode: 'dry_run' | 'apply';\n generatedAtUtc: string;\n manifestCount: number;\n },\n): void {\n if (existsSync(reportFile)) {\n return;\n }\n writeTextArtifact(\n reportFile,\n [\n '# TianGong Process Reference Refresh',\n '',\n `- mode: ${context.mode}`,\n `- generated_at_utc: ${context.generatedAtUtc}`,\n `- manifest_count: ${context.manifestCount}`,\n '',\n '| time | status | key | version updates | description updates | refs | note |',\n '| --- | --- | --- | ---: | ---: | ---: | --- |',\n '',\n ].join('\\n'),\n );\n}\n\nfunction appendReportRow(reportFile: string, record: ProgressRecord): void {\n const note = trimText(record.note ?? record.error)\n .replace(/\\|/gu, '/')\n .slice(0, 180);\n appendFileSync(\n reportFile,\n `| ${record.time} | ${record.status} | ${record.key} | ${record.version_updates ?? 0} | ${record.description_updates ?? 0} | ${record.ref_count ?? 0} | ${note} |\\n`,\n 'utf8',\n );\n}\n\nasync function processOne(options: {\n row: ProcessManifestRow;\n apply: boolean;\n files: ProcessRefreshReferencesReport['files'];\n auth: Awaited<ReturnType<typeof resolveRemoteAuth>>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n env: NodeJS.ProcessEnv;\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n refCache: Map<string, LatestReferenceCacheEntry>;\n}): Promise<ProgressRecord> {\n const time = new Date().toISOString();\n const key = recordKey(options.row);\n\n try {\n if (typeof options.row.state_code === 'number' && options.row.state_code >= 20) {\n const record: ProgressRecord = {\n time,\n key,\n status: 'skipped',\n note: `state_code=${options.row.state_code}`,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n const detail = await fetchProcessDetail({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n row: options.row,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const payload = JSON.parse(JSON.stringify(detail.json)) as JsonObject;\n const refs = collectRefs(payload);\n\n await fetchLatestRefs({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n refs,\n cache: options.refCache,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const update = updateProcessJson(payload, refs, options.refCache);\n const validation = options.validateProcessPayloadImpl(payload);\n\n if (!validation.ok || update.unresolved_refs.length > 0) {\n const noteParts: string[] = [];\n if (!validation.ok) {\n noteParts.push(`schema_issue_count=${validation.issue_count}`);\n }\n if (update.unresolved_refs.length > 0) {\n noteParts.push(`unresolved_refs=${update.unresolved_refs.length}`);\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'validation_blocked',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n schema_issues: validation.issues.slice(0, 20),\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n note: noteParts.join('; '),\n };\n writeJsonLinesArtifact(options.files.validation_blockers_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n let writeResult: ProcessStateAwareWriteResult | null = null;\n if (options.apply) {\n writeResult = await options.syncStateAwareProcessRecordImpl({\n id: detail.id,\n version: detail.version,\n payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'process_refresh_references',\n source: 'tiangong-lca process refresh-references',\n },\n modelId: detail.model_id,\n });\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: options.apply ? 'saved' : 'dry_run',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n write_path:\n writeResult && 'write_path' in writeResult ? (writeResult.write_path as string) : undefined,\n write_operation: writeResult?.operation,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n } catch (error) {\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'error',\n error: error instanceof Error ? error.message : String(error),\n };\n writeJsonLinesArtifact(options.files.errors_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n}\n\nasync function workerPool<T, TResult>(\n items: T[],\n concurrency: number,\n worker: (item: T, index: number) => Promise<TResult>,\n): Promise<TResult[]> {\n let cursor = 0;\n const results: TResult[] = [];\n\n async function runWorker() {\n while (cursor < items.length) {\n const currentIndex = cursor;\n cursor += 1;\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: concurrency }, () => runWorker()));\n return results;\n}\n\nexport async function runProcessRefreshReferences(\n options: RunProcessRefreshReferencesOptions,\n): Promise<ProcessRefreshReferencesReport> {\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_REFRESH_OUT_DIR_REQUIRED'),\n );\n const apply = Boolean(options.apply);\n const reuseManifest = Boolean(options.reuseManifest);\n const limit = toOptionalPositiveInteger(\n options.limit ?? null,\n '--limit',\n 'PROCESS_REFRESH_LIMIT_INVALID',\n );\n const pageSize = toPositiveInteger(\n options.pageSize ?? DEFAULT_PAGE_SIZE,\n '--page-size',\n 'PROCESS_REFRESH_PAGE_SIZE_INVALID',\n MAX_PAGE_SIZE,\n );\n const concurrency = toPositiveInteger(\n options.concurrency ?? DEFAULT_CONCURRENCY,\n '--concurrency',\n 'PROCESS_REFRESH_CONCURRENCY_INVALID',\n MAX_CONCURRENCY,\n );\n const timeoutMs = toPositiveInteger(\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n 'timeout',\n 'PROCESS_REFRESH_TIMEOUT_INVALID',\n );\n const maxRetries = toPositiveInteger(\n options.maxRetries ?? DEFAULT_MAX_RETRIES,\n 'retry count',\n 'PROCESS_REFRESH_MAX_RETRIES_INVALID',\n );\n const env = options.env ?? process.env;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const generatedAtUtc = nowIso(options.now);\n const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const syncStateAwareProcessRecordImpl =\n options.syncStateAwareProcessRecordImpl ?? syncStateAwareProcessRecord;\n\n mkdirSync(outDir, { recursive: true });\n\n const files: ProcessRefreshReferencesReport['files'] = {\n manifest: path.join(outDir, 'inputs', 'processes.manifest.json'),\n progress_jsonl: path.join(outDir, 'outputs', 'progress.jsonl'),\n errors_jsonl: path.join(outDir, 'outputs', 'errors.jsonl'),\n validation_blockers_jsonl: path.join(outDir, 'outputs', 'validation-blockers.jsonl'),\n summary_json: path.join(outDir, 'outputs', 'summary.json'),\n report_md: path.join(outDir, 'reports', 'process-refresh-references.md'),\n };\n\n const auth = await resolveRemoteAuth({\n env,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n maxRetries,\n });\n\n let manifest = readManifest(files.manifest);\n if (!manifest || !reuseManifest) {\n const rows = await snapshotProcesses({\n projectBaseUrl: auth.projectBaseUrl,\n publishableKey: auth.publishableKey,\n accessToken: auth.accessToken,\n userId: auth.userId,\n pageSize,\n fetchImpl,\n timeoutMs,\n maxRetries,\n });\n manifest = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n user_id: auth.userId,\n masked_user_email: auth.maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size: pageSize,\n count: rows.length,\n rows,\n };\n writeJsonArtifact(files.manifest, manifest);\n }\n\n appendReportHeader(files.report_md, {\n mode: apply ? 'apply' : 'dry_run',\n generatedAtUtc,\n manifestCount: manifest.rows.length,\n });\n\n const completed = readCompleted(files.progress_jsonl, apply);\n const selectedRows = manifest.rows.slice(0, limit ?? manifest.rows.length);\n const pendingRows = selectedRows.filter((row) => !completed.has(recordKey(row)));\n const refCache = new Map<string, LatestReferenceCacheEntry>();\n const counts = {\n manifest: manifest.rows.length,\n selected: selectedRows.length,\n already_completed: selectedRows.length - pendingRows.length,\n pending: pendingRows.length,\n saved: 0,\n dry_run: 0,\n skipped: 0,\n validation_blocked: 0,\n errors: 0,\n };\n\n const results = await workerPool(pendingRows, concurrency, (row) =>\n processOne({\n row,\n apply,\n files,\n auth,\n fetchImpl,\n timeoutMs,\n maxRetries,\n env,\n validateProcessPayloadImpl,\n syncStateAwareProcessRecordImpl,\n refCache,\n }),\n );\n\n for (const record of results) {\n if (record.status === 'saved') {\n counts.saved += 1;\n } else if (record.status === 'dry_run') {\n counts.dry_run += 1;\n } else if (record.status === 'skipped') {\n counts.skipped += 1;\n } else if (record.status === 'validation_blocked') {\n counts.validation_blocked += 1;\n } else if (record.status === 'error') {\n counts.errors += 1;\n }\n }\n\n const report: ProcessRefreshReferencesReport = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status:\n counts.errors > 0\n ? 'completed_process_reference_refresh_with_errors'\n : 'completed_process_reference_refresh',\n out_dir: outDir,\n mode: apply ? 'apply' : 'dry_run',\n user_id: manifest.user_id,\n masked_user_email: manifest.masked_user_email,\n counts,\n files,\n };\n\n writeJsonArtifact(files.summary_json, report);\n appendFileSync(\n files.report_md,\n `\\n## Summary\\n\\n\\`\\`\\`json\\n${JSON.stringify(report, null, 2)}\\n\\`\\`\\`\\n`,\n 'utf8',\n );\n\n return report;\n}\n\nexport const __testInternals = {\n appendReportHeader,\n collectRefs,\n compareVersions,\n fetchLatestRefs,\n fetchJsonWithRetry,\n genFlowName,\n genFlowNameJson,\n genProcessName,\n genProcessNameJson,\n getLangList,\n getLangText,\n getShortDescription,\n normalizeDatasetPayload,\n normalizeManifestRow,\n parseJsonResponse,\n parseContentRangeTotal,\n readCompleted,\n readManifest,\n recordKey,\n updateProcessJson,\n};\n"]}
|
|
@@ -54,15 +54,13 @@ function buildLayout(runRoot, runId) {
|
|
|
54
54
|
function resolveLayout(options) {
|
|
55
55
|
const runId = nonEmptyString(options.runId);
|
|
56
56
|
const runDir = nonEmptyString(options.runDir);
|
|
57
|
-
if (!
|
|
58
|
-
throw new CliError('Missing required --run-
|
|
57
|
+
if (!runDir) {
|
|
58
|
+
throw new CliError('Missing required --run-dir for process resume-build.', {
|
|
59
59
|
code: 'PROCESS_RESUME_RUN_REQUIRED',
|
|
60
60
|
exitCode: 2,
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
const runRoot = runDir
|
|
64
|
-
? path.resolve(runDir)
|
|
65
|
-
: path.resolve('artifacts', 'process_from_flow', runId);
|
|
63
|
+
const runRoot = path.resolve(runDir);
|
|
66
64
|
const derivedRunId = path.basename(runRoot);
|
|
67
65
|
if (runDir && runId && derivedRunId !== runId) {
|
|
68
66
|
throw new CliError(`process resume-build run-id does not match run-dir basename: ${runId} !== ${derivedRunId}`, {
|
|
@@ -252,7 +250,7 @@ function buildNextActions(layout, summary) {
|
|
|
252
250
|
summary.next_stage
|
|
253
251
|
? `future: migrate CLI stage executor for ${summary.next_stage}`
|
|
254
252
|
: `future: inspect completed run state for ${layout.runId}`,
|
|
255
|
-
`future: tiangong process publish-build --run-
|
|
253
|
+
`future: tiangong-lca process publish-build --run-dir ${layout.runRoot}`,
|
|
256
254
|
];
|
|
257
255
|
}
|
|
258
256
|
function buildAgentHandoffSummary(layout, state, resumeMetadata, summary, now) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-resume-build.js","sourceRoot":"","sources":["../../../src/lib/process-resume-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA2DpD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,KAAa;IAEb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,QAAQ,EAAE,EAAE;YAC5E,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,iDAAiD,QAAQ,EAAE,EAAE;YAC9E,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,KAAa;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO;QACL,KAAK;QACL,OAAO;QACP,aAAa;QACb,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACzC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC;QAC3D,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,8BAA8B,CAAC;QACtE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,4BAA4B,CAAC;QAC7E,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACrE,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,uBAAuB,CAAC;QAC7E,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,sBAAsB,CAAC;QAC3E,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,sBAAsB,CAAC;QAC1E,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,kCAAkC,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAqC;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,kEAAkE,EAAE;YACrF,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAe,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,MAAM,IAAI,KAAK,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAChB,gEAAgE,KAAK,QAAQ,YAAY,EAAE,EAC3F;YACE,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAgC;IAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,QAAQ,CAAC,4CAA4C,MAAM,CAAC,OAAO,EAAE,EAAE;YAC/E,IAAI,EAAE,8BAA8B;YACpC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAgC;IAC/D,MAAM,QAAQ,GAAG,sBAAsB,CACrC,MAAM,CAAC,eAAe,EACtB,qCAAqC,EACrC,qCAAqC,EACrC,cAAc,CACf,CAAC;IAEF,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,aAAa,IAAI,aAAa,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAChB,qDAAqD,MAAM,CAAC,eAAe,EAAE,EAC7E;YACE,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAC,KAAK;gBACtB,MAAM,EAAE,aAAa;aACtB;SACF,CACF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgC;IACzD,MAAM,KAAK,GAAG,sBAAsB,CAClC,MAAM,CAAC,SAAS,EAChB,8BAA8B,EAC9B,8BAA8B,EAC9B,OAAO,CACR,CAAC;IAEF,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,UAAU,IAAI,UAAU,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAAC,+CAA+C,MAAM,CAAC,SAAS,EAAE,EAAE;YACpF,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAC,KAAK;gBACtB,MAAM,EAAE,UAAU;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAgC;IAClE,OAAO,sBAAsB,CAC3B,MAAM,CAAC,kBAAkB,EACzB,gCAAgC,EAChC,gCAAgC,EAChC,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAgC;IAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,yDAAyD,MAAM,CAAC,mBAAmB,EAAE,EACrF;YACE,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO;YACL,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,6EAA6E,MAAM,CAAC,mBAAmB,EAAE,EACzG;YACE,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgC;IACzD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,6DAA6D,MAAM,CAAC,iBAAiB,EAAE,EACvF;gBACE,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,KAAK,EAAE;aACnB,CACF,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB;IAC1C,OAAO;QACL,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAChD,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5C,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5C,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;QAChD,sBAAsB,EAAE,gBAAgB,CAAC,KAAK,CAAC,yBAAyB,CAAC;QACzE,qBAAqB,EAAE,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC/D,oBAAoB,EAAE,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;AAC7F,CAAC;AAED,SAAS,WAAW,CAAC,OAAqB;IACxC,OAAO,CACL,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,UAAU;YACpF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC;IACjB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CACV,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAoB,EAAE,WAAmB;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,CAAC,eAAe,GAAG;QACxB,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,WAAW;KAC1B,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,cAA0B,EAAE,GAAS;IACjF,OAAO;QACL,GAAG,KAAK;QACR,YAAY,EAAE,iBAAiB;QAC/B,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,cAAc,CAAC,OAAO;QACtC,mBAAmB,EAAE,GAAG,CAAC,WAAW,EAAE;QACtC,oBAAoB,EAAE,cAAc;QACpC,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAgC,EAChC,eAA2B,EAC3B,OAAqC,EACrC,GAAS;IAET,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC;QACjE,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAE5C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,GAAG,eAAe;QAClB,cAAc,EACZ,OAAO,eAAe,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACzF,WAAW,EAAE;YACX,GAAG,gBAAgB;YACnB;gBACE,OAAO;gBACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBACjC,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC7B,MAAM,EAAE,MAAM,CAAC,KAAK;gBACpB,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,WAAW,EAAE,MAAM,CAAC,UAAU;aAC/B;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAgC;IACnD,OAAO;QACL,SAAS,EAAE,mBAAmB;QAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACjD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;QAChD,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAgC,EAChC,OAAkD;IAElD,OAAO;QACL,YAAY,MAAM,CAAC,SAAS,EAAE;QAC9B,YAAY,MAAM,CAAC,kBAAkB,EAAE;QACvC,YAAY,MAAM,CAAC,mBAAmB,EAAE;QACxC,OAAO,CAAC,UAAU;YAChB,CAAC,CAAC,0CAA0C,OAAO,CAAC,UAAU,EAAE;YAChE,CAAC,CAAC,2CAA2C,MAAM,CAAC,KAAK,EAAE;QAC7D,mDAAmD,MAAM,CAAC,KAAK,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAgC,EAChC,KAAiB,EACjB,cAA0B,EAC1B,OAAkD,EAClD,GAAS;IAET,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,OAAO,EAAE,sBAAsB;QAC/B,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAC1C,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAC1C,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,0BAA0B,EAAE,gBAAgB,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAC3E,oBAAoB,EAAE,EAAE;QACxB,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE;YACT,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;YACrB,qBAAqB,EAAE,IAAI;YAC3B,wBAAwB,EAAE,IAAI;YAC9B,eAAe,EAAE,MAAM,CAAC,kBAAkB;YAC1C,cAAc,EAAE,MAAM,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,MAAM,CAAC,mBAAmB;SAC7C;QACD,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;QAC/C,KAAK,EAAE;YACL,MAAM,EAAE,mCAAmC;YAC3C,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;YAC5C,YAAY,EAAE,cAAc,CAAC,WAAW;YACxC,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,OAAO,EAAE,cAAc,CAAC,OAAO;SAChC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,MAAgC,EAChC,KAAiB,EACjB,cAA0B,EAC1B,OAAkD,EAClD,GAAS;IAET,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,mCAAmC;QAC3C,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5C,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;QAChD,UAAU,EAAE,cAAc,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,IAAI,EAAE,CAAC;QAC/F,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5C,aAAa,EAAE,OAAO;QACtB,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC,SAAS;YACvB,eAAe,EAAE,MAAM,CAAC,kBAAkB;YAC1C,YAAY,EAAE,MAAM,CAAC,eAAe;YACpC,gBAAgB,EAAE,MAAM,CAAC,mBAAmB;YAC5C,eAAe,EAAE,MAAM,CAAC,kBAAkB;YAC1C,cAAc,EAAE,MAAM,CAAC,iBAAiB;YACxC,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B;QACD,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAqC;IAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,iBAAiB,CAC5B,MAAM,CAAC,SAAS,EAChB,EAAE,MAAM,EAAE,qCAAqC,EAAE,GAAG,EAAE,EACtD,GAAG,EAAE;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,mBAAmB,CAAC;YACzC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC;YACtC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;YAC5C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;YAC7B,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,wBAAwB,CAC7C,MAAM,EACN,YAAY,EACZ,cAAc,EACd,OAAO,EACP,GAAG,CACJ,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE/E,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAClD,iBAAiB,CAAC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QACtE,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC7D,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC7D,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE7C,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,gBAAgB;IAChB,WAAW;CACZ,CAAC","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n readJsonArtifact,\n readJsonLinesArtifact,\n writeJsonArtifact,\n writeJsonLinesArtifact,\n} from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { buildResumeMetadata, writeLatestRunId, type RunLayout } from './run.js';\nimport { withStateFileLock } from './state-lock.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type ProcessResumeBuildLayout = {\n runId: string;\n runRoot: string;\n collectionDir: string;\n cacheDir: string;\n manifestsDir: string;\n reportsDir: string;\n latestRunIdPath: string;\n statePath: string;\n handoffSummaryPath: string;\n runManifestPath: string;\n invocationIndexPath: string;\n resumeMetadataPath: string;\n resumeHistoryPath: string;\n reportPath: string;\n};\n\nexport type ProcessResumeBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'prepared_local_process_resume_run';\n run_id: string;\n run_root: string;\n request_id: string | null;\n resumed_from: string;\n checkpoint: string | null;\n attempt: number;\n state_summary: {\n build_status: string | null;\n next_stage: string | null;\n stop_after: string | null;\n process_count: number;\n matched_exchange_count: number;\n process_dataset_count: number;\n source_dataset_count: number;\n };\n files: {\n state: string;\n handoff_summary: string;\n run_manifest: string;\n invocation_index: string;\n resume_metadata: string;\n resume_history: string;\n report: string;\n };\n next_actions: string[];\n};\n\nexport type RunProcessResumeBuildOptions = {\n runId?: string;\n runDir?: string | null;\n now?: Date;\n cwd?: string;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return Boolean(value && typeof value === 'object' && !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 readRequiredJsonObject(\n filePath: string,\n missingCode: string,\n invalidCode: string,\n label: string,\n): JsonRecord {\n if (!existsSync(filePath)) {\n throw new CliError(`Required process resume artifact not found: ${filePath}`, {\n code: missingCode,\n exitCode: 2,\n details: { label, filePath },\n });\n }\n\n const value = readJsonArtifact(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected process resume artifact JSON object: ${filePath}`, {\n code: invalidCode,\n exitCode: 2,\n details: { label, filePath },\n });\n }\n\n return value;\n}\n\nfunction buildLayout(runRoot: string, runId: string): ProcessResumeBuildLayout {\n const collectionDir = path.dirname(runRoot);\n\n return {\n runId,\n runRoot,\n collectionDir,\n cacheDir: path.join(runRoot, 'cache'),\n manifestsDir: path.join(runRoot, 'manifests'),\n reportsDir: path.join(runRoot, 'reports'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n statePath: path.join(runRoot, 'cache', 'process_from_flow_state.json'),\n handoffSummaryPath: path.join(runRoot, 'cache', 'agent_handoff_summary.json'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n resumeMetadataPath: path.join(runRoot, 'manifests', 'resume-metadata.json'),\n resumeHistoryPath: path.join(runRoot, 'manifests', 'resume-history.jsonl'),\n reportPath: path.join(runRoot, 'reports', 'process-resume-build-report.json'),\n };\n}\n\nfunction resolveLayout(options: RunProcessResumeBuildOptions): ProcessResumeBuildLayout {\n const runId = nonEmptyString(options.runId);\n const runDir = nonEmptyString(options.runDir);\n\n if (!runId && !runDir) {\n throw new CliError('Missing required --run-id or --run-dir for process resume-build.', {\n code: 'PROCESS_RESUME_RUN_REQUIRED',\n exitCode: 2,\n });\n }\n\n const runRoot = runDir\n ? path.resolve(runDir)\n : path.resolve('artifacts', 'process_from_flow', runId as string);\n const derivedRunId = path.basename(runRoot);\n\n if (runDir && runId && derivedRunId !== runId) {\n throw new CliError(\n `process resume-build run-id does not match run-dir basename: ${runId} !== ${derivedRunId}`,\n {\n code: 'PROCESS_RESUME_RUN_ID_MISMATCH',\n exitCode: 2,\n },\n );\n }\n\n return buildLayout(runRoot, runId ?? derivedRunId);\n}\n\nfunction ensureRunRootExists(layout: ProcessResumeBuildLayout): void {\n if (!existsSync(layout.runRoot)) {\n throw new CliError(`process resume-build run root not found: ${layout.runRoot}`, {\n code: 'PROCESS_RESUME_RUN_NOT_FOUND',\n exitCode: 2,\n });\n }\n}\n\nfunction readRequiredRunManifest(layout: ProcessResumeBuildLayout): JsonRecord {\n const manifest = readRequiredJsonObject(\n layout.runManifestPath,\n 'PROCESS_RESUME_RUN_MANIFEST_MISSING',\n 'PROCESS_RESUME_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 `process resume-build run manifest runId mismatch: ${layout.runManifestPath}`,\n {\n code: 'PROCESS_RESUME_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 readRequiredState(layout: ProcessResumeBuildLayout): JsonRecord {\n const state = readRequiredJsonObject(\n layout.statePath,\n 'PROCESS_RESUME_STATE_MISSING',\n 'PROCESS_RESUME_STATE_INVALID',\n 'state',\n );\n\n const stateRunId = nonEmptyString(state.run_id);\n if (stateRunId && stateRunId !== layout.runId) {\n throw new CliError(`process resume-build state run_id mismatch: ${layout.statePath}`, {\n code: 'PROCESS_RESUME_STATE_RUN_ID_MISMATCH',\n exitCode: 2,\n details: {\n expected: layout.runId,\n actual: stateRunId,\n },\n });\n }\n\n return state;\n}\n\nfunction readRequiredHandoffSummary(layout: ProcessResumeBuildLayout): JsonRecord {\n return readRequiredJsonObject(\n layout.handoffSummaryPath,\n 'PROCESS_RESUME_HANDOFF_MISSING',\n 'PROCESS_RESUME_HANDOFF_INVALID',\n 'handoff-summary',\n );\n}\n\nfunction readInvocationIndex(layout: ProcessResumeBuildLayout): JsonRecord {\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 process resume invocation index JSON object: ${layout.invocationIndexPath}`,\n {\n code: 'PROCESS_RESUME_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 process resume invocation index to contain an invocations array: ${layout.invocationIndexPath}`,\n {\n code: 'PROCESS_RESUME_INVOCATION_INDEX_INVALID',\n exitCode: 2,\n },\n );\n }\n\n return value;\n}\n\nfunction readResumeHistory(layout: ProcessResumeBuildLayout): JsonRecord[] {\n if (!existsSync(layout.resumeHistoryPath)) {\n return [];\n }\n\n const rows = readJsonLinesArtifact(layout.resumeHistoryPath);\n return rows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected process resume history JSONL rows to be objects: ${layout.resumeHistoryPath}`,\n {\n code: 'PROCESS_RESUME_HISTORY_INVALID',\n exitCode: 2,\n details: { index },\n },\n );\n }\n\n return row;\n });\n}\n\nfunction stateArrayLength(value: unknown): number {\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction buildStateSummary(state: JsonRecord): ProcessResumeBuildReport['state_summary'] {\n return {\n build_status: nonEmptyString(state.build_status),\n next_stage: nonEmptyString(state.next_stage),\n stop_after: nonEmptyString(state.stop_after),\n process_count: stateArrayLength(state.processes),\n matched_exchange_count: stateArrayLength(state.matched_process_exchanges),\n process_dataset_count: stateArrayLength(state.process_datasets),\n source_dataset_count: stateArrayLength(state.source_datasets),\n };\n}\n\nfunction resolveResumedFrom(state: JsonRecord): string {\n return nonEmptyString(state.next_stage) ?? nonEmptyString(state.build_status) ?? 'unknown';\n}\n\nfunction nextAttempt(history: JsonRecord[]): number {\n return (\n history.reduce((maxAttempt, entry) => {\n const attempt = entry.attempt;\n return typeof attempt === 'number' && Number.isFinite(attempt) && attempt > maxAttempt\n ? attempt\n : maxAttempt;\n }, 0) + 1\n );\n}\n\nfunction updateStepMarkers(stepMarkers: unknown, completedAt: string): JsonRecord {\n const markers = isRecord(stepMarkers) ? { ...stepMarkers } : {};\n markers.resume_prepared = {\n status: 'completed',\n completed_at: completedAt,\n };\n return markers;\n}\n\nfunction buildUpdatedState(state: JsonRecord, resumeMetadata: JsonRecord, now: Date): JsonRecord {\n return {\n ...state,\n build_status: 'resume_prepared',\n stop_after: null,\n resume_attempt: resumeMetadata.attempt,\n resume_requested_at: now.toISOString(),\n last_resume_metadata: resumeMetadata,\n step_markers: updateStepMarkers(state.step_markers, now.toISOString()),\n };\n}\n\nfunction buildInvocationIndex(\n layout: ProcessResumeBuildLayout,\n invocationIndex: JsonRecord,\n options: RunProcessResumeBuildOptions,\n now: Date,\n): JsonRecord {\n const priorInvocations = Array.isArray(invocationIndex.invocations)\n ? [...invocationIndex.invocations]\n : [];\n const command = ['process', 'resume-build'];\n\n if (options.runId) {\n command.push('--run-id', options.runId);\n }\n if (options.runDir) {\n command.push('--run-dir', options.runDir);\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 asRunLayout(layout: ProcessResumeBuildLayout): RunLayout {\n return {\n namespace: 'process_from_flow',\n runId: layout.runId,\n artifactsRoot: path.dirname(layout.collectionDir),\n collectionDir: layout.collectionDir,\n runRoot: layout.runRoot,\n cacheDir: layout.cacheDir,\n inputsDir: path.join(layout.runRoot, 'input'),\n outputsDir: path.join(layout.runRoot, 'exports'),\n reportsDir: layout.reportsDir,\n logsDir: path.join(layout.runRoot, 'logs'),\n manifestsDir: layout.manifestsDir,\n latestRunIdPath: layout.latestRunIdPath,\n };\n}\n\nfunction buildNextActions(\n layout: ProcessResumeBuildLayout,\n summary: ProcessResumeBuildReport['state_summary'],\n): string[] {\n return [\n `inspect: ${layout.statePath}`,\n `inspect: ${layout.resumeMetadataPath}`,\n `inspect: ${layout.invocationIndexPath}`,\n summary.next_stage\n ? `future: migrate CLI stage executor for ${summary.next_stage}`\n : `future: inspect completed run state for ${layout.runId}`,\n `future: tiangong process publish-build --run-id ${layout.runId}`,\n ];\n}\n\nfunction buildAgentHandoffSummary(\n layout: ProcessResumeBuildLayout,\n state: JsonRecord,\n resumeMetadata: JsonRecord,\n summary: ProcessResumeBuildReport['state_summary'],\n now: Date,\n): JsonRecord {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n run_id: layout.runId,\n command: 'process resume-build',\n flow_path: nonEmptyString(state.flow_path),\n operation: nonEmptyString(state.operation),\n stop_after: null,\n process_count: summary.process_count,\n matched_exchange_count: summary.matched_exchange_count,\n process_dataset_count: summary.process_dataset_count,\n source_dataset_count: summary.source_dataset_count,\n remaining_placeholder_refs: stateArrayLength(state.placeholder_resolutions),\n placeholder_examples: [],\n publish_summary: {},\n artifacts: {\n state_path: layout.statePath,\n timing_report: null,\n publish_summary: null,\n llm_cost_report: null,\n process_update_report: null,\n flow_auto_build_manifest: null,\n resume_metadata: layout.resumeMetadataPath,\n resume_history: layout.resumeHistoryPath,\n invocation_index: layout.invocationIndexPath,\n },\n next_actions: buildNextActions(layout, summary),\n extra: {\n status: 'prepared_local_process_resume_run',\n request_id: nonEmptyString(state.request_id),\n resumed_from: resumeMetadata.resumedFrom,\n checkpoint: resumeMetadata.checkpoint,\n attempt: resumeMetadata.attempt,\n },\n };\n}\n\nfunction buildReport(\n layout: ProcessResumeBuildLayout,\n state: JsonRecord,\n resumeMetadata: JsonRecord,\n summary: ProcessResumeBuildReport['state_summary'],\n now: Date,\n): ProcessResumeBuildReport {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: 'prepared_local_process_resume_run',\n run_id: layout.runId,\n run_root: layout.runRoot,\n request_id: nonEmptyString(state.request_id),\n resumed_from: String(resumeMetadata.resumedFrom),\n checkpoint: resumeMetadata.checkpoint === null ? null : String(resumeMetadata.checkpoint ?? ''),\n attempt: Number(resumeMetadata.attempt ?? 1),\n state_summary: summary,\n files: {\n state: layout.statePath,\n handoff_summary: layout.handoffSummaryPath,\n run_manifest: layout.runManifestPath,\n invocation_index: layout.invocationIndexPath,\n resume_metadata: layout.resumeMetadataPath,\n resume_history: layout.resumeHistoryPath,\n report: layout.reportPath,\n },\n next_actions: buildNextActions(layout, summary),\n };\n}\n\nexport async function runProcessResumeBuild(\n options: RunProcessResumeBuildOptions,\n): Promise<ProcessResumeBuildReport> {\n const now = options.now ?? new Date();\n const layout = resolveLayout(options);\n ensureRunRootExists(layout);\n readRequiredRunManifest(layout);\n readRequiredHandoffSummary(layout);\n const history = readResumeHistory(layout);\n const invocationIndex = readInvocationIndex(layout);\n\n return await withStateFileLock(\n layout.statePath,\n { reason: 'process-resume-build.prepare_resume', now },\n () => {\n const state = readRequiredState(layout);\n const resumeMetadata = buildResumeMetadata({\n runId: layout.runId,\n resumedFrom: resolveResumedFrom(state),\n checkpoint: nonEmptyString(state.stop_after),\n attempt: nextAttempt(history),\n resumedAt: now,\n });\n const updatedState = buildUpdatedState(state, resumeMetadata, now);\n const summary = buildStateSummary(updatedState);\n const updatedInvocationIndex = buildInvocationIndex(layout, invocationIndex, options, now);\n const handoffSummary = buildAgentHandoffSummary(\n layout,\n updatedState,\n resumeMetadata,\n summary,\n now,\n );\n const report = buildReport(layout, updatedState, resumeMetadata, summary, now);\n\n writeJsonArtifact(layout.statePath, updatedState);\n writeJsonArtifact(layout.invocationIndexPath, updatedInvocationIndex);\n writeJsonArtifact(layout.resumeMetadataPath, resumeMetadata);\n writeJsonLinesArtifact(layout.resumeHistoryPath, resumeMetadata, { append: true });\n writeJsonArtifact(layout.handoffSummaryPath, handoffSummary);\n writeLatestRunId(asRunLayout(layout), layout.runId);\n writeJsonArtifact(layout.reportPath, report);\n\n return report;\n },\n );\n}\n\n// Exposed for deterministic unit coverage of process resume-build helpers.\nexport const __testInternals = {\n buildLayout,\n resolveLayout,\n buildStateSummary,\n resolveResumedFrom,\n nextAttempt,\n updateStepMarkers,\n buildUpdatedState,\n buildInvocationIndex,\n buildNextActions,\n buildReport,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"process-resume-build.js","sourceRoot":"","sources":["../../../src/lib/process-resume-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n readJsonArtifact,\n readJsonLinesArtifact,\n writeJsonArtifact,\n writeJsonLinesArtifact,\n} from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { buildResumeMetadata, writeLatestRunId, type RunLayout } from './run.js';\nimport { withStateFileLock } from './state-lock.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type ProcessResumeBuildLayout = {\n runId: string;\n runRoot: string;\n collectionDir: string;\n cacheDir: string;\n manifestsDir: string;\n reportsDir: string;\n latestRunIdPath: string;\n statePath: string;\n handoffSummaryPath: string;\n runManifestPath: string;\n invocationIndexPath: string;\n resumeMetadataPath: string;\n resumeHistoryPath: string;\n reportPath: string;\n};\n\nexport type ProcessResumeBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'prepared_local_process_resume_run';\n run_id: string;\n run_root: string;\n request_id: string | null;\n resumed_from: string;\n checkpoint: string | null;\n attempt: number;\n state_summary: {\n build_status: string | null;\n next_stage: string | null;\n stop_after: string | null;\n process_count: number;\n matched_exchange_count: number;\n process_dataset_count: number;\n source_dataset_count: number;\n };\n files: {\n state: string;\n handoff_summary: string;\n run_manifest: string;\n invocation_index: string;\n resume_metadata: string;\n resume_history: string;\n report: string;\n };\n next_actions: string[];\n};\n\nexport type RunProcessResumeBuildOptions = {\n runId?: string;\n runDir?: string | null;\n now?: Date;\n cwd?: string;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return Boolean(value && typeof value === 'object' && !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 readRequiredJsonObject(\n filePath: string,\n missingCode: string,\n invalidCode: string,\n label: string,\n): JsonRecord {\n if (!existsSync(filePath)) {\n throw new CliError(`Required process resume artifact not found: ${filePath}`, {\n code: missingCode,\n exitCode: 2,\n details: { label, filePath },\n });\n }\n\n const value = readJsonArtifact(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected process resume artifact JSON object: ${filePath}`, {\n code: invalidCode,\n exitCode: 2,\n details: { label, filePath },\n });\n }\n\n return value;\n}\n\nfunction buildLayout(runRoot: string, runId: string): ProcessResumeBuildLayout {\n const collectionDir = path.dirname(runRoot);\n\n return {\n runId,\n runRoot,\n collectionDir,\n cacheDir: path.join(runRoot, 'cache'),\n manifestsDir: path.join(runRoot, 'manifests'),\n reportsDir: path.join(runRoot, 'reports'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n statePath: path.join(runRoot, 'cache', 'process_from_flow_state.json'),\n handoffSummaryPath: path.join(runRoot, 'cache', 'agent_handoff_summary.json'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n resumeMetadataPath: path.join(runRoot, 'manifests', 'resume-metadata.json'),\n resumeHistoryPath: path.join(runRoot, 'manifests', 'resume-history.jsonl'),\n reportPath: path.join(runRoot, 'reports', 'process-resume-build-report.json'),\n };\n}\n\nfunction resolveLayout(options: RunProcessResumeBuildOptions): ProcessResumeBuildLayout {\n const runId = nonEmptyString(options.runId);\n const runDir = nonEmptyString(options.runDir);\n\n if (!runDir) {\n throw new CliError('Missing required --run-dir for process resume-build.', {\n code: 'PROCESS_RESUME_RUN_REQUIRED',\n exitCode: 2,\n });\n }\n\n const runRoot = path.resolve(runDir);\n const derivedRunId = path.basename(runRoot);\n\n if (runDir && runId && derivedRunId !== runId) {\n throw new CliError(\n `process resume-build run-id does not match run-dir basename: ${runId} !== ${derivedRunId}`,\n {\n code: 'PROCESS_RESUME_RUN_ID_MISMATCH',\n exitCode: 2,\n },\n );\n }\n\n return buildLayout(runRoot, runId ?? derivedRunId);\n}\n\nfunction ensureRunRootExists(layout: ProcessResumeBuildLayout): void {\n if (!existsSync(layout.runRoot)) {\n throw new CliError(`process resume-build run root not found: ${layout.runRoot}`, {\n code: 'PROCESS_RESUME_RUN_NOT_FOUND',\n exitCode: 2,\n });\n }\n}\n\nfunction readRequiredRunManifest(layout: ProcessResumeBuildLayout): JsonRecord {\n const manifest = readRequiredJsonObject(\n layout.runManifestPath,\n 'PROCESS_RESUME_RUN_MANIFEST_MISSING',\n 'PROCESS_RESUME_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 `process resume-build run manifest runId mismatch: ${layout.runManifestPath}`,\n {\n code: 'PROCESS_RESUME_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 readRequiredState(layout: ProcessResumeBuildLayout): JsonRecord {\n const state = readRequiredJsonObject(\n layout.statePath,\n 'PROCESS_RESUME_STATE_MISSING',\n 'PROCESS_RESUME_STATE_INVALID',\n 'state',\n );\n\n const stateRunId = nonEmptyString(state.run_id);\n if (stateRunId && stateRunId !== layout.runId) {\n throw new CliError(`process resume-build state run_id mismatch: ${layout.statePath}`, {\n code: 'PROCESS_RESUME_STATE_RUN_ID_MISMATCH',\n exitCode: 2,\n details: {\n expected: layout.runId,\n actual: stateRunId,\n },\n });\n }\n\n return state;\n}\n\nfunction readRequiredHandoffSummary(layout: ProcessResumeBuildLayout): JsonRecord {\n return readRequiredJsonObject(\n layout.handoffSummaryPath,\n 'PROCESS_RESUME_HANDOFF_MISSING',\n 'PROCESS_RESUME_HANDOFF_INVALID',\n 'handoff-summary',\n );\n}\n\nfunction readInvocationIndex(layout: ProcessResumeBuildLayout): JsonRecord {\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 process resume invocation index JSON object: ${layout.invocationIndexPath}`,\n {\n code: 'PROCESS_RESUME_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 process resume invocation index to contain an invocations array: ${layout.invocationIndexPath}`,\n {\n code: 'PROCESS_RESUME_INVOCATION_INDEX_INVALID',\n exitCode: 2,\n },\n );\n }\n\n return value;\n}\n\nfunction readResumeHistory(layout: ProcessResumeBuildLayout): JsonRecord[] {\n if (!existsSync(layout.resumeHistoryPath)) {\n return [];\n }\n\n const rows = readJsonLinesArtifact(layout.resumeHistoryPath);\n return rows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected process resume history JSONL rows to be objects: ${layout.resumeHistoryPath}`,\n {\n code: 'PROCESS_RESUME_HISTORY_INVALID',\n exitCode: 2,\n details: { index },\n },\n );\n }\n\n return row;\n });\n}\n\nfunction stateArrayLength(value: unknown): number {\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction buildStateSummary(state: JsonRecord): ProcessResumeBuildReport['state_summary'] {\n return {\n build_status: nonEmptyString(state.build_status),\n next_stage: nonEmptyString(state.next_stage),\n stop_after: nonEmptyString(state.stop_after),\n process_count: stateArrayLength(state.processes),\n matched_exchange_count: stateArrayLength(state.matched_process_exchanges),\n process_dataset_count: stateArrayLength(state.process_datasets),\n source_dataset_count: stateArrayLength(state.source_datasets),\n };\n}\n\nfunction resolveResumedFrom(state: JsonRecord): string {\n return nonEmptyString(state.next_stage) ?? nonEmptyString(state.build_status) ?? 'unknown';\n}\n\nfunction nextAttempt(history: JsonRecord[]): number {\n return (\n history.reduce((maxAttempt, entry) => {\n const attempt = entry.attempt;\n return typeof attempt === 'number' && Number.isFinite(attempt) && attempt > maxAttempt\n ? attempt\n : maxAttempt;\n }, 0) + 1\n );\n}\n\nfunction updateStepMarkers(stepMarkers: unknown, completedAt: string): JsonRecord {\n const markers = isRecord(stepMarkers) ? { ...stepMarkers } : {};\n markers.resume_prepared = {\n status: 'completed',\n completed_at: completedAt,\n };\n return markers;\n}\n\nfunction buildUpdatedState(state: JsonRecord, resumeMetadata: JsonRecord, now: Date): JsonRecord {\n return {\n ...state,\n build_status: 'resume_prepared',\n stop_after: null,\n resume_attempt: resumeMetadata.attempt,\n resume_requested_at: now.toISOString(),\n last_resume_metadata: resumeMetadata,\n step_markers: updateStepMarkers(state.step_markers, now.toISOString()),\n };\n}\n\nfunction buildInvocationIndex(\n layout: ProcessResumeBuildLayout,\n invocationIndex: JsonRecord,\n options: RunProcessResumeBuildOptions,\n now: Date,\n): JsonRecord {\n const priorInvocations = Array.isArray(invocationIndex.invocations)\n ? [...invocationIndex.invocations]\n : [];\n const command = ['process', 'resume-build'];\n\n if (options.runId) {\n command.push('--run-id', options.runId);\n }\n if (options.runDir) {\n command.push('--run-dir', options.runDir);\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 asRunLayout(layout: ProcessResumeBuildLayout): RunLayout {\n return {\n namespace: 'process_from_flow',\n runId: layout.runId,\n artifactsRoot: path.dirname(layout.collectionDir),\n collectionDir: layout.collectionDir,\n runRoot: layout.runRoot,\n cacheDir: layout.cacheDir,\n inputsDir: path.join(layout.runRoot, 'input'),\n outputsDir: path.join(layout.runRoot, 'exports'),\n reportsDir: layout.reportsDir,\n logsDir: path.join(layout.runRoot, 'logs'),\n manifestsDir: layout.manifestsDir,\n latestRunIdPath: layout.latestRunIdPath,\n };\n}\n\nfunction buildNextActions(\n layout: ProcessResumeBuildLayout,\n summary: ProcessResumeBuildReport['state_summary'],\n): string[] {\n return [\n `inspect: ${layout.statePath}`,\n `inspect: ${layout.resumeMetadataPath}`,\n `inspect: ${layout.invocationIndexPath}`,\n summary.next_stage\n ? `future: migrate CLI stage executor for ${summary.next_stage}`\n : `future: inspect completed run state for ${layout.runId}`,\n `future: tiangong-lca process publish-build --run-dir ${layout.runRoot}`,\n ];\n}\n\nfunction buildAgentHandoffSummary(\n layout: ProcessResumeBuildLayout,\n state: JsonRecord,\n resumeMetadata: JsonRecord,\n summary: ProcessResumeBuildReport['state_summary'],\n now: Date,\n): JsonRecord {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n run_id: layout.runId,\n command: 'process resume-build',\n flow_path: nonEmptyString(state.flow_path),\n operation: nonEmptyString(state.operation),\n stop_after: null,\n process_count: summary.process_count,\n matched_exchange_count: summary.matched_exchange_count,\n process_dataset_count: summary.process_dataset_count,\n source_dataset_count: summary.source_dataset_count,\n remaining_placeholder_refs: stateArrayLength(state.placeholder_resolutions),\n placeholder_examples: [],\n publish_summary: {},\n artifacts: {\n state_path: layout.statePath,\n timing_report: null,\n publish_summary: null,\n llm_cost_report: null,\n process_update_report: null,\n flow_auto_build_manifest: null,\n resume_metadata: layout.resumeMetadataPath,\n resume_history: layout.resumeHistoryPath,\n invocation_index: layout.invocationIndexPath,\n },\n next_actions: buildNextActions(layout, summary),\n extra: {\n status: 'prepared_local_process_resume_run',\n request_id: nonEmptyString(state.request_id),\n resumed_from: resumeMetadata.resumedFrom,\n checkpoint: resumeMetadata.checkpoint,\n attempt: resumeMetadata.attempt,\n },\n };\n}\n\nfunction buildReport(\n layout: ProcessResumeBuildLayout,\n state: JsonRecord,\n resumeMetadata: JsonRecord,\n summary: ProcessResumeBuildReport['state_summary'],\n now: Date,\n): ProcessResumeBuildReport {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: 'prepared_local_process_resume_run',\n run_id: layout.runId,\n run_root: layout.runRoot,\n request_id: nonEmptyString(state.request_id),\n resumed_from: String(resumeMetadata.resumedFrom),\n checkpoint: resumeMetadata.checkpoint === null ? null : String(resumeMetadata.checkpoint ?? ''),\n attempt: Number(resumeMetadata.attempt ?? 1),\n state_summary: summary,\n files: {\n state: layout.statePath,\n handoff_summary: layout.handoffSummaryPath,\n run_manifest: layout.runManifestPath,\n invocation_index: layout.invocationIndexPath,\n resume_metadata: layout.resumeMetadataPath,\n resume_history: layout.resumeHistoryPath,\n report: layout.reportPath,\n },\n next_actions: buildNextActions(layout, summary),\n };\n}\n\nexport async function runProcessResumeBuild(\n options: RunProcessResumeBuildOptions,\n): Promise<ProcessResumeBuildReport> {\n const now = options.now ?? new Date();\n const layout = resolveLayout(options);\n ensureRunRootExists(layout);\n readRequiredRunManifest(layout);\n readRequiredHandoffSummary(layout);\n const history = readResumeHistory(layout);\n const invocationIndex = readInvocationIndex(layout);\n\n return await withStateFileLock(\n layout.statePath,\n { reason: 'process-resume-build.prepare_resume', now },\n () => {\n const state = readRequiredState(layout);\n const resumeMetadata = buildResumeMetadata({\n runId: layout.runId,\n resumedFrom: resolveResumedFrom(state),\n checkpoint: nonEmptyString(state.stop_after),\n attempt: nextAttempt(history),\n resumedAt: now,\n });\n const updatedState = buildUpdatedState(state, resumeMetadata, now);\n const summary = buildStateSummary(updatedState);\n const updatedInvocationIndex = buildInvocationIndex(layout, invocationIndex, options, now);\n const handoffSummary = buildAgentHandoffSummary(\n layout,\n updatedState,\n resumeMetadata,\n summary,\n now,\n );\n const report = buildReport(layout, updatedState, resumeMetadata, summary, now);\n\n writeJsonArtifact(layout.statePath, updatedState);\n writeJsonArtifact(layout.invocationIndexPath, updatedInvocationIndex);\n writeJsonArtifact(layout.resumeMetadataPath, resumeMetadata);\n writeJsonLinesArtifact(layout.resumeHistoryPath, resumeMetadata, { append: true });\n writeJsonArtifact(layout.handoffSummaryPath, handoffSummary);\n writeLatestRunId(asRunLayout(layout), layout.runId);\n writeJsonArtifact(layout.reportPath, report);\n\n return report;\n },\n );\n}\n\n// Exposed for deterministic unit coverage of process resume-build helpers.\nexport const __testInternals = {\n buildLayout,\n resolveLayout,\n buildStateSummary,\n resolveResumedFrom,\n nextAttempt,\n updateStepMarkers,\n buildUpdatedState,\n buildInvocationIndex,\n buildNextActions,\n buildReport,\n};\n"]}
|
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';
|
|
4
4
|
import { CliError } from './errors.js';
|
|
5
5
|
import { readJsonInput } from './io.js';
|
|
6
|
+
import { summarizeProcessPayloadValidation, validateProcessPayload, } from './process-payload-validation.js';
|
|
6
7
|
import { collectPublishInputs, normalizePublishRequest, } from './publish.js';
|
|
7
8
|
import { syncStateAwareProcessRecord, } from './process-save-draft.js';
|
|
8
9
|
import { buildRunId, resolveRunLayout } from './run.js';
|
|
@@ -140,15 +141,30 @@ function processPayloadFromRow(row) {
|
|
|
140
141
|
}
|
|
141
142
|
return row;
|
|
142
143
|
}
|
|
143
|
-
function candidateFromPayload(payload, source, bundlePath) {
|
|
144
|
+
function candidateFromPayload(payload, source, bundlePath, validateProcessPayloadImpl) {
|
|
144
145
|
try {
|
|
145
146
|
const [id, version] = extractProcessIdentity(payload);
|
|
147
|
+
const validation = validateProcessPayloadImpl(payload);
|
|
148
|
+
if (!validation.ok) {
|
|
149
|
+
return {
|
|
150
|
+
id,
|
|
151
|
+
version,
|
|
152
|
+
source,
|
|
153
|
+
bundle_path: bundlePath,
|
|
154
|
+
payload,
|
|
155
|
+
validation,
|
|
156
|
+
error: {
|
|
157
|
+
message: summarizeProcessPayloadValidation(validation),
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
146
161
|
return {
|
|
147
162
|
id,
|
|
148
163
|
version,
|
|
149
164
|
source,
|
|
150
165
|
bundle_path: bundlePath,
|
|
151
166
|
payload,
|
|
167
|
+
validation,
|
|
152
168
|
};
|
|
153
169
|
}
|
|
154
170
|
catch (error) {
|
|
@@ -169,10 +185,10 @@ function candidateFromPayload(payload, source, bundlePath) {
|
|
|
169
185
|
function sourceFromPublishOrigin(origin) {
|
|
170
186
|
return origin.source === 'bundle' ? 'bundle' : 'input';
|
|
171
187
|
}
|
|
172
|
-
function candidateFromPublishEntry(entry) {
|
|
173
|
-
return candidateFromPayload(loadProcessPayloadFromDatasetEntry(entry.entry, entry.origin.base_dir), sourceFromPublishOrigin(entry.origin), entry.origin.bundle_path);
|
|
188
|
+
function candidateFromPublishEntry(entry, validateProcessPayloadImpl) {
|
|
189
|
+
return candidateFromPayload(loadProcessPayloadFromDatasetEntry(entry.entry, entry.origin.base_dir), sourceFromPublishOrigin(entry.origin), entry.origin.bundle_path, validateProcessPayloadImpl);
|
|
174
190
|
}
|
|
175
|
-
function prepareRowsFileInput(inputPath, rawInput) {
|
|
191
|
+
function prepareRowsFileInput(inputPath, rawInput, validateProcessPayloadImpl) {
|
|
176
192
|
const rows = Array.isArray(rawInput) ? rawInput : [rawInput];
|
|
177
193
|
const normalizedRows = rows.map((row, index) => {
|
|
178
194
|
if (!isRecord(row)) {
|
|
@@ -190,10 +206,10 @@ function prepareRowsFileInput(inputPath, rawInput) {
|
|
|
190
206
|
input_path: inputPath,
|
|
191
207
|
row_count: normalizedRows.length,
|
|
192
208
|
},
|
|
193
|
-
processes: normalizedRows.map((row) => candidateFromPayload(processPayloadFromRow(row), 'rows_file', null)),
|
|
209
|
+
processes: normalizedRows.map((row) => candidateFromPayload(processPayloadFromRow(row), 'rows_file', null, validateProcessPayloadImpl)),
|
|
194
210
|
};
|
|
195
211
|
}
|
|
196
|
-
function preparePublishRequestInput(inputPath, rawInput, commit, now) {
|
|
212
|
+
function preparePublishRequestInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl) {
|
|
197
213
|
const normalized = normalizePublishRequest(rawInput, {
|
|
198
214
|
requestPath: inputPath,
|
|
199
215
|
commitOverride: commit,
|
|
@@ -203,13 +219,13 @@ function preparePublishRequestInput(inputPath, rawInput, commit, now) {
|
|
|
203
219
|
return {
|
|
204
220
|
inputKind: 'publish_request',
|
|
205
221
|
normalizedInput: normalized,
|
|
206
|
-
processes: collected.processes.map(candidateFromPublishEntry),
|
|
222
|
+
processes: collected.processes.map((entry) => candidateFromPublishEntry(entry, validateProcessPayloadImpl)),
|
|
207
223
|
};
|
|
208
224
|
}
|
|
209
|
-
function prepareProcessSaveDraftInput(inputPath, rawInput, commit, now) {
|
|
225
|
+
function prepareProcessSaveDraftInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl) {
|
|
210
226
|
return looksLikePublishRequest(rawInput)
|
|
211
|
-
? preparePublishRequestInput(inputPath, rawInput, commit, now)
|
|
212
|
-
: prepareRowsFileInput(inputPath, rawInput);
|
|
227
|
+
? preparePublishRequestInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl)
|
|
228
|
+
: prepareRowsFileInput(inputPath, rawInput, validateProcessPayloadImpl);
|
|
213
229
|
}
|
|
214
230
|
function defaultOutDir(inputPath, commit, now) {
|
|
215
231
|
const runId = buildRunId({
|
|
@@ -239,6 +255,7 @@ function compactCandidate(candidate) {
|
|
|
239
255
|
source: candidate.source,
|
|
240
256
|
bundle_path: candidate.bundle_path,
|
|
241
257
|
payload: candidate.payload,
|
|
258
|
+
...(candidate.validation ? { validation: candidate.validation } : {}),
|
|
242
259
|
...(candidate.error ? { error: candidate.error } : {}),
|
|
243
260
|
};
|
|
244
261
|
}
|
|
@@ -247,7 +264,8 @@ export async function runProcessSaveDraft(options) {
|
|
|
247
264
|
const inputPath = path.resolve(options.inputPath);
|
|
248
265
|
const commit = options.commit === true;
|
|
249
266
|
const rawInput = options.rawInput ?? readStructuredInput(inputPath);
|
|
250
|
-
const
|
|
267
|
+
const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;
|
|
268
|
+
const prepared = prepareProcessSaveDraftInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl);
|
|
251
269
|
const outDir = resolveOutDir(inputPath, options.outDir, commit, now);
|
|
252
270
|
const files = buildFiles(outDir);
|
|
253
271
|
if (commit && (!options.env || !options.fetchImpl)) {
|
|
@@ -266,6 +284,7 @@ export async function runProcessSaveDraft(options) {
|
|
|
266
284
|
source: candidate.source,
|
|
267
285
|
bundle_path: candidate.bundle_path,
|
|
268
286
|
status: 'prepared',
|
|
287
|
+
...(candidate.validation ? { validation: candidate.validation } : {}),
|
|
269
288
|
};
|
|
270
289
|
if (candidate.error) {
|
|
271
290
|
report.status = 'failed';
|
|
@@ -286,7 +305,7 @@ export async function runProcessSaveDraft(options) {
|
|
|
286
305
|
fetchImpl: options.fetchImpl,
|
|
287
306
|
timeoutMs: options.timeoutMs,
|
|
288
307
|
audit: {
|
|
289
|
-
command: 'tiangong process save-draft',
|
|
308
|
+
command: 'tiangong-lca process save-draft',
|
|
290
309
|
source: candidate.source,
|
|
291
310
|
bundle_path: candidate.bundle_path,
|
|
292
311
|
},
|