@tiangong-lca/cli 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +368 -0
- package/bin/tiangong.d.ts +1 -0
- package/bin/tiangong.js +32 -0
- package/dist/scripts/assert-full-coverage.js +77 -0
- package/dist/scripts/assert-full-coverage.js.map +1 -0
- package/dist/src/cli.js +2740 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/lib/artifacts.js +86 -0
- package/dist/src/lib/artifacts.js.map +1 -0
- package/dist/src/lib/dotenv.js +36 -0
- package/dist/src/lib/dotenv.js.map +1 -0
- package/dist/src/lib/env.js +139 -0
- package/dist/src/lib/env.js.map +1 -0
- package/dist/src/lib/errors.js +38 -0
- package/dist/src/lib/errors.js.map +1 -0
- package/dist/src/lib/flow-build-alias-map.js +299 -0
- package/dist/src/lib/flow-build-alias-map.js.map +1 -0
- package/dist/src/lib/flow-get.js +81 -0
- package/dist/src/lib/flow-get.js.map +1 -0
- package/dist/src/lib/flow-governance.js +164 -0
- package/dist/src/lib/flow-governance.js.map +1 -0
- package/dist/src/lib/flow-list.js +187 -0
- package/dist/src/lib/flow-list.js.map +1 -0
- package/dist/src/lib/flow-publish-reviewed-data.js +808 -0
- package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -0
- package/dist/src/lib/flow-publish-version.js +541 -0
- package/dist/src/lib/flow-publish-version.js.map +1 -0
- package/dist/src/lib/flow-read.js +310 -0
- package/dist/src/lib/flow-read.js.map +1 -0
- package/dist/src/lib/flow-regen-product.js +1396 -0
- package/dist/src/lib/flow-regen-product.js.map +1 -0
- package/dist/src/lib/flow-remediate.js +821 -0
- package/dist/src/lib/flow-remediate.js.map +1 -0
- package/dist/src/lib/http.js +45 -0
- package/dist/src/lib/http.js.map +1 -0
- package/dist/src/lib/io.js +30 -0
- package/dist/src/lib/io.js.map +1 -0
- package/dist/src/lib/kb-search.js +83 -0
- package/dist/src/lib/kb-search.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-auto-build.js +1328 -0
- package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-orchestrate.js +1556 -0
- package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js +296 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-resulting-process.js +101 -0
- package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-resulting-process.js +1152 -0
- package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js +238 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -0
- package/dist/src/lib/llm.js +383 -0
- package/dist/src/lib/llm.js.map +1 -0
- package/dist/src/lib/process-auto-build.js +717 -0
- package/dist/src/lib/process-auto-build.js.map +1 -0
- package/dist/src/lib/process-batch-build.js +409 -0
- package/dist/src/lib/process-batch-build.js.map +1 -0
- package/dist/src/lib/process-get.js +66 -0
- package/dist/src/lib/process-get.js.map +1 -0
- package/dist/src/lib/process-publish-build.js +451 -0
- package/dist/src/lib/process-publish-build.js.map +1 -0
- package/dist/src/lib/process-resume-build.js +364 -0
- package/dist/src/lib/process-resume-build.js.map +1 -0
- package/dist/src/lib/publish.js +562 -0
- package/dist/src/lib/publish.js.map +1 -0
- package/dist/src/lib/remote.js +88 -0
- package/dist/src/lib/remote.js.map +1 -0
- package/dist/src/lib/review-flow.js +1110 -0
- package/dist/src/lib/review-flow.js.map +1 -0
- package/dist/src/lib/review-lifecyclemodel.js +727 -0
- package/dist/src/lib/review-lifecyclemodel.js.map +1 -0
- package/dist/src/lib/review-process.js +702 -0
- package/dist/src/lib/review-process.js.map +1 -0
- package/dist/src/lib/run.js +106 -0
- package/dist/src/lib/run.js.map +1 -0
- package/dist/src/lib/state-lock.js +150 -0
- package/dist/src/lib/state-lock.js.map +1 -0
- package/dist/src/lib/supabase-client.js +269 -0
- package/dist/src/lib/supabase-client.js.map +1 -0
- package/dist/src/lib/supabase-json-ordered-write.js +186 -0
- package/dist/src/lib/supabase-json-ordered-write.js.map +1 -0
- package/dist/src/lib/supabase-rest.js +138 -0
- package/dist/src/lib/supabase-rest.js.map +1 -0
- package/dist/src/lib/supabase-session.js +424 -0
- package/dist/src/lib/supabase-session.js.map +1 -0
- package/dist/src/lib/tidas-sdk-package-validator.js +493 -0
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -0
- package/dist/src/lib/unstructured.js +203 -0
- package/dist/src/lib/unstructured.js.map +1 -0
- package/dist/src/lib/user-api-key.js +75 -0
- package/dist/src/lib/user-api-key.js.map +1 -0
- package/dist/src/lib/validation.js +191 -0
- package/dist/src/lib/validation.js.map +1 -0
- package/dist/src/main.js +38 -0
- package/dist/src/main.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-auto-build.js","sourceRoot":"","sources":["../../../src/lib/process-auto-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFileSync, existsSync, mkdirSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { readJsonInput } from './io.js';\nimport {\n buildRunManifest,\n buildUtcTimestamp,\n ensureRunLayout,\n type RunLayout,\n sanitizeRunToken,\n writeLatestRunId,\n} from './run.js';\nimport { withStateFileLock } from './state-lock.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type ProcessAutoBuildOperation = 'produce' | 'treat';\nexport type ProcessAutoBuildSourceInputType = 'local_file' | 'local_text';\n\nexport type ProcessAutoBuildSourcePolicy = {\n step1_route: {\n preferred: string[];\n fallback: string;\n };\n step2_process_split: {\n preferred: string[];\n fallback: string;\n };\n step3b_exchange_values: {\n preferred: string[];\n require_numeric_evidence: boolean;\n allow_estimation: boolean;\n };\n};\n\nexport type ProcessAutoBuildFlowSummary = {\n wrapper: 'flowDataSet' | 'direct';\n uuid: string | null;\n version: string | null;\n base_name: string | null;\n permanent_uri: string | null;\n};\n\nexport type NormalizedProcessAutoBuildSourceInput = {\n source_id: string;\n type: ProcessAutoBuildSourceInputType;\n source_path: string;\n artifact_path: string;\n artifact_file_name: string;\n intended_roles: string[];\n};\n\nexport type NormalizedProcessAutoBuildRequest = {\n schema_version: 1;\n request_path: string;\n request_id: string;\n flow_file: string;\n flow_summary: ProcessAutoBuildFlowSummary;\n flow_dataset: JsonRecord;\n operation: ProcessAutoBuildOperation;\n run_id: string;\n run_root: string;\n source_inputs: NormalizedProcessAutoBuildSourceInput[];\n source_policy: ProcessAutoBuildSourcePolicy;\n};\n\nexport type ProcessAutoBuildLayout = RunLayout & {\n requestDir: string;\n evidenceDir: string;\n evidenceIncomingDir: string;\n evidenceNormalizedDir: string;\n evidenceTextDir: string;\n evidenceStructuredDir: string;\n stageOutputsDir: string;\n reviewsDir: string;\n requestSnapshotPath: string;\n normalizedRequestPath: string;\n sourcePolicyPath: string;\n flowSummaryPath: string;\n inputManifestPath: string;\n assemblyPlanPath: string;\n lineageManifestPath: string;\n invocationIndexPath: string;\n runManifestPath: string;\n reportPath: string;\n statePath: string;\n handoffSummaryPath: string;\n processExportsDir: string;\n sourceExportsDir: string;\n};\n\nexport type ProcessAutoBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'prepared_local_process_auto_build_run';\n request_path: string;\n request_id: string;\n run_id: string;\n run_root: string;\n operation: ProcessAutoBuildOperation;\n flow: {\n source_path: string;\n artifact_path: string;\n wrapper: 'flowDataSet' | 'direct';\n uuid: string | null;\n version: string | null;\n base_name: string | null;\n };\n source_input_count: number;\n stage_count: number;\n files: {\n request_snapshot: string;\n normalized_request: string;\n source_policy: string;\n flow_summary: string;\n input_manifest: string;\n assembly_plan: string;\n lineage_manifest: string;\n invocation_index: string;\n run_manifest: string;\n state: string;\n handoff_summary: string;\n report: string;\n };\n next_actions: string[];\n};\n\nexport type RunProcessAutoBuildOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n cwd?: string;\n inputValue?: unknown;\n requestIdOverride?: string;\n runIdOverride?: string;\n};\n\ntype ProcessAutoBuildStage = {\n id: string;\n title: string;\n output: string;\n createsCandidatesDir: boolean;\n modules: string[];\n};\n\nconst DEFAULT_SOURCE_POLICY: ProcessAutoBuildSourcePolicy = {\n step1_route: {\n preferred: ['user_bundle', 'kb_bundle'],\n fallback: 'expert_judgement',\n },\n step2_process_split: {\n preferred: ['user_bundle.process_split', 'si_bundle', 'kb_bundle.process_split'],\n fallback: 'expert_judgement',\n },\n step3b_exchange_values: {\n preferred: ['user_bundle.exchange_values', 'si_bundle', 'kb_bundle.exchange_values'],\n require_numeric_evidence: true,\n allow_estimation: true,\n },\n};\n\nconst PROCESS_AUTO_BUILD_STAGES: ProcessAutoBuildStage[] = [\n {\n id: '01_route',\n title: 'Route planning',\n output: 'stage_outputs/01_route/route_plan.json',\n createsCandidatesDir: true,\n modules: ['kb-search', 'llm'],\n },\n {\n id: '02_process_split',\n title: 'Process chain split',\n output: 'stage_outputs/02_process_split/process_chain.json',\n createsCandidatesDir: true,\n modules: ['llm'],\n },\n {\n id: '03_exchange_plan',\n title: 'Exchange planning',\n output: 'stage_outputs/03_exchange_plan/exchange_plan.json',\n createsCandidatesDir: false,\n modules: ['llm'],\n },\n {\n id: '04_exchange_values',\n title: 'Exchange value extraction',\n output: 'stage_outputs/04_exchange_values/exchange_values.json',\n createsCandidatesDir: true,\n modules: ['unstructured', 'kb-search', 'llm'],\n },\n {\n id: '05_chain_review',\n title: 'Chain review',\n output: 'stage_outputs/05_chain_review/chain_review.json',\n createsCandidatesDir: false,\n modules: ['llm'],\n },\n {\n id: '06_flow_match',\n title: 'Flow matching',\n output: 'stage_outputs/06_flow_match/flow_match_bundle.json',\n createsCandidatesDir: false,\n modules: ['search:flow', 'llm'],\n },\n {\n id: '07_source_build',\n title: 'Source dataset build',\n output: 'stage_outputs/07_source_build/source_bundle.json',\n createsCandidatesDir: false,\n modules: ['validation'],\n },\n {\n id: '08_process_build',\n title: 'Process dataset build',\n output: 'stage_outputs/08_process_build/process_bundle.json',\n createsCandidatesDir: false,\n modules: ['validation', 'llm'],\n },\n {\n id: '09_qa',\n title: 'QA and balance review',\n output: 'stage_outputs/09_qa/qa_bundle.json',\n createsCandidatesDir: false,\n modules: ['validation', 'llm'],\n },\n {\n id: '10_publish',\n title: 'Publish handoff',\n output: 'stage_outputs/10_publish/publish_bundle.json',\n createsCandidatesDir: false,\n modules: ['publish'],\n },\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 extractText(value: unknown): string | null {\n const direct = nonEmptyString(value);\n if (direct) {\n return direct;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const extracted = extractText(item);\n if (extracted) {\n return extracted;\n }\n }\n return null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n if ('#text' in value) {\n return nonEmptyString(value['#text']);\n }\n\n return null;\n}\n\nfunction requiredRequestObject(input: unknown): JsonRecord {\n if (!isRecord(input)) {\n throw new CliError('process auto-build request must be a JSON object.', {\n code: 'PROCESS_AUTO_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n return input;\n}\n\nfunction requiredRequestString(input: JsonRecord, key: string): string {\n const value = nonEmptyString(input[key]);\n if (!value) {\n throw new CliError(`process auto-build request is missing '${key}'.`, {\n code: 'PROCESS_AUTO_BUILD_REQUEST_INVALID',\n exitCode: 2,\n details: { key },\n });\n }\n\n return value;\n}\n\nfunction normalizeOperation(value: unknown): ProcessAutoBuildOperation {\n const normalized = nonEmptyString(value);\n if (!normalized) {\n return 'produce';\n }\n if (normalized === 'produce' || normalized === 'treat') {\n return normalized;\n }\n\n throw new CliError(\"process auto-build operation must be 'produce' or 'treat'.\", {\n code: 'PROCESS_AUTO_BUILD_OPERATION_INVALID',\n exitCode: 2,\n details: normalized,\n });\n}\n\nfunction normalizePreferredList(value: unknown, fallback: string[]): string[] {\n if (!Array.isArray(value)) {\n return [...fallback];\n }\n\n const normalized = value\n .map((entry) => nonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n\n return normalized.length ? normalized : [...fallback];\n}\n\nfunction normalizeBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === 'boolean' ? value : fallback;\n}\n\nfunction buildDefaultSourcePolicy(): ProcessAutoBuildSourcePolicy {\n return {\n step1_route: {\n preferred: [...DEFAULT_SOURCE_POLICY.step1_route.preferred],\n fallback: DEFAULT_SOURCE_POLICY.step1_route.fallback,\n },\n step2_process_split: {\n preferred: [...DEFAULT_SOURCE_POLICY.step2_process_split.preferred],\n fallback: DEFAULT_SOURCE_POLICY.step2_process_split.fallback,\n },\n step3b_exchange_values: {\n preferred: [...DEFAULT_SOURCE_POLICY.step3b_exchange_values.preferred],\n require_numeric_evidence:\n DEFAULT_SOURCE_POLICY.step3b_exchange_values.require_numeric_evidence,\n allow_estimation: DEFAULT_SOURCE_POLICY.step3b_exchange_values.allow_estimation,\n },\n };\n}\n\nfunction normalizeSourcePolicy(value: unknown): ProcessAutoBuildSourcePolicy {\n if (!isRecord(value)) {\n return buildDefaultSourcePolicy();\n }\n\n const defaults = buildDefaultSourcePolicy();\n const step1Route = isRecord(value.step1_route) ? value.step1_route : {};\n const step2ProcessSplit = isRecord(value.step2_process_split) ? value.step2_process_split : {};\n const step3ExchangeValues = isRecord(value.step3b_exchange_values)\n ? value.step3b_exchange_values\n : {};\n\n return {\n step1_route: {\n preferred: normalizePreferredList(step1Route.preferred, defaults.step1_route.preferred),\n fallback: nonEmptyString(step1Route.fallback) ?? DEFAULT_SOURCE_POLICY.step1_route.fallback,\n },\n step2_process_split: {\n preferred: normalizePreferredList(\n step2ProcessSplit.preferred,\n defaults.step2_process_split.preferred,\n ),\n fallback:\n nonEmptyString(step2ProcessSplit.fallback) ??\n DEFAULT_SOURCE_POLICY.step2_process_split.fallback,\n },\n step3b_exchange_values: {\n preferred: normalizePreferredList(\n step3ExchangeValues.preferred,\n defaults.step3b_exchange_values.preferred,\n ),\n require_numeric_evidence: normalizeBoolean(\n step3ExchangeValues.require_numeric_evidence,\n DEFAULT_SOURCE_POLICY.step3b_exchange_values.require_numeric_evidence,\n ),\n allow_estimation: normalizeBoolean(\n step3ExchangeValues.allow_estimation,\n DEFAULT_SOURCE_POLICY.step3b_exchange_values.allow_estimation,\n ),\n },\n };\n}\n\nfunction extractFlowDatasetRoot(payload: unknown): {\n flowPayload: JsonRecord;\n flowDataset: JsonRecord;\n wrapper: 'flowDataSet' | 'direct';\n} {\n if (!isRecord(payload)) {\n throw new CliError('process auto-build flow file must contain a JSON object.', {\n code: 'PROCESS_AUTO_BUILD_FLOW_INVALID',\n exitCode: 2,\n });\n }\n\n if (isRecord(payload.flowDataSet)) {\n return {\n flowPayload: payload,\n flowDataset: payload.flowDataSet,\n wrapper: 'flowDataSet',\n };\n }\n\n return {\n flowPayload: payload,\n flowDataset: payload,\n wrapper: 'direct',\n };\n}\n\nfunction extractFlowSummary(\n flowDataset: JsonRecord,\n wrapper: 'flowDataSet' | 'direct',\n): ProcessAutoBuildFlowSummary {\n const flowInformation = isRecord(flowDataset.flowInformation) ? flowDataset.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(flowDataset.administrativeInformation)\n ? flowDataset.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n\n return {\n wrapper,\n uuid:\n nonEmptyString(dataSetInformation['common:UUID']) ??\n nonEmptyString(flowDataset['@id']) ??\n null,\n version:\n nonEmptyString(publicationAndOwnership['common:dataSetVersion']) ??\n nonEmptyString(flowDataset['@version']) ??\n null,\n base_name: extractText(name.baseName),\n permanent_uri: nonEmptyString(publicationAndOwnership['common:permanentDataSetURI']) ?? null,\n };\n}\n\nfunction runIdToken(value: string | null | undefined, fallback: string): string {\n return sanitizeRunToken(value ?? '', fallback);\n}\n\nfunction buildProcessAutoBuildRunId(\n flowFilePath: string,\n operation: ProcessAutoBuildOperation,\n summary: ProcessAutoBuildFlowSummary,\n now: Date = new Date(),\n): string {\n const stem = path.basename(flowFilePath, path.extname(flowFilePath));\n const parts = stem.split('_');\n const flowCode = runIdToken(parts[0] || summary.base_name || summary.uuid, 'flow');\n const flowUuidShort = runIdToken(parts[1] || summary.uuid, 'unknown').slice(0, 8);\n const operationToken = operation === 'treat' ? 'treat' : 'produce';\n\n return `pfw_${flowCode}_${flowUuidShort}_${operationToken}_${buildUtcTimestamp(now)}`;\n}\n\nfunction resolveRunRoot(\n requestDir: string,\n runId: string,\n outDirOverride: string | null | undefined,\n requestRunRoot: unknown,\n): string {\n const override = nonEmptyString(outDirOverride);\n if (override) {\n return path.resolve(requestDir, override);\n }\n\n const requestValue = nonEmptyString(requestRunRoot);\n if (requestValue) {\n return path.resolve(requestDir, requestValue);\n }\n\n return path.join(requestDir, 'artifacts', 'process_from_flow', runId);\n}\n\nfunction normalizeSourceInputType(value: unknown): ProcessAutoBuildSourceInputType {\n const normalized = nonEmptyString(value);\n if (normalized === 'local_file' || normalized === 'local_text') {\n return normalized;\n }\n\n throw new CliError(\n \"process auto-build source_inputs[].type must be 'local_file' or 'local_text'.\",\n {\n code: 'PROCESS_AUTO_BUILD_SOURCE_INVALID',\n exitCode: 2,\n details: { value },\n },\n );\n}\n\nfunction normalizeIntendedRoles(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((entry) => nonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction normalizeSourceInputs(\n value: unknown,\n requestDir: string,\n evidenceIncomingDir: string,\n): NormalizedProcessAutoBuildSourceInput[] {\n if (value === undefined) {\n return [];\n }\n\n if (!Array.isArray(value)) {\n throw new CliError('process auto-build source_inputs must be an array when provided.', {\n code: 'PROCESS_AUTO_BUILD_SOURCE_INVALID',\n exitCode: 2,\n });\n }\n\n const seenIds = new Set<string>();\n\n return value.map((entry, index) => {\n if (!isRecord(entry)) {\n throw new CliError('process auto-build source_inputs entries must be objects.', {\n code: 'PROCESS_AUTO_BUILD_SOURCE_INVALID',\n exitCode: 2,\n details: { index },\n });\n }\n\n const sourceId = requiredRequestString(entry, 'source_id');\n if (seenIds.has(sourceId)) {\n throw new CliError(`Duplicate process auto-build source_id: ${sourceId}`, {\n code: 'PROCESS_AUTO_BUILD_SOURCE_DUPLICATE',\n exitCode: 2,\n });\n }\n seenIds.add(sourceId);\n\n const sourcePath = path.resolve(requestDir, requiredRequestString(entry, 'path'));\n if (!existsSync(sourcePath)) {\n throw new CliError(`process auto-build source input not found: ${sourcePath}`, {\n code: 'PROCESS_AUTO_BUILD_SOURCE_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const extension = path.extname(sourcePath);\n const artifactFileName = `${String(index + 1).padStart(2, '0')}_${runIdToken(sourceId, 'source')}${extension}`;\n\n return {\n source_id: sourceId,\n type: normalizeSourceInputType(entry.type),\n source_path: sourcePath,\n artifact_file_name: artifactFileName,\n artifact_path: path.join(evidenceIncomingDir, artifactFileName),\n intended_roles: normalizeIntendedRoles(entry.intended_roles),\n };\n });\n}\n\nfunction buildLayout(runRoot: string, runId: string): ProcessAutoBuildLayout {\n const collectionDir = path.dirname(runRoot);\n const layout: RunLayout = {\n namespace: 'process_from_flow',\n runId,\n artifactsRoot: path.dirname(collectionDir),\n collectionDir,\n runRoot,\n cacheDir: path.join(runRoot, 'cache'),\n inputsDir: path.join(runRoot, 'input'),\n outputsDir: path.join(runRoot, 'exports'),\n reportsDir: path.join(runRoot, 'reports'),\n logsDir: path.join(runRoot, 'logs'),\n manifestsDir: path.join(runRoot, 'manifests'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n };\n\n return {\n ...layout,\n requestDir: path.join(runRoot, 'request'),\n evidenceDir: path.join(runRoot, 'evidence'),\n evidenceIncomingDir: path.join(runRoot, 'evidence', 'incoming'),\n evidenceNormalizedDir: path.join(runRoot, 'evidence', 'normalized'),\n evidenceTextDir: path.join(runRoot, 'evidence', 'text'),\n evidenceStructuredDir: path.join(runRoot, 'evidence', 'structured'),\n stageOutputsDir: path.join(runRoot, 'stage_outputs'),\n reviewsDir: path.join(runRoot, 'reviews'),\n requestSnapshotPath: path.join(runRoot, 'request', 'pff-request.json'),\n normalizedRequestPath: path.join(runRoot, 'request', 'request.normalized.json'),\n sourcePolicyPath: path.join(runRoot, 'request', 'source-policy.json'),\n flowSummaryPath: path.join(runRoot, 'manifests', 'flow-summary.json'),\n inputManifestPath: path.join(runRoot, 'input', 'input_manifest.json'),\n assemblyPlanPath: path.join(runRoot, 'manifests', 'assembly-plan.json'),\n lineageManifestPath: path.join(runRoot, 'manifests', 'lineage-manifest.json'),\n invocationIndexPath: path.join(runRoot, 'manifests', 'invocation-index.json'),\n runManifestPath: path.join(runRoot, 'manifests', 'run-manifest.json'),\n reportPath: path.join(runRoot, 'reports', 'process-auto-build-report.json'),\n statePath: path.join(runRoot, 'cache', 'process_from_flow_state.json'),\n handoffSummaryPath: path.join(runRoot, 'cache', 'agent_handoff_summary.json'),\n processExportsDir: path.join(runRoot, 'exports', 'processes'),\n sourceExportsDir: path.join(runRoot, 'exports', 'sources'),\n };\n}\n\nfunction ensureEmptyRunRoot(runRoot: string): void {\n if (!existsSync(runRoot)) {\n return;\n }\n\n const entries = readdirSync(runRoot);\n if (entries.length > 0) {\n throw new CliError(`process auto-build run root already exists and is not empty: ${runRoot}`, {\n code: 'PROCESS_AUTO_BUILD_RUN_EXISTS',\n exitCode: 2,\n });\n }\n}\n\nfunction ensureProcessAutoBuildLayout(layout: ProcessAutoBuildLayout): void {\n ensureRunLayout(layout);\n [\n layout.requestDir,\n layout.evidenceDir,\n layout.evidenceIncomingDir,\n layout.evidenceNormalizedDir,\n layout.evidenceTextDir,\n layout.evidenceStructuredDir,\n layout.stageOutputsDir,\n layout.reviewsDir,\n layout.processExportsDir,\n layout.sourceExportsDir,\n ].forEach((dirPath) => {\n mkdirSync(dirPath, { recursive: true });\n });\n\n for (const stage of PROCESS_AUTO_BUILD_STAGES) {\n const stageDir = path.join(layout.stageOutputsDir, stage.id);\n mkdirSync(stageDir, { recursive: true });\n if (stage.createsCandidatesDir) {\n mkdirSync(path.join(stageDir, 'candidates'), { recursive: true });\n }\n }\n}\n\nfunction copyArtifactFile(sourcePath: string, targetPath: string, code: string): void {\n mkdirSync(path.dirname(targetPath), { recursive: true });\n try {\n copyFileSync(sourcePath, targetPath);\n } catch (error) {\n throw new CliError(`Failed to copy artifact file: ${sourcePath}`, {\n code,\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nfunction buildAssemblyPlan(runRoot: string): JsonRecord {\n return {\n schema_version: 1,\n stages: PROCESS_AUTO_BUILD_STAGES.map((stage) => ({\n id: stage.id,\n title: stage.title,\n status: 'pending',\n modules: stage.modules,\n output: stage.output,\n candidates_dir: stage.createsCandidatesDir\n ? path.posix.join(path.posix.dirname(stage.output), 'candidates')\n : null,\n output_abs: path.join(runRoot, stage.output),\n })),\n };\n}\n\nfunction buildLineageManifest(normalized: NormalizedProcessAutoBuildRequest): JsonRecord {\n return {\n schema_version: 1,\n request_id: normalized.request_id,\n run_id: normalized.run_id,\n flow: {\n source_path: normalized.flow_file,\n uuid: normalized.flow_summary.uuid,\n version: normalized.flow_summary.version,\n base_name: normalized.flow_summary.base_name,\n },\n source_inputs: normalized.source_inputs.map((source) => ({\n source_id: source.source_id,\n type: source.type,\n source_path: source.source_path,\n artifact_path: source.artifact_path,\n intended_roles: source.intended_roles,\n })),\n };\n}\n\nfunction buildInvocationIndex(\n normalized: NormalizedProcessAutoBuildRequest,\n options: RunProcessAutoBuildOptions,\n reportPath: string,\n now: Date,\n): JsonRecord {\n const command = ['process', 'auto-build', '--input', options.inputPath];\n if (options.outDir) {\n command.push('--out-dir', options.outDir);\n }\n\n return {\n schema_version: 1,\n invocations: [\n {\n command,\n cwd: options.cwd ?? process.cwd(),\n created_at: now.toISOString(),\n request_path: normalized.request_path,\n report_path: reportPath,\n },\n ],\n };\n}\n\nfunction buildStepMarkers(now: Date): JsonRecord {\n const completedAt = now.toISOString();\n const markers: JsonRecord = {\n intake_prepared: {\n status: 'completed',\n completed_at: completedAt,\n },\n };\n\n PROCESS_AUTO_BUILD_STAGES.forEach((stage) => {\n markers[stage.id] = {\n status: 'pending',\n };\n });\n\n return markers;\n}\n\nfunction buildInitialState(\n normalized: NormalizedProcessAutoBuildRequest,\n flowArtifactPath: string,\n now: Date,\n): JsonRecord {\n return {\n schema_version: 1,\n build_status: 'intake_prepared',\n next_stage: PROCESS_AUTO_BUILD_STAGES[0]?.id ?? null,\n run_id: normalized.run_id,\n request_id: normalized.request_id,\n flow_path: normalized.flow_file,\n flow_artifact_path: flowArtifactPath,\n flow_dataset: normalized.flow_dataset,\n flow_summary: normalized.flow_summary,\n operation: normalized.operation,\n source_inputs: normalized.source_inputs,\n source_policy: normalized.source_policy,\n scientific_references: {\n source_inputs: normalized.source_inputs.map((source) => ({\n source_id: source.source_id,\n type: source.type,\n intended_roles: source.intended_roles,\n source_path: source.source_path,\n })),\n },\n processes: [],\n process_exchanges: [],\n matched_process_exchanges: [],\n process_datasets: [],\n source_datasets: [],\n coverage_metrics: {},\n coverage_history: [],\n step_markers: buildStepMarkers(now),\n };\n}\n\nfunction buildNextActions(\n layout: ProcessAutoBuildLayout,\n normalized: NormalizedProcessAutoBuildRequest,\n): string[] {\n return [\n `inspect: ${layout.normalizedRequestPath}`,\n `inspect: ${layout.statePath}`,\n `inspect: ${layout.assemblyPlanPath}`,\n `future: tiangong process resume-build --run-id ${normalized.run_id}`,\n `future: tiangong process publish-build --run-id ${normalized.run_id}`,\n ];\n}\n\nfunction buildAgentHandoffSummary(\n normalized: NormalizedProcessAutoBuildRequest,\n layout: ProcessAutoBuildLayout,\n flowArtifactPath: string,\n now: Date,\n): JsonRecord {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n run_id: normalized.run_id,\n command: 'process auto-build',\n flow_path: normalized.flow_file,\n operation: normalized.operation,\n stop_after: null,\n process_count: 0,\n matched_exchange_count: 0,\n process_dataset_count: 0,\n source_dataset_count: 0,\n remaining_placeholder_refs: 0,\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 request_snapshot: layout.requestSnapshotPath,\n normalized_request: layout.normalizedRequestPath,\n assembly_plan: layout.assemblyPlanPath,\n flow_copy: flowArtifactPath,\n },\n next_actions: buildNextActions(layout, normalized),\n extra: {\n status: 'prepared_local_process_auto_build_run',\n request_id: normalized.request_id,\n source_input_count: normalized.source_inputs.length,\n },\n };\n}\n\nfunction buildReport(\n normalized: NormalizedProcessAutoBuildRequest,\n layout: ProcessAutoBuildLayout,\n flowArtifactPath: string,\n now: Date,\n): ProcessAutoBuildReport {\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: 'prepared_local_process_auto_build_run',\n request_path: normalized.request_path,\n request_id: normalized.request_id,\n run_id: normalized.run_id,\n run_root: normalized.run_root,\n operation: normalized.operation,\n flow: {\n source_path: normalized.flow_file,\n artifact_path: flowArtifactPath,\n wrapper: normalized.flow_summary.wrapper,\n uuid: normalized.flow_summary.uuid,\n version: normalized.flow_summary.version,\n base_name: normalized.flow_summary.base_name,\n },\n source_input_count: normalized.source_inputs.length,\n stage_count: PROCESS_AUTO_BUILD_STAGES.length,\n files: {\n request_snapshot: layout.requestSnapshotPath,\n normalized_request: layout.normalizedRequestPath,\n source_policy: layout.sourcePolicyPath,\n flow_summary: layout.flowSummaryPath,\n input_manifest: layout.inputManifestPath,\n assembly_plan: layout.assemblyPlanPath,\n lineage_manifest: layout.lineageManifestPath,\n invocation_index: layout.invocationIndexPath,\n run_manifest: layout.runManifestPath,\n state: layout.statePath,\n handoff_summary: layout.handoffSummaryPath,\n report: layout.reportPath,\n },\n next_actions: buildNextActions(layout, normalized),\n };\n}\n\nexport function normalizeProcessAutoBuildRequest(\n input: unknown,\n options: {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n requestIdOverride?: string;\n runIdOverride?: string;\n },\n): NormalizedProcessAutoBuildRequest {\n const request = requiredRequestObject(input);\n const requestDir = path.dirname(path.resolve(options.inputPath));\n const operation = normalizeOperation(request.operation);\n const flowFile = path.resolve(requestDir, requiredRequestString(request, 'flow_file'));\n const flowPayload = readJsonInput(flowFile);\n const { flowDataset, wrapper } = extractFlowDatasetRoot(flowPayload);\n const flowSummary = extractFlowSummary(flowDataset, wrapper);\n const runId =\n nonEmptyString(options.runIdOverride) ??\n nonEmptyString(request.run_id) ??\n buildProcessAutoBuildRunId(flowFile, operation, flowSummary, options.now);\n const runRoot = resolveRunRoot(requestDir, runId, options.outDir, request.workspace_run_root);\n const layout = buildLayout(runRoot, runId);\n\n return {\n schema_version: 1,\n request_path: path.resolve(options.inputPath),\n request_id:\n nonEmptyString(options.requestIdOverride) ??\n nonEmptyString(request.request_id) ??\n `pff-${runId}`,\n flow_file: flowFile,\n flow_summary: flowSummary,\n flow_dataset: flowDataset,\n operation,\n run_id: runId,\n run_root: runRoot,\n source_inputs: normalizeSourceInputs(\n request.source_inputs,\n requestDir,\n layout.evidenceIncomingDir,\n ),\n source_policy: normalizeSourcePolicy(request.source_policy),\n };\n}\n\nexport async function runProcessAutoBuild(\n options: RunProcessAutoBuildOptions,\n): Promise<ProcessAutoBuildReport> {\n const input = options.inputValue ?? readJsonInput(options.inputPath);\n const now = options.now ?? new Date();\n const normalized = normalizeProcessAutoBuildRequest(input, {\n inputPath: options.inputPath,\n outDir: options.outDir,\n now,\n requestIdOverride: options.requestIdOverride,\n runIdOverride: options.runIdOverride,\n });\n const layout = buildLayout(normalized.run_root, normalized.run_id);\n const flowArtifactPath = path.join(layout.inputsDir, path.basename(normalized.flow_file));\n\n ensureEmptyRunRoot(layout.runRoot);\n ensureProcessAutoBuildLayout(layout);\n\n copyArtifactFile(normalized.flow_file, flowArtifactPath, 'PROCESS_AUTO_BUILD_FLOW_COPY_FAILED');\n normalized.source_inputs.forEach((source) => {\n copyArtifactFile(\n source.source_path,\n source.artifact_path,\n 'PROCESS_AUTO_BUILD_SOURCE_COPY_FAILED',\n );\n });\n\n const request = requiredRequestObject(input);\n writeJsonArtifact(layout.requestSnapshotPath, request);\n writeJsonArtifact(layout.normalizedRequestPath, normalized);\n writeJsonArtifact(layout.sourcePolicyPath, normalized.source_policy);\n writeJsonArtifact(layout.flowSummaryPath, normalized.flow_summary);\n writeJsonArtifact(layout.inputManifestPath, {\n run_id: normalized.run_id,\n flow_path: normalized.flow_file,\n flow_artifact_path: flowArtifactPath,\n operation: normalized.operation,\n });\n writeJsonArtifact(layout.assemblyPlanPath, buildAssemblyPlan(layout.runRoot));\n writeJsonArtifact(layout.lineageManifestPath, buildLineageManifest(normalized));\n writeJsonArtifact(\n layout.invocationIndexPath,\n buildInvocationIndex(normalized, options, layout.reportPath, now),\n );\n writeJsonArtifact(\n layout.runManifestPath,\n buildRunManifest({\n layout,\n command: options.outDir\n ? ['process', 'auto-build', '--input', options.inputPath, '--out-dir', options.outDir]\n : ['process', 'auto-build', '--input', options.inputPath],\n cwd: options.cwd,\n createdAt: now,\n }),\n );\n\n const state = buildInitialState(normalized, flowArtifactPath, now);\n await withStateFileLock(\n layout.statePath,\n { reason: 'process-auto-build.initial_state', now },\n () => writeJsonArtifact(layout.statePath, state),\n );\n\n const handoff = buildAgentHandoffSummary(normalized, layout, flowArtifactPath, now);\n writeJsonArtifact(layout.handoffSummaryPath, handoff);\n writeLatestRunId(layout, normalized.run_id);\n\n const report = buildReport(normalized, layout, flowArtifactPath, now);\n writeJsonArtifact(layout.reportPath, report);\n return report;\n}\n\n// Exposed for deterministic unit coverage of process auto-build normalization and scaffold helpers.\nexport const __testInternals = {\n PROCESS_AUTO_BUILD_STAGES,\n extractText,\n normalizeOperation,\n normalizeSourcePolicy,\n extractFlowDatasetRoot,\n extractFlowSummary,\n buildProcessAutoBuildRunId,\n buildLayout,\n buildAssemblyPlan,\n buildLineageManifest,\n buildInvocationIndex,\n buildInitialState,\n buildAgentHandoffSummary,\n buildReport,\n};\n"]}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readJsonInput } from './io.js';
|
|
4
|
+
import { writeJsonArtifact } from './artifacts.js';
|
|
5
|
+
import { CliError, toErrorPayload } from './errors.js';
|
|
6
|
+
import { normalizeProcessAutoBuildRequest, runProcessAutoBuild, } from './process-auto-build.js';
|
|
7
|
+
import { buildRunId, buildRunManifest, ensureRunLayout, sanitizeRunToken, writeLatestRunId, } from './run.js';
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
10
|
+
}
|
|
11
|
+
function nonEmptyString(value) {
|
|
12
|
+
if (typeof value !== 'string') {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const normalized = value.trim();
|
|
16
|
+
return normalized || null;
|
|
17
|
+
}
|
|
18
|
+
function normalizeBoolean(value, fallback) {
|
|
19
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
20
|
+
}
|
|
21
|
+
function requiredRequestObject(input) {
|
|
22
|
+
if (!isRecord(input)) {
|
|
23
|
+
throw new CliError('process batch-build request must be a JSON object.', {
|
|
24
|
+
code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',
|
|
25
|
+
exitCode: 2,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return input;
|
|
29
|
+
}
|
|
30
|
+
function resolveBatchRoot(manifestDir, batchId, outDirOverride, requestOutDir) {
|
|
31
|
+
const override = nonEmptyString(outDirOverride);
|
|
32
|
+
if (override) {
|
|
33
|
+
return path.resolve(manifestDir, override);
|
|
34
|
+
}
|
|
35
|
+
const requestValue = nonEmptyString(requestOutDir);
|
|
36
|
+
if (requestValue) {
|
|
37
|
+
return path.resolve(manifestDir, requestValue);
|
|
38
|
+
}
|
|
39
|
+
return path.join(manifestDir, 'artifacts', 'process_batch', batchId);
|
|
40
|
+
}
|
|
41
|
+
function buildLayout(batchRoot, batchId) {
|
|
42
|
+
const collectionDir = path.dirname(batchRoot);
|
|
43
|
+
const layout = {
|
|
44
|
+
namespace: 'process_batch',
|
|
45
|
+
runId: batchId,
|
|
46
|
+
artifactsRoot: path.dirname(collectionDir),
|
|
47
|
+
collectionDir,
|
|
48
|
+
runRoot: batchRoot,
|
|
49
|
+
cacheDir: path.join(batchRoot, 'cache'),
|
|
50
|
+
inputsDir: path.join(batchRoot, 'request'),
|
|
51
|
+
outputsDir: path.join(batchRoot, 'runs'),
|
|
52
|
+
reportsDir: path.join(batchRoot, 'reports'),
|
|
53
|
+
logsDir: path.join(batchRoot, 'logs'),
|
|
54
|
+
manifestsDir: path.join(batchRoot, 'manifests'),
|
|
55
|
+
latestRunIdPath: path.join(collectionDir, '.latest_run_id'),
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
...layout,
|
|
59
|
+
requestDir: path.join(batchRoot, 'request'),
|
|
60
|
+
runsDir: path.join(batchRoot, 'runs'),
|
|
61
|
+
requestSnapshotPath: path.join(batchRoot, 'request', 'batch-request.json'),
|
|
62
|
+
normalizedRequestPath: path.join(batchRoot, 'request', 'request.normalized.json'),
|
|
63
|
+
invocationIndexPath: path.join(batchRoot, 'manifests', 'invocation-index.json'),
|
|
64
|
+
runManifestPath: path.join(batchRoot, 'manifests', 'run-manifest.json'),
|
|
65
|
+
reportPath: path.join(batchRoot, 'reports', 'process-batch-build-report.json'),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function ensureEmptyRunRoot(runRoot) {
|
|
69
|
+
if (!existsSync(runRoot)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const entries = readdirSync(runRoot);
|
|
73
|
+
if (entries.length > 0) {
|
|
74
|
+
throw new CliError(`process batch-build run root already exists and is not empty: ${runRoot}`, {
|
|
75
|
+
code: 'PROCESS_BATCH_BUILD_RUN_EXISTS',
|
|
76
|
+
exitCode: 2,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function ensureProcessBatchBuildLayout(layout) {
|
|
81
|
+
ensureRunLayout(layout);
|
|
82
|
+
[layout.requestDir, layout.runsDir].forEach((dirPath) => {
|
|
83
|
+
mkdirSync(dirPath, { recursive: true });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function normalizeBatchId(inputPath, request, now) {
|
|
87
|
+
const explicit = nonEmptyString(request.batch_id);
|
|
88
|
+
if (explicit) {
|
|
89
|
+
return explicit;
|
|
90
|
+
}
|
|
91
|
+
return buildRunId({
|
|
92
|
+
namespace: 'process_batch',
|
|
93
|
+
subject: path.basename(inputPath, path.extname(inputPath)),
|
|
94
|
+
operation: 'build',
|
|
95
|
+
now,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function normalizeItemId(request, inputPath, index, seenIds) {
|
|
99
|
+
const explicit = nonEmptyString(request.item_id);
|
|
100
|
+
const baseId = sanitizeRunToken(explicit ?? path.basename(inputPath, path.extname(inputPath)), `item_${index + 1}`);
|
|
101
|
+
if (explicit) {
|
|
102
|
+
if (seenIds.has(baseId)) {
|
|
103
|
+
throw new CliError(`Duplicate process batch-build item_id: ${baseId}`, {
|
|
104
|
+
code: 'PROCESS_BATCH_BUILD_ITEM_DUPLICATE',
|
|
105
|
+
exitCode: 2,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
seenIds.add(baseId);
|
|
109
|
+
return baseId;
|
|
110
|
+
}
|
|
111
|
+
if (!seenIds.has(baseId)) {
|
|
112
|
+
seenIds.add(baseId);
|
|
113
|
+
return baseId;
|
|
114
|
+
}
|
|
115
|
+
let suffix = 2;
|
|
116
|
+
while (seenIds.has(`${baseId}_${suffix}`)) {
|
|
117
|
+
suffix += 1;
|
|
118
|
+
}
|
|
119
|
+
const deduped = `${baseId}_${suffix}`;
|
|
120
|
+
seenIds.add(deduped);
|
|
121
|
+
return deduped;
|
|
122
|
+
}
|
|
123
|
+
function normalizeItems(value, manifestDir, batchRoot) {
|
|
124
|
+
if (!Array.isArray(value)) {
|
|
125
|
+
throw new CliError('process batch-build items must be an array.', {
|
|
126
|
+
code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',
|
|
127
|
+
exitCode: 2,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (value.length === 0) {
|
|
131
|
+
throw new CliError('process batch-build items must not be empty.', {
|
|
132
|
+
code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',
|
|
133
|
+
exitCode: 2,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const seenIds = new Set();
|
|
137
|
+
return value.map((entry, index) => {
|
|
138
|
+
const request = typeof entry === 'string' ? { input_path: entry } : entry;
|
|
139
|
+
if (!isRecord(request)) {
|
|
140
|
+
throw new CliError('process batch-build items entries must be strings or objects.', {
|
|
141
|
+
code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',
|
|
142
|
+
exitCode: 2,
|
|
143
|
+
details: { index },
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const inputValue = nonEmptyString(request.input_path);
|
|
147
|
+
if (!inputValue) {
|
|
148
|
+
throw new CliError("process batch-build items[] is missing 'input_path'.", {
|
|
149
|
+
code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',
|
|
150
|
+
exitCode: 2,
|
|
151
|
+
details: { index },
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const inputPath = path.resolve(manifestDir, inputValue);
|
|
155
|
+
const itemId = normalizeItemId(request, inputPath, index, seenIds);
|
|
156
|
+
const explicitOutDir = nonEmptyString(request.out_dir);
|
|
157
|
+
const outDir = explicitOutDir
|
|
158
|
+
? path.resolve(manifestDir, explicitOutDir)
|
|
159
|
+
: path.join(batchRoot, 'runs', `${String(index + 1).padStart(3, '0')}_${itemId}`);
|
|
160
|
+
return {
|
|
161
|
+
item_id: itemId,
|
|
162
|
+
input_path: inputPath,
|
|
163
|
+
out_dir: outDir,
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
export function normalizeProcessBatchBuildRequest(input, options) {
|
|
168
|
+
const request = requiredRequestObject(input);
|
|
169
|
+
const manifestPath = path.resolve(options.inputPath);
|
|
170
|
+
const manifestDir = path.dirname(manifestPath);
|
|
171
|
+
const now = options.now ?? new Date();
|
|
172
|
+
const batchId = normalizeBatchId(manifestPath, request, now);
|
|
173
|
+
const batchRoot = resolveBatchRoot(manifestDir, batchId, options.outDir, request.out_dir);
|
|
174
|
+
return {
|
|
175
|
+
schema_version: 1,
|
|
176
|
+
manifest_path: manifestPath,
|
|
177
|
+
batch_id: batchId,
|
|
178
|
+
batch_root: batchRoot,
|
|
179
|
+
continue_on_error: normalizeBoolean(request.continue_on_error, true),
|
|
180
|
+
items: normalizeItems(request.items, manifestDir, batchRoot),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function buildInvocationIndex(normalized, options, layout, now) {
|
|
184
|
+
const command = ['process', 'batch-build', '--input', options.inputPath];
|
|
185
|
+
if (options.outDir) {
|
|
186
|
+
command.push('--out-dir', options.outDir);
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
schema_version: 1,
|
|
190
|
+
invocations: [
|
|
191
|
+
{
|
|
192
|
+
command,
|
|
193
|
+
cwd: options.cwd ?? process.cwd(),
|
|
194
|
+
created_at: now.toISOString(),
|
|
195
|
+
manifest_path: normalized.manifest_path,
|
|
196
|
+
batch_id: normalized.batch_id,
|
|
197
|
+
report_path: layout.reportPath,
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function buildNextActions(layout) {
|
|
203
|
+
return [
|
|
204
|
+
`inspect: ${layout.normalizedRequestPath}`,
|
|
205
|
+
`inspect: ${layout.reportPath}`,
|
|
206
|
+
`future: consume items[].run_root for downstream resume-build or publish-build steps`,
|
|
207
|
+
];
|
|
208
|
+
}
|
|
209
|
+
function buildPreparedItemResult(item, index, report) {
|
|
210
|
+
return {
|
|
211
|
+
item_id: item.item_id,
|
|
212
|
+
index,
|
|
213
|
+
input_path: item.input_path,
|
|
214
|
+
out_dir: item.out_dir,
|
|
215
|
+
status: 'prepared',
|
|
216
|
+
run_id: report.run_id,
|
|
217
|
+
run_root: report.run_root,
|
|
218
|
+
request_id: report.request_id,
|
|
219
|
+
files: {
|
|
220
|
+
request_snapshot: report.files.request_snapshot,
|
|
221
|
+
report: report.files.report,
|
|
222
|
+
state: report.files.state,
|
|
223
|
+
handoff_summary: report.files.handoff_summary,
|
|
224
|
+
run_manifest: report.files.run_manifest,
|
|
225
|
+
},
|
|
226
|
+
error: null,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function buildFailedItemResult(item, index, error) {
|
|
230
|
+
return {
|
|
231
|
+
item_id: item.item_id,
|
|
232
|
+
index,
|
|
233
|
+
input_path: item.input_path,
|
|
234
|
+
out_dir: item.out_dir,
|
|
235
|
+
status: 'failed',
|
|
236
|
+
run_id: null,
|
|
237
|
+
run_root: null,
|
|
238
|
+
request_id: null,
|
|
239
|
+
files: {
|
|
240
|
+
request_snapshot: null,
|
|
241
|
+
report: null,
|
|
242
|
+
state: null,
|
|
243
|
+
handoff_summary: null,
|
|
244
|
+
run_manifest: null,
|
|
245
|
+
},
|
|
246
|
+
error: toErrorPayload(error).error,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function buildSkippedItemResult(item, index) {
|
|
250
|
+
return {
|
|
251
|
+
item_id: item.item_id,
|
|
252
|
+
index,
|
|
253
|
+
input_path: item.input_path,
|
|
254
|
+
out_dir: item.out_dir,
|
|
255
|
+
status: 'skipped',
|
|
256
|
+
run_id: null,
|
|
257
|
+
run_root: null,
|
|
258
|
+
request_id: null,
|
|
259
|
+
files: {
|
|
260
|
+
request_snapshot: null,
|
|
261
|
+
report: null,
|
|
262
|
+
state: null,
|
|
263
|
+
handoff_summary: null,
|
|
264
|
+
run_manifest: null,
|
|
265
|
+
},
|
|
266
|
+
error: null,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function buildReport(normalized, layout, items, now) {
|
|
270
|
+
const counts = items.reduce((summary, item) => {
|
|
271
|
+
summary.total += 1;
|
|
272
|
+
if (item.status === 'prepared') {
|
|
273
|
+
summary.prepared += 1;
|
|
274
|
+
}
|
|
275
|
+
else if (item.status === 'failed') {
|
|
276
|
+
summary.failed += 1;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
summary.skipped += 1;
|
|
280
|
+
}
|
|
281
|
+
return summary;
|
|
282
|
+
}, {
|
|
283
|
+
total: 0,
|
|
284
|
+
prepared: 0,
|
|
285
|
+
failed: 0,
|
|
286
|
+
skipped: 0,
|
|
287
|
+
});
|
|
288
|
+
return {
|
|
289
|
+
schema_version: 1,
|
|
290
|
+
generated_at_utc: now.toISOString(),
|
|
291
|
+
status: counts.failed > 0 ? 'completed_with_failures' : 'completed',
|
|
292
|
+
manifest_path: normalized.manifest_path,
|
|
293
|
+
batch_id: normalized.batch_id,
|
|
294
|
+
batch_root: normalized.batch_root,
|
|
295
|
+
continue_on_error: normalized.continue_on_error,
|
|
296
|
+
counts,
|
|
297
|
+
files: {
|
|
298
|
+
request_snapshot: layout.requestSnapshotPath,
|
|
299
|
+
normalized_request: layout.normalizedRequestPath,
|
|
300
|
+
invocation_index: layout.invocationIndexPath,
|
|
301
|
+
run_manifest: layout.runManifestPath,
|
|
302
|
+
report: layout.reportPath,
|
|
303
|
+
},
|
|
304
|
+
items,
|
|
305
|
+
next_actions: buildNextActions(layout),
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
function resolveItemOverrides(itemInput, item, index, now) {
|
|
309
|
+
if (!isRecord(itemInput)) {
|
|
310
|
+
return {
|
|
311
|
+
finalRunId: null,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
const explicitRunId = nonEmptyString(itemInput.run_id);
|
|
315
|
+
const explicitRequestId = nonEmptyString(itemInput.request_id);
|
|
316
|
+
if (explicitRunId) {
|
|
317
|
+
return {
|
|
318
|
+
finalRunId: explicitRunId,
|
|
319
|
+
requestIdOverride: explicitRequestId ? undefined : `pff-${explicitRunId}`,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
const preview = normalizeProcessAutoBuildRequest(itemInput, {
|
|
323
|
+
inputPath: item.input_path,
|
|
324
|
+
outDir: item.out_dir,
|
|
325
|
+
now,
|
|
326
|
+
});
|
|
327
|
+
const runIdOverride = `${preview.run_id}_b${String(index + 1).padStart(3, '0')}`;
|
|
328
|
+
return {
|
|
329
|
+
runIdOverride,
|
|
330
|
+
requestIdOverride: explicitRequestId ?? `pff-${runIdOverride}`,
|
|
331
|
+
finalRunId: runIdOverride,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
export async function runProcessBatchBuild(options) {
|
|
335
|
+
const input = readJsonInput(options.inputPath);
|
|
336
|
+
const now = options.now ?? new Date();
|
|
337
|
+
const normalized = normalizeProcessBatchBuildRequest(input, {
|
|
338
|
+
inputPath: options.inputPath,
|
|
339
|
+
outDir: options.outDir,
|
|
340
|
+
now,
|
|
341
|
+
});
|
|
342
|
+
const layout = buildLayout(normalized.batch_root, normalized.batch_id);
|
|
343
|
+
ensureEmptyRunRoot(layout.runRoot);
|
|
344
|
+
ensureProcessBatchBuildLayout(layout);
|
|
345
|
+
writeJsonArtifact(layout.requestSnapshotPath, input);
|
|
346
|
+
writeJsonArtifact(layout.normalizedRequestPath, normalized);
|
|
347
|
+
writeJsonArtifact(layout.invocationIndexPath, buildInvocationIndex(normalized, options, layout, now));
|
|
348
|
+
writeJsonArtifact(layout.runManifestPath, buildRunManifest({
|
|
349
|
+
layout,
|
|
350
|
+
command: options.outDir
|
|
351
|
+
? ['process', 'batch-build', '--input', options.inputPath, '--out-dir', options.outDir]
|
|
352
|
+
: ['process', 'batch-build', '--input', options.inputPath],
|
|
353
|
+
cwd: options.cwd,
|
|
354
|
+
createdAt: now,
|
|
355
|
+
}));
|
|
356
|
+
const seenRunIds = new Set();
|
|
357
|
+
const items = [];
|
|
358
|
+
let stopAfterFailure = false;
|
|
359
|
+
for (const [index, item] of normalized.items.entries()) {
|
|
360
|
+
if (stopAfterFailure) {
|
|
361
|
+
items.push(buildSkippedItemResult(item, index));
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
try {
|
|
365
|
+
const itemInput = readJsonInput(item.input_path);
|
|
366
|
+
const overrides = resolveItemOverrides(itemInput, item, index, now);
|
|
367
|
+
if (overrides.finalRunId && seenRunIds.has(overrides.finalRunId)) {
|
|
368
|
+
throw new CliError(`Duplicate process batch-build run_id: ${overrides.finalRunId}`, {
|
|
369
|
+
code: 'PROCESS_BATCH_BUILD_RUN_ID_DUPLICATE',
|
|
370
|
+
exitCode: 2,
|
|
371
|
+
details: { itemId: item.item_id, index },
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
if (overrides.finalRunId) {
|
|
375
|
+
seenRunIds.add(overrides.finalRunId);
|
|
376
|
+
}
|
|
377
|
+
const report = await runProcessAutoBuild({
|
|
378
|
+
inputPath: item.input_path,
|
|
379
|
+
inputValue: itemInput,
|
|
380
|
+
outDir: item.out_dir,
|
|
381
|
+
now,
|
|
382
|
+
cwd: options.cwd,
|
|
383
|
+
requestIdOverride: overrides.requestIdOverride,
|
|
384
|
+
runIdOverride: overrides.runIdOverride,
|
|
385
|
+
});
|
|
386
|
+
items.push(buildPreparedItemResult(item, index, report));
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
items.push(buildFailedItemResult(item, index, error));
|
|
390
|
+
if (!normalized.continue_on_error) {
|
|
391
|
+
stopAfterFailure = true;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const report = buildReport(normalized, layout, items, now);
|
|
396
|
+
writeJsonArtifact(layout.reportPath, report);
|
|
397
|
+
writeLatestRunId(layout, normalized.batch_id);
|
|
398
|
+
return report;
|
|
399
|
+
}
|
|
400
|
+
export const __testInternals = {
|
|
401
|
+
buildLayout,
|
|
402
|
+
resolveBatchRoot,
|
|
403
|
+
normalizeItems,
|
|
404
|
+
normalizeProcessBatchBuildRequest,
|
|
405
|
+
buildInvocationIndex,
|
|
406
|
+
buildNextActions,
|
|
407
|
+
buildReport,
|
|
408
|
+
};
|
|
409
|
+
//# sourceMappingURL=process-batch-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-batch-build.js","sourceRoot":"","sources":["../../../src/lib/process-batch-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport { readJsonInput } from './io.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError, toErrorPayload, type ErrorPayload } from './errors.js';\nimport {\n normalizeProcessAutoBuildRequest,\n runProcessAutoBuild,\n type ProcessAutoBuildReport,\n} from './process-auto-build.js';\nimport {\n buildRunId,\n buildRunManifest,\n ensureRunLayout,\n sanitizeRunToken,\n writeLatestRunId,\n type RunLayout,\n} from './run.js';\n\ntype JsonRecord = Record<string, unknown>;\n\ntype ProcessBatchBuildStatus = 'completed' | 'completed_with_failures';\ntype ProcessBatchBuildItemStatus = 'prepared' | 'failed' | 'skipped';\n\ntype ProcessBatchBuildManifestItem = {\n item_id: string;\n input_path: string;\n out_dir: string;\n};\n\nexport type ProcessBatchBuildLayout = RunLayout & {\n requestDir: string;\n runsDir: string;\n requestSnapshotPath: string;\n normalizedRequestPath: string;\n invocationIndexPath: string;\n runManifestPath: string;\n reportPath: string;\n};\n\nexport type NormalizedProcessBatchBuildRequest = {\n schema_version: 1;\n manifest_path: string;\n batch_id: string;\n batch_root: string;\n continue_on_error: boolean;\n items: ProcessBatchBuildManifestItem[];\n};\n\nexport type ProcessBatchBuildItemReport = {\n item_id: string;\n index: number;\n input_path: string;\n out_dir: string;\n status: ProcessBatchBuildItemStatus;\n run_id: string | null;\n run_root: string | null;\n request_id: string | null;\n files: {\n request_snapshot: string | null;\n report: string | null;\n state: string | null;\n handoff_summary: string | null;\n run_manifest: string | null;\n };\n error: ErrorPayload['error'] | null;\n};\n\nexport type ProcessBatchBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: ProcessBatchBuildStatus;\n manifest_path: string;\n batch_id: string;\n batch_root: string;\n continue_on_error: boolean;\n counts: {\n total: number;\n prepared: number;\n failed: number;\n skipped: number;\n };\n files: {\n request_snapshot: string;\n normalized_request: string;\n invocation_index: string;\n run_manifest: string;\n report: string;\n };\n items: ProcessBatchBuildItemReport[];\n next_actions: string[];\n};\n\nexport type RunProcessBatchBuildOptions = {\n inputPath: string;\n outDir?: 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 normalizeBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === 'boolean' ? value : fallback;\n}\n\nfunction requiredRequestObject(input: unknown): JsonRecord {\n if (!isRecord(input)) {\n throw new CliError('process batch-build request must be a JSON object.', {\n code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n return input;\n}\n\nfunction resolveBatchRoot(\n manifestDir: string,\n batchId: string,\n outDirOverride: string | null | undefined,\n requestOutDir: unknown,\n): string {\n const override = nonEmptyString(outDirOverride);\n if (override) {\n return path.resolve(manifestDir, override);\n }\n\n const requestValue = nonEmptyString(requestOutDir);\n if (requestValue) {\n return path.resolve(manifestDir, requestValue);\n }\n\n return path.join(manifestDir, 'artifacts', 'process_batch', batchId);\n}\n\nfunction buildLayout(batchRoot: string, batchId: string): ProcessBatchBuildLayout {\n const collectionDir = path.dirname(batchRoot);\n const layout: RunLayout = {\n namespace: 'process_batch',\n runId: batchId,\n artifactsRoot: path.dirname(collectionDir),\n collectionDir,\n runRoot: batchRoot,\n cacheDir: path.join(batchRoot, 'cache'),\n inputsDir: path.join(batchRoot, 'request'),\n outputsDir: path.join(batchRoot, 'runs'),\n reportsDir: path.join(batchRoot, 'reports'),\n logsDir: path.join(batchRoot, 'logs'),\n manifestsDir: path.join(batchRoot, 'manifests'),\n latestRunIdPath: path.join(collectionDir, '.latest_run_id'),\n };\n\n return {\n ...layout,\n requestDir: path.join(batchRoot, 'request'),\n runsDir: path.join(batchRoot, 'runs'),\n requestSnapshotPath: path.join(batchRoot, 'request', 'batch-request.json'),\n normalizedRequestPath: path.join(batchRoot, 'request', 'request.normalized.json'),\n invocationIndexPath: path.join(batchRoot, 'manifests', 'invocation-index.json'),\n runManifestPath: path.join(batchRoot, 'manifests', 'run-manifest.json'),\n reportPath: path.join(batchRoot, 'reports', 'process-batch-build-report.json'),\n };\n}\n\nfunction ensureEmptyRunRoot(runRoot: string): void {\n if (!existsSync(runRoot)) {\n return;\n }\n\n const entries = readdirSync(runRoot);\n if (entries.length > 0) {\n throw new CliError(`process batch-build run root already exists and is not empty: ${runRoot}`, {\n code: 'PROCESS_BATCH_BUILD_RUN_EXISTS',\n exitCode: 2,\n });\n }\n}\n\nfunction ensureProcessBatchBuildLayout(layout: ProcessBatchBuildLayout): void {\n ensureRunLayout(layout);\n [layout.requestDir, layout.runsDir].forEach((dirPath) => {\n mkdirSync(dirPath, { recursive: true });\n });\n}\n\nfunction normalizeBatchId(inputPath: string, request: JsonRecord, now: Date): string {\n const explicit = nonEmptyString(request.batch_id);\n if (explicit) {\n return explicit;\n }\n\n return buildRunId({\n namespace: 'process_batch',\n subject: path.basename(inputPath, path.extname(inputPath)),\n operation: 'build',\n now,\n });\n}\n\nfunction normalizeItemId(\n request: JsonRecord,\n inputPath: string,\n index: number,\n seenIds: Set<string>,\n): string {\n const explicit = nonEmptyString(request.item_id);\n const baseId = sanitizeRunToken(\n explicit ?? path.basename(inputPath, path.extname(inputPath)),\n `item_${index + 1}`,\n );\n\n if (explicit) {\n if (seenIds.has(baseId)) {\n throw new CliError(`Duplicate process batch-build item_id: ${baseId}`, {\n code: 'PROCESS_BATCH_BUILD_ITEM_DUPLICATE',\n exitCode: 2,\n });\n }\n\n seenIds.add(baseId);\n return baseId;\n }\n\n if (!seenIds.has(baseId)) {\n seenIds.add(baseId);\n return baseId;\n }\n\n let suffix = 2;\n while (seenIds.has(`${baseId}_${suffix}`)) {\n suffix += 1;\n }\n\n const deduped = `${baseId}_${suffix}`;\n seenIds.add(deduped);\n return deduped;\n}\n\nfunction normalizeItems(\n value: unknown,\n manifestDir: string,\n batchRoot: string,\n): ProcessBatchBuildManifestItem[] {\n if (!Array.isArray(value)) {\n throw new CliError('process batch-build items must be an array.', {\n code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n if (value.length === 0) {\n throw new CliError('process batch-build items must not be empty.', {\n code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',\n exitCode: 2,\n });\n }\n\n const seenIds = new Set<string>();\n\n return value.map((entry, index) => {\n const request = typeof entry === 'string' ? { input_path: entry } : entry;\n if (!isRecord(request)) {\n throw new CliError('process batch-build items entries must be strings or objects.', {\n code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',\n exitCode: 2,\n details: { index },\n });\n }\n\n const inputValue = nonEmptyString(request.input_path);\n if (!inputValue) {\n throw new CliError(\"process batch-build items[] is missing 'input_path'.\", {\n code: 'PROCESS_BATCH_BUILD_REQUEST_INVALID',\n exitCode: 2,\n details: { index },\n });\n }\n\n const inputPath = path.resolve(manifestDir, inputValue);\n const itemId = normalizeItemId(request, inputPath, index, seenIds);\n const explicitOutDir = nonEmptyString(request.out_dir);\n const outDir = explicitOutDir\n ? path.resolve(manifestDir, explicitOutDir)\n : path.join(batchRoot, 'runs', `${String(index + 1).padStart(3, '0')}_${itemId}`);\n\n return {\n item_id: itemId,\n input_path: inputPath,\n out_dir: outDir,\n };\n });\n}\n\nexport function normalizeProcessBatchBuildRequest(\n input: unknown,\n options: {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n },\n): NormalizedProcessBatchBuildRequest {\n const request = requiredRequestObject(input);\n const manifestPath = path.resolve(options.inputPath);\n const manifestDir = path.dirname(manifestPath);\n const now = options.now ?? new Date();\n const batchId = normalizeBatchId(manifestPath, request, now);\n const batchRoot = resolveBatchRoot(manifestDir, batchId, options.outDir, request.out_dir);\n\n return {\n schema_version: 1,\n manifest_path: manifestPath,\n batch_id: batchId,\n batch_root: batchRoot,\n continue_on_error: normalizeBoolean(request.continue_on_error, true),\n items: normalizeItems(request.items, manifestDir, batchRoot),\n };\n}\n\nfunction buildInvocationIndex(\n normalized: NormalizedProcessBatchBuildRequest,\n options: RunProcessBatchBuildOptions,\n layout: ProcessBatchBuildLayout,\n now: Date,\n): JsonRecord {\n const command = ['process', 'batch-build', '--input', options.inputPath];\n if (options.outDir) {\n command.push('--out-dir', options.outDir);\n }\n\n return {\n schema_version: 1,\n invocations: [\n {\n command,\n cwd: options.cwd ?? process.cwd(),\n created_at: now.toISOString(),\n manifest_path: normalized.manifest_path,\n batch_id: normalized.batch_id,\n report_path: layout.reportPath,\n },\n ],\n };\n}\n\nfunction buildNextActions(layout: ProcessBatchBuildLayout): string[] {\n return [\n `inspect: ${layout.normalizedRequestPath}`,\n `inspect: ${layout.reportPath}`,\n `future: consume items[].run_root for downstream resume-build or publish-build steps`,\n ];\n}\n\nfunction buildPreparedItemResult(\n item: ProcessBatchBuildManifestItem,\n index: number,\n report: ProcessAutoBuildReport,\n): ProcessBatchBuildItemReport {\n return {\n item_id: item.item_id,\n index,\n input_path: item.input_path,\n out_dir: item.out_dir,\n status: 'prepared',\n run_id: report.run_id,\n run_root: report.run_root,\n request_id: report.request_id,\n files: {\n request_snapshot: report.files.request_snapshot,\n report: report.files.report,\n state: report.files.state,\n handoff_summary: report.files.handoff_summary,\n run_manifest: report.files.run_manifest,\n },\n error: null,\n };\n}\n\nfunction buildFailedItemResult(\n item: ProcessBatchBuildManifestItem,\n index: number,\n error: unknown,\n): ProcessBatchBuildItemReport {\n return {\n item_id: item.item_id,\n index,\n input_path: item.input_path,\n out_dir: item.out_dir,\n status: 'failed',\n run_id: null,\n run_root: null,\n request_id: null,\n files: {\n request_snapshot: null,\n report: null,\n state: null,\n handoff_summary: null,\n run_manifest: null,\n },\n error: toErrorPayload(error).error,\n };\n}\n\nfunction buildSkippedItemResult(\n item: ProcessBatchBuildManifestItem,\n index: number,\n): ProcessBatchBuildItemReport {\n return {\n item_id: item.item_id,\n index,\n input_path: item.input_path,\n out_dir: item.out_dir,\n status: 'skipped',\n run_id: null,\n run_root: null,\n request_id: null,\n files: {\n request_snapshot: null,\n report: null,\n state: null,\n handoff_summary: null,\n run_manifest: null,\n },\n error: null,\n };\n}\n\nfunction buildReport(\n normalized: NormalizedProcessBatchBuildRequest,\n layout: ProcessBatchBuildLayout,\n items: ProcessBatchBuildItemReport[],\n now: Date,\n): ProcessBatchBuildReport {\n const counts = items.reduce(\n (summary, item) => {\n summary.total += 1;\n if (item.status === 'prepared') {\n summary.prepared += 1;\n } else if (item.status === 'failed') {\n summary.failed += 1;\n } else {\n summary.skipped += 1;\n }\n\n return summary;\n },\n {\n total: 0,\n prepared: 0,\n failed: 0,\n skipped: 0,\n },\n );\n\n return {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: counts.failed > 0 ? 'completed_with_failures' : 'completed',\n manifest_path: normalized.manifest_path,\n batch_id: normalized.batch_id,\n batch_root: normalized.batch_root,\n continue_on_error: normalized.continue_on_error,\n counts,\n files: {\n request_snapshot: layout.requestSnapshotPath,\n normalized_request: layout.normalizedRequestPath,\n invocation_index: layout.invocationIndexPath,\n run_manifest: layout.runManifestPath,\n report: layout.reportPath,\n },\n items,\n next_actions: buildNextActions(layout),\n };\n}\n\nfunction resolveItemOverrides(\n itemInput: unknown,\n item: ProcessBatchBuildManifestItem,\n index: number,\n now: Date,\n): {\n runIdOverride?: string;\n requestIdOverride?: string;\n finalRunId: string | null;\n} {\n if (!isRecord(itemInput)) {\n return {\n finalRunId: null,\n };\n }\n\n const explicitRunId = nonEmptyString(itemInput.run_id);\n const explicitRequestId = nonEmptyString(itemInput.request_id);\n if (explicitRunId) {\n return {\n finalRunId: explicitRunId,\n requestIdOverride: explicitRequestId ? undefined : `pff-${explicitRunId}`,\n };\n }\n\n const preview = normalizeProcessAutoBuildRequest(itemInput, {\n inputPath: item.input_path,\n outDir: item.out_dir,\n now,\n });\n const runIdOverride = `${preview.run_id}_b${String(index + 1).padStart(3, '0')}`;\n\n return {\n runIdOverride,\n requestIdOverride: explicitRequestId ?? `pff-${runIdOverride}`,\n finalRunId: runIdOverride,\n };\n}\n\nexport async function runProcessBatchBuild(\n options: RunProcessBatchBuildOptions,\n): Promise<ProcessBatchBuildReport> {\n const input = readJsonInput(options.inputPath);\n const now = options.now ?? new Date();\n const normalized = normalizeProcessBatchBuildRequest(input, {\n inputPath: options.inputPath,\n outDir: options.outDir,\n now,\n });\n const layout = buildLayout(normalized.batch_root, normalized.batch_id);\n\n ensureEmptyRunRoot(layout.runRoot);\n ensureProcessBatchBuildLayout(layout);\n\n writeJsonArtifact(layout.requestSnapshotPath, input);\n writeJsonArtifact(layout.normalizedRequestPath, normalized);\n writeJsonArtifact(\n layout.invocationIndexPath,\n buildInvocationIndex(normalized, options, layout, now),\n );\n writeJsonArtifact(\n layout.runManifestPath,\n buildRunManifest({\n layout,\n command: options.outDir\n ? ['process', 'batch-build', '--input', options.inputPath, '--out-dir', options.outDir]\n : ['process', 'batch-build', '--input', options.inputPath],\n cwd: options.cwd,\n createdAt: now,\n }),\n );\n\n const seenRunIds = new Set<string>();\n const items: ProcessBatchBuildItemReport[] = [];\n let stopAfterFailure = false;\n\n for (const [index, item] of normalized.items.entries()) {\n if (stopAfterFailure) {\n items.push(buildSkippedItemResult(item, index));\n continue;\n }\n\n try {\n const itemInput = readJsonInput(item.input_path);\n const overrides = resolveItemOverrides(itemInput, item, index, now);\n\n if (overrides.finalRunId && seenRunIds.has(overrides.finalRunId)) {\n throw new CliError(`Duplicate process batch-build run_id: ${overrides.finalRunId}`, {\n code: 'PROCESS_BATCH_BUILD_RUN_ID_DUPLICATE',\n exitCode: 2,\n details: { itemId: item.item_id, index },\n });\n }\n\n if (overrides.finalRunId) {\n seenRunIds.add(overrides.finalRunId);\n }\n\n const report = await runProcessAutoBuild({\n inputPath: item.input_path,\n inputValue: itemInput,\n outDir: item.out_dir,\n now,\n cwd: options.cwd,\n requestIdOverride: overrides.requestIdOverride,\n runIdOverride: overrides.runIdOverride,\n });\n items.push(buildPreparedItemResult(item, index, report));\n } catch (error) {\n items.push(buildFailedItemResult(item, index, error));\n if (!normalized.continue_on_error) {\n stopAfterFailure = true;\n }\n }\n }\n\n const report = buildReport(normalized, layout, items, now);\n writeJsonArtifact(layout.reportPath, report);\n writeLatestRunId(layout, normalized.batch_id);\n return report;\n}\n\nexport const __testInternals = {\n buildLayout,\n resolveBatchRoot,\n normalizeItems,\n normalizeProcessBatchBuildRequest,\n buildInvocationIndex,\n buildNextActions,\n buildReport,\n};\n"]}
|