@shipfox/api-definitions 10.2.0 → 12.0.0
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/.turbo/turbo-build.log +13 -12
- package/CHANGELOG.md +91 -0
- package/dist/core/entities/index.d.ts +1 -0
- package/dist/core/entities/index.d.ts.map +1 -1
- package/dist/core/entities/index.js +1 -0
- package/dist/core/entities/index.js.map +1 -1
- package/dist/core/entities/sync-state.d.ts +4 -0
- package/dist/core/entities/sync-state.d.ts.map +1 -1
- package/dist/core/entities/sync-state.js +10 -0
- package/dist/core/entities/sync-state.js.map +1 -1
- package/dist/core/entities/validation-warning.d.ts +6 -0
- package/dist/core/entities/validation-warning.d.ts.map +1 -0
- package/dist/core/entities/validation-warning.js +3 -0
- package/dist/core/entities/validation-warning.js.map +1 -0
- package/dist/core/parse-definition.d.ts +9 -7
- package/dist/core/parse-definition.d.ts.map +1 -1
- package/dist/core/parse-definition.js +14 -2
- package/dist/core/parse-definition.js.map +1 -1
- package/dist/core/sync-definitions.d.ts +2 -0
- package/dist/core/sync-definitions.d.ts.map +1 -1
- package/dist/core/sync-definitions.js +6 -5
- package/dist/core/sync-definitions.js.map +1 -1
- package/dist/core/validate-definition.d.ts +9 -5
- package/dist/core/validate-definition.d.ts.map +1 -1
- package/dist/core/validate-definition.js +23 -2
- package/dist/core/validate-definition.js.map +1 -1
- package/dist/core/workflow-model/index.d.ts +1 -1
- package/dist/core/workflow-model/index.d.ts.map +1 -1
- package/dist/core/workflow-model/index.js.map +1 -1
- package/dist/core/workflow-model/invalid-workflow-model-error.d.ts +3 -1
- package/dist/core/workflow-model/invalid-workflow-model-error.d.ts.map +1 -1
- package/dist/core/workflow-model/invalid-workflow-model-error.js.map +1 -1
- package/dist/core/workflow-model/normalize-if-condition.d.ts +0 -1
- package/dist/core/workflow-model/normalize-if-condition.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-if-condition.js +0 -1
- package/dist/core/workflow-model/normalize-if-condition.js.map +1 -1
- package/dist/core/workflow-model/normalize-job-checkout.d.ts +15 -3
- package/dist/core/workflow-model/normalize-job-checkout.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-job-checkout.js +83 -4
- package/dist/core/workflow-model/normalize-job-checkout.js.map +1 -1
- package/dist/core/workflow-model/normalize-job-listening.js +0 -1
- package/dist/core/workflow-model/normalize-job-listening.js.map +1 -1
- package/dist/core/workflow-model/normalize-job-success.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-job-success.js +0 -1
- package/dist/core/workflow-model/normalize-job-success.js.map +1 -1
- package/dist/core/workflow-model/normalize-jobs.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-jobs.js +310 -45
- package/dist/core/workflow-model/normalize-jobs.js.map +1 -1
- package/dist/core/workflow-model/normalize-step-gate.js +0 -1
- package/dist/core/workflow-model/normalize-step-gate.js.map +1 -1
- package/dist/core/workflow-model/normalize-triggers.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-triggers.js +0 -1
- package/dist/core/workflow-model/normalize-triggers.js.map +1 -1
- package/dist/core/workflow-model/normalize-workflow-document.d.ts +3 -0
- package/dist/core/workflow-model/normalize-workflow-document.d.ts.map +1 -1
- package/dist/core/workflow-model/normalize-workflow-document.js +34 -4
- package/dist/core/workflow-model/normalize-workflow-document.js.map +1 -1
- package/dist/core/workflow-model/parse-interpolation-field.d.ts +1 -1
- package/dist/core/workflow-model/parse-interpolation-field.d.ts.map +1 -1
- package/dist/core/workflow-model/parse-interpolation-field.js +27 -57
- package/dist/core/workflow-model/parse-interpolation-field.js.map +1 -1
- package/dist/core/workflow-model/validate-literal-name.d.ts +12 -0
- package/dist/core/workflow-model/validate-literal-name.d.ts.map +1 -0
- package/dist/core/workflow-model/validate-literal-name.js +36 -0
- package/dist/core/workflow-model/validate-literal-name.js.map +1 -0
- package/dist/core/workflow-model/validate-predicate-expression.d.ts +1 -2
- package/dist/core/workflow-model/validate-predicate-expression.d.ts.map +1 -1
- package/dist/core/workflow-model/validate-predicate-expression.js +31 -90
- package/dist/core/workflow-model/validate-predicate-expression.js.map +1 -1
- package/dist/core/workflow-model/validation-issue.d.ts +2 -1
- package/dist/core/workflow-model/validation-issue.d.ts.map +1 -1
- package/dist/core/workflow-model/validation-issue.js +8 -2
- package/dist/core/workflow-model/validation-issue.js.map +1 -1
- package/dist/core/workflow-model/workflow-field-label.d.ts.map +1 -1
- package/dist/core/workflow-model/workflow-field-label.js +16 -2
- package/dist/core/workflow-model/workflow-field-label.js.map +1 -1
- package/dist/db/db.d.ts +38 -0
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/schema/sync-states.d.ts +19 -0
- package/dist/db/schema/sync-states.d.ts.map +1 -1
- package/dist/db/schema/sync-states.js +3 -1
- package/dist/db/schema/sync-states.js.map +1 -1
- package/dist/db/sync-states.d.ts +2 -1
- package/dist/db/sync-states.d.ts.map +1 -1
- package/dist/db/sync-states.js +4 -0
- package/dist/db/sync-states.js.map +1 -1
- package/dist/presentation/dto/definition.d.ts.map +1 -1
- package/dist/presentation/dto/definition.js +2 -1
- package/dist/presentation/dto/definition.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +1 -0
- package/dist/presentation/routes/project-access.d.ts.map +1 -1
- package/dist/presentation/routes/validate-definition.d.ts.map +1 -1
- package/dist/presentation/routes/validate-definition.js +5 -3
- package/dist/presentation/routes/validate-definition.js.map +1 -1
- package/dist/temporal/activities/sync-activities.d.ts +6 -2
- package/dist/temporal/activities/sync-activities.d.ts.map +1 -1
- package/dist/temporal/activities/sync-activities.js +8 -1
- package/dist/temporal/activities/sync-activities.js.map +1 -1
- package/dist/temporal/workflows/definition-sync.js +4 -1
- package/dist/temporal/workflows/definition-sync.js.map +1 -1
- package/dist/temporal/workflows/index.bundle.js +9029 -3
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0002_lumpy_ben_parker.sql +1 -0
- package/drizzle/meta/0002_snapshot.json +534 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +14 -14
- package/src/core/entities/index.ts +1 -0
- package/src/core/entities/sync-state.ts +23 -0
- package/src/core/entities/validation-warning.ts +5 -0
- package/src/core/parse-definition-warnings.test.ts +33 -0
- package/src/core/parse-definition.test.ts +7 -1
- package/src/core/parse-definition.ts +28 -10
- package/src/core/sync-definitions.test.ts +39 -0
- package/src/core/sync-definitions.ts +14 -4
- package/src/core/validate-definition.test.ts +128 -0
- package/src/core/validate-definition.ts +39 -8
- package/src/core/workflow-model/README.md +2 -2
- package/src/core/workflow-model/index.ts +1 -0
- package/src/core/workflow-model/invalid-workflow-model-error.ts +8 -2
- package/src/core/workflow-model/normalize-if-condition.ts +0 -2
- package/src/core/workflow-model/normalize-job-checkout.ts +105 -8
- package/src/core/workflow-model/normalize-job-listening.ts +0 -1
- package/src/core/workflow-model/normalize-job-success.ts +0 -1
- package/src/core/workflow-model/normalize-jobs.ts +330 -49
- package/src/core/workflow-model/normalize-step-gate.ts +0 -1
- package/src/core/workflow-model/normalize-triggers.ts +0 -1
- package/src/core/workflow-model/normalize-workflow-document.test.ts +759 -185
- package/src/core/workflow-model/normalize-workflow-document.ts +29 -4
- package/src/core/workflow-model/parse-interpolation-field.ts +50 -79
- package/src/core/workflow-model/validate-literal-name.ts +64 -0
- package/src/core/workflow-model/validate-predicate-expression.test.ts +153 -15
- package/src/core/workflow-model/validate-predicate-expression.ts +52 -120
- package/src/core/workflow-model/validation-issue.ts +4 -0
- package/src/core/workflow-model/workflow-field-label.ts +16 -2
- package/src/core/workflow-yaml/README.md +2 -2
- package/src/db/schema/sync-states.ts +4 -1
- package/src/db/sync-states.test.ts +57 -0
- package/src/db/sync-states.ts +6 -0
- package/src/presentation/dto/definition.ts +1 -0
- package/src/presentation/routes/create-definition.test.ts +3 -3
- package/src/presentation/routes/get-definition.test.ts +1 -1
- package/src/presentation/routes/list-definitions.test.ts +2 -1
- package/src/presentation/routes/validate-definition.test.ts +1 -0
- package/src/presentation/routes/validate-definition.ts +7 -1
- package/src/temporal/activities/sync-activities.test.ts +16 -0
- package/src/temporal/activities/sync-activities.ts +18 -3
- package/src/temporal/workflows/definition-sync.ts +1 -1
- package/test/agent-validation-catalog.ts +17 -0
- package/test/fixtures/valid-listening-job.yml +2 -1
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/workflow-model/normalize-jobs.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {\n type AvailabilitySite,\n buildTypedRootsEnvironment,\n type ExpressionType,\n type ExpressionTypeEnvironment,\n type WorkflowJobTypeOverlay,\n type WorkflowStepTypeOverlay,\n} from '@shipfox/expression';\nimport {\n canonicalizeLabels,\n findInvalidLabels,\n MAX_RUNNER_LABEL_LENGTH,\n MAX_RUNNER_LABELS,\n RUNNER_LABEL_PATTERN,\n} from '@shipfox/runner-labels';\nimport type {\n WorkflowDocument,\n WorkflowDocumentJob,\n WorkflowDocumentStep,\n} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {\n WorkflowEnvTemplates,\n WorkflowFieldTemplate,\n WorkflowModelAgentStep,\n WorkflowModelJob,\n WorkflowModelRunStep,\n WorkflowModelStep,\n WorkflowOutputTemplates,\n WorkflowStepSourceLocationMap,\n} from '../entities/workflow-model.js';\nimport type {WorkflowModelValidationIssue} from './invalid-workflow-model-error.js';\nimport {normalizeAgentIntegrations} from './normalize-agent-integrations.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeIfCondition} from './normalize-if-condition.js';\nimport {normalizeJobCheckout} from './normalize-job-checkout.js';\nimport {normalizeJobListening} from './normalize-job-listening.js';\nimport {normalizeJobSuccess} from './normalize-job-success.js';\nimport {normalizeNeeds} from './normalize-needs.js';\nimport {normalizeStepGate} from './normalize-step-gate.js';\nimport {normalizeStepOutputs} from './normalize-step-outputs.js';\nimport {parseDurationMs} from './parse-duration-ms.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {stableId} from './stable-id.js';\nimport {issue} from './validation-issue.js';\n\nexport interface NormalizeContext {\n readonly defaultRunnerLabels: readonly string[];\n readonly agentValidationCatalog: AgentValidationCatalog;\n readonly integrationValidationContext?: IntegrationValidationContext | undefined;\n}\n\nexport function normalizeJobs(\n document: WorkflowDocument,\n jobIdBySourceName: ReadonlyMap<string, string>,\n issues: WorkflowModelValidationIssue[],\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined,\n context: NormalizeContext,\n): readonly WorkflowModelJob[] {\n const entries = Object.entries(document.jobs);\n const pending = new Set(entries.map(([sourceName]) => sourceName));\n const modelsBySourceName = new Map<string, WorkflowModelJob>();\n const jobOutputTypesBySourceName = new Map<string, Readonly<Record<string, ExpressionType>>>();\n const issuesBySourceName = new Map<string, WorkflowModelValidationIssue[]>();\n\n while (pending.size > 0) {\n let progressed = false;\n\n for (const [sourceName, job] of entries) {\n if (!pending.has(sourceName)) continue;\n\n const dependencySourceNames = normalizeNeeds(job.needs).filter((dependency) =>\n jobIdBySourceName.has(dependency),\n );\n if (dependencySourceNames.some((dependency) => pending.has(dependency))) continue;\n\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n pending.delete(sourceName);\n progressed = true;\n }\n\n if (progressed) continue;\n\n for (const sourceName of pending) {\n const job = document.jobs[sourceName];\n if (job === undefined) continue;\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n }\n break;\n }\n\n for (const [sourceName] of entries) {\n issues.push(...(issuesBySourceName.get(sourceName) ?? []));\n }\n\n return entries.flatMap(([sourceName]) => {\n const model = modelsBySourceName.get(sourceName);\n return model === undefined ? [] : [model];\n });\n}\n\nfunction issuesForSourceName(\n issuesBySourceName: Map<string, WorkflowModelValidationIssue[]>,\n sourceName: string,\n): WorkflowModelValidationIssue[] {\n const existing = issuesBySourceName.get(sourceName);\n if (existing !== undefined) return existing;\n\n const issues: WorkflowModelValidationIssue[] = [];\n issuesBySourceName.set(sourceName, issues);\n return issues;\n}\n\nfunction normalizeJob(params: {\n document: WorkflowDocument;\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n context: NormalizeContext;\n jobOutputTypesBySourceName: Map<string, Readonly<Record<string, ExpressionType>>>;\n}): WorkflowModelJob | undefined {\n const id = params.jobIdBySourceName.get(params.sourceName);\n if (id === undefined) return undefined;\n\n const dependencies = normalizeJobDependencies({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const allowedJobReferences = directNeedSourceNames({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const upstreamJobs = upstreamJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const directNeedJobs = directNeedJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const upstreamJobsTypeOverlay =\n upstreamJobs.length === 0 ? undefined : buildTypedRootsEnvironment({jobs: upstreamJobs});\n const jobConditionTypeOverlay = buildTypedRootsEnvironment({\n jobs: directNeedJobs,\n needs: directNeedJobs,\n });\n // Step config can reference peer step outputs, which are completed at dispatch.\n const stepFillSite: AvailabilitySite = 'step-dispatch';\n const stepTypeOverlay = params.job.steps.some((step) => step.outputs !== undefined)\n ? {}\n : undefined;\n const steps = normalizeJobSteps({\n sourceName: params.sourceName,\n jobId: id,\n job: params.job,\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: stepFillSite,\n allowedJobReferences,\n typeOverlay: stepTypeOverlay,\n upstreamJobs,\n directNeedJobs,\n context: params.context,\n });\n const runner = normalizeRunner({\n document: params.document,\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n defaultRunnerLabels: params.context.defaultRunnerLabels,\n });\n const checkout = normalizeJobCheckout(params.job.checkout);\n const jobEnv = normalizeEnv({\n env: params.job.env,\n path: ['jobs', params.sourceName, 'env'],\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const success = normalizeJobSuccess({\n source: params.job.success,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const condition = normalizeIfCondition({\n field: 'job.if',\n source: params.job.if,\n site: 'job-activation',\n path: ['jobs', params.sourceName, 'if'],\n invalidCode: 'invalid-job-if',\n invalidMessage: 'Job if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: jobConditionTypeOverlay,\n });\n const outputs = normalizeJobOutputs({\n sourceName: params.sourceName,\n outputs: params.job.outputs,\n issues: params.issues,\n allowedJobReferences,\n steps: params.job.steps,\n upstreamJobs,\n });\n if (outputs?.types !== undefined) {\n params.jobOutputTypesBySourceName.set(params.sourceName, outputs.types);\n }\n const executionTimeoutMs = parseDurationMs({\n source: params.job.execution_timeout,\n path: ['jobs', params.sourceName, 'execution_timeout'],\n issues: params.issues,\n });\n const listening = normalizeJobListening({\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n });\n const name =\n params.job.name === undefined\n ? undefined\n : (parseInterpolationField({\n field: 'job.name',\n source: params.job.name,\n path: ['jobs', params.sourceName, 'name'],\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n }) ?? [{kind: 'literal' as const, value: params.job.name}]);\n\n return {\n id,\n key: params.sourceName,\n mode: listening === undefined ? 'one_shot' : 'listening',\n runner: runner.labels,\n ...(runner.templates.length === 0 ? {} : {runnerTemplates: runner.templates}),\n checkout,\n ...(condition === undefined ? {} : {if: condition}),\n ...(success === undefined ? {} : {success}),\n ...(outputs === undefined ? {} : {outputs: outputs.templates}),\n ...(outputs?.types === undefined ? {} : {outputTypes: outputs.types}),\n ...(executionTimeoutMs === undefined ? {} : {executionTimeoutMs}),\n ...(listening === undefined ? {} : {listening}),\n ...(name === undefined ? {} : {name}),\n ...jobEnv,\n dependencies,\n steps,\n };\n}\n\nfunction normalizeJobDependencies(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): readonly string[] {\n return normalizeNeeds(params.job.needs).flatMap((dependencySourceName) => {\n const dependencyId = params.jobIdBySourceName.get(dependencySourceName);\n if (dependencyId === undefined || dependencySourceName === params.sourceName) return [];\n return [dependencyId];\n });\n}\n\nfunction directNeedSourceNames(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): ReadonlySet<string> {\n return new Set(\n normalizeNeeds(params.job.needs).filter(\n (dependencySourceName) =>\n dependencySourceName !== params.sourceName &&\n params.jobIdBySourceName.has(dependencySourceName),\n ),\n );\n}\n\nfunction previousStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n index: number,\n): readonly WorkflowStepTypeOverlay[] {\n return steps.slice(0, index).flatMap((step) => {\n if (step.key === undefined) return [];\n return [{key: step.key, ...(step.outputs === undefined ? {} : {outputs: step.outputs})}];\n });\n}\n\nfunction allStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n): readonly WorkflowStepTypeOverlay[] {\n return previousStepOverlays(steps, steps.length);\n}\n\nfunction upstreamJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n const overlays = [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n return overlays.some((overlay) => overlay.outputs !== undefined) ? overlays : [];\n}\n\nfunction directNeedJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n return [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n}\n\nfunction normalizeJobOutputs(params: {\n sourceName: string;\n outputs: WorkflowDocumentJob['outputs'];\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n steps: readonly WorkflowDocumentStep[];\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n}):\n | {templates: WorkflowOutputTemplates; types: Readonly<Record<string, ExpressionType>>}\n | undefined {\n if (params.outputs === undefined) return undefined;\n\n const templates: Record<string, WorkflowFieldTemplate> = Object.create(null) as Record<\n string,\n WorkflowFieldTemplate\n >;\n const types: Record<string, ExpressionType> = Object.create(null) as Record<\n string,\n ExpressionType\n >;\n const hasStepOutputDeclarations = params.steps.some((step) => step.outputs !== undefined);\n const typeOverlay =\n hasStepOutputDeclarations || params.upstreamJobs.length > 0\n ? buildTypedRootsEnvironment({\n ...(hasStepOutputDeclarations ? {steps: allStepOverlays(params.steps)} : {}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n })\n : undefined;\n\n for (const [key, source] of Object.entries(params.outputs)) {\n const template = parseInterpolationField({\n field: 'job.outputs',\n source,\n path: ['jobs', params.sourceName, 'outputs', key],\n issues: params.issues,\n fillSite: 'execution-resolution',\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n }) ?? [{kind: 'literal' as const, value: source}];\n templates[key] = template;\n types[key] = inferJobOutputType({\n sourceName: params.sourceName,\n key,\n source,\n template,\n issues: params.issues,\n });\n }\n\n return {templates, types};\n}\n\nfunction inferJobOutputType(params: {\n sourceName: string;\n key: string;\n source: string;\n template: WorkflowFieldTemplate;\n issues: WorkflowModelValidationIssue[];\n}): ExpressionType {\n if (params.template.length !== 1) return 'string';\n\n const [segment] = params.template;\n if (segment?.kind !== 'deferred') return 'string';\n\n const resultType = segment.expression.resultType;\n if (resultType === undefined) return 'string';\n if (isScalarExpressionType(resultType)) return resultType;\n\n params.issues.push(\n issue({\n code: 'invalid-job-output',\n message: `Job output \"${params.key}\" must resolve to a scalar value.`,\n path: ['jobs', params.sourceName, 'outputs', params.key],\n details: {\n output: params.key,\n source: params.source,\n },\n }),\n );\n return 'string';\n}\n\nfunction isScalarExpressionType(type: ExpressionType): boolean {\n return (\n type === 'string' ||\n type === 'int' ||\n type === 'double' ||\n type === 'bool' ||\n type === 'null' ||\n type === 'timestamp'\n );\n}\n\nfunction normalizeJobSteps(params: {\n sourceName: string;\n jobId: string;\n job: WorkflowDocumentJob;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): readonly WorkflowModelStep[] {\n const usedStepIds = new Map<string, number>();\n\n return params.job.steps.map((step, index) =>\n normalizeStep({\n step,\n index,\n sourceName: params.sourceName,\n jobId: params.jobId,\n allSteps: params.job.steps,\n usedStepIds,\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n upstreamJobs: params.upstreamJobs,\n directNeedJobs: params.directNeedJobs,\n context: params.context,\n }),\n );\n}\n\nfunction normalizeStep(params: {\n step: WorkflowDocumentStep;\n index: number;\n sourceName: string;\n jobId: string;\n allSteps: readonly WorkflowDocumentStep[];\n usedStepIds: Map<string, number>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): WorkflowModelStep {\n const stepKey = params.step.key;\n const stepId =\n stepKey === undefined\n ? `${params.jobId}-step-${params.index + 1}`\n : `${params.jobId}-${stableId(stepKey)}`;\n const existingIndex = params.usedStepIds.get(stepId);\n\n if (existingIndex !== undefined) {\n params.issues.push(\n issue({\n code: 'duplicate-step-id',\n message: `Steps ${existingIndex} and ${params.index} in job \"${params.sourceName}\" resolve to the same stable id \"${stepId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.index],\n details: {id: stepId, indexes: [existingIndex, params.index]},\n }),\n );\n } else {\n params.usedStepIds.set(stepId, params.index);\n }\n\n const outputs = normalizeStepOutputs({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n });\n const currentStepOverlay =\n stepKey === undefined\n ? undefined\n : ({\n key: stepKey,\n ...(outputs === undefined ? {} : {outputs}),\n } satisfies WorkflowStepTypeOverlay);\n const shouldBuildTypeOverlay = params.typeOverlay !== undefined || params.upstreamJobs.length > 0;\n const typeOverlay = !shouldBuildTypeOverlay\n ? undefined\n : buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n });\n const conditionTypeOverlay = buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n jobs: params.directNeedJobs,\n needs: params.directNeedJobs,\n });\n\n const condition = normalizeIfCondition({\n field: 'step.if',\n source: params.step.if,\n site: 'step-dispatch',\n path: ['jobs', params.sourceName, 'steps', params.index, 'if'],\n invalidCode: 'invalid-step-if',\n invalidMessage: 'Step if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: conditionTypeOverlay,\n });\n const gate = normalizeStepGate({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n stepId,\n previousStepKeys: new Set(\n params.allSteps\n .slice(0, params.index)\n .flatMap((candidate) => (candidate.key ? [candidate.key] : [])),\n ),\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const sourceLocation = params.stepSourceLocations?.get(params.sourceName)?.get(params.index);\n const name =\n params.step.name === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.name',\n source: params.step.name,\n path: ['jobs', params.sourceName, 'steps', params.index, 'name'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const stepBase = {\n id: stepId,\n ...(stepKey === undefined ? {} : {key: stepKey}),\n ...(params.step.name === undefined ? {} : {name: params.step.name}),\n ...(outputs === undefined ? {} : {outputs}),\n ...(sourceLocation === undefined ? {} : {sourceLocation}),\n ...(condition === undefined ? {} : {if: condition}),\n ...(gate === undefined ? {} : {gate}),\n };\n\n if (params.step.run !== undefined) {\n return normalizeRunStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n name,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n if (params.step.prompt !== undefined) {\n return normalizeAgentStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n name,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n context: params.context,\n });\n }\n\n // workflowDocumentStepSchema requires either `run` or an agent `prompt`; this\n // keeps the model-step union honest if callers bypass the document parser.\n throw new Error(`Workflow step \"${stepId}\" is neither a run nor an agent step`);\n}\n\nfunction normalizeRunStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n name: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelRunStep {\n if (params.step.run === undefined) {\n throw new Error('Run step normalization requires a run command');\n }\n\n const commandTemplate = parseInterpolationField({\n field: 'run',\n source: params.step.run,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const stepEnv = normalizeEnv({\n env: params.step.env,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'env'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const templates = optionalRunStepTemplates({\n command: commandTemplate,\n name: params.name,\n env: stepEnv.templates?.env,\n });\n\n return {\n ...params.stepBase,\n kind: 'run',\n command: {kind: 'shell', value: params.step.run},\n ...(stepEnv.env === undefined ? {} : {env: stepEnv.env}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction normalizeAgentStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n name: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n context: NormalizeContext;\n}): WorkflowModelAgentStep {\n if (params.step.prompt === undefined) {\n throw new Error('Agent step normalization requires a prompt');\n }\n\n const promptTemplate = parseInterpolationField({\n field: 'agent.prompt',\n source: params.step.prompt,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'prompt'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const modelTemplate =\n params.step.model === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.model',\n source: params.step.model,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const providerTemplate =\n params.step.provider === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.provider',\n source: params.step.provider,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n validateAgentStep({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n validateLiteralProvider: providerTemplate === undefined,\n agentValidationCatalog: params.context.agentValidationCatalog,\n });\n const integrations = normalizeAgentIntegrations({\n integrations: params.step.integrations,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n integrationValidationContext: params.context.integrationValidationContext,\n });\n const templates = optionalAgentStepTemplates({\n prompt: promptTemplate,\n model: modelTemplate,\n provider: providerTemplate,\n name: params.name,\n });\n\n return {\n ...params.stepBase,\n kind: 'agent',\n ...(params.step.harness === undefined ? {} : {harness: params.step.harness}),\n ...(params.step.model === undefined ? {} : {model: params.step.model}),\n ...(params.step.provider === undefined ? {} : {provider: params.step.provider}),\n prompt: params.step.prompt,\n ...(params.step.thinking === undefined ? {} : {thinking: params.step.thinking}),\n ...(params.step.tools === undefined ? {} : {tools: params.step.tools}),\n ...(integrations === undefined ? {} : {integrations}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction validateAgentStep(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n validateLiteralProvider: boolean;\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n validateHarnessThinking(params);\n validateHarnessTools(params);\n if (!params.validateLiteralProvider) return;\n\n const providerId = params.step.provider;\n if (providerId === undefined) return;\n\n const provider = params.agentValidationCatalog.providers.find((entry) => entry.id === providerId);\n const harness = params.step.harness;\n if (provider === undefined && harness === 'pi') return;\n\n if (provider === undefined || provider.support_status !== 'supported') {\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (harness === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness);\n if (descriptor?.supported_provider_ids.includes(providerId)) return;\n\n params.issues.push(\n issue({\n code: 'harness-provider-incompatible',\n message: `Harness \"${harness}\" does not support provider: ${providerId}. Supported providers: ${descriptor?.supported_provider_ids.join(', ') ?? ''}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {\n harness,\n provider: providerId,\n supportedProviders: descriptor?.supported_provider_ids ?? [],\n },\n }),\n );\n}\n\nfunction validateHarnessTools(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, tools} = params.step;\n if (tools === undefined) return;\n\n if (harness === undefined) {\n params.issues.push(\n issue({\n code: 'missing-harness-for-tools',\n message:\n 'Agent step tools require an explicit harness because tool names are harness-specific.',\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools'],\n details: {tools},\n }),\n );\n return;\n }\n\n const supportedTools =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.effective_tools ?? [];\n const supportedToolSet = new Set(supportedTools);\n\n tools.forEach((tool, toolIndex) => {\n if (supportedToolSet.has(tool)) return;\n\n params.issues.push(\n issue({\n code: 'harness-tool-incompatible',\n message: `Harness \"${harness}\" does not support tool: ${tool}. Supported tools: ${supportedTools.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools', toolIndex],\n details: {harness, tool, supportedTools},\n }),\n );\n });\n}\n\nfunction validateHarnessThinking(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, thinking} = params.step;\n if (harness === undefined || thinking === undefined) return;\n\n const supportedLevels =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.thinking_levels ?? [];\n if (supportedLevels.includes(thinking)) return;\n params.issues.push(\n issue({\n code: 'harness-thinking-incompatible',\n message: `Harness \"${harness}\" does not support thinking: ${thinking}. Supported levels: ${supportedLevels.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n details: {harness, thinking, supportedLevels},\n }),\n );\n}\nfunction normalizeRunner(params: {\n document: WorkflowDocument;\n job: WorkflowDocumentJob;\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n defaultRunnerLabels: readonly string[];\n}): {labels: readonly string[]; templates: readonly WorkflowFieldTemplate[]} {\n const rawRunner = params.job.runner ?? params.document.runner;\n if (rawRunner === undefined) {\n const runnerLabels = params.defaultRunnerLabels;\n validateRunnerLabels({...params, runnerLabels, allowEmpty: false});\n return {labels: runnerLabels, templates: []};\n }\n\n const runnerValues = typeof rawRunner === 'string' ? [rawRunner] : rawRunner;\n const literalLabels: string[] = [];\n const templates: WorkflowFieldTemplate[] = [];\n let templateValueCount = 0;\n for (const [index, value] of runnerValues.entries()) {\n const template = parseInterpolationField({\n field: 'job.runner',\n source: value,\n path: ['jobs', params.sourceName, 'runner', index],\n issues: params.issues,\n fillSite: 'execution-creation',\n });\n const hasTemplateSyntax = hasInterpolationSyntax(value);\n if (hasTemplateSyntax) templateValueCount += 1;\n if (template === undefined && !hasTemplateSyntax) {\n literalLabels.push(value);\n } else if (template !== undefined) {\n templates.push(template);\n }\n }\n\n const runnerLabels = canonicalizeLabels(literalLabels);\n validateRunnerLabels({\n ...params,\n runnerLabels,\n runnerLabelCount: runnerLabels.length + templates.length,\n allowEmpty: templateValueCount > 0,\n });\n\n return {labels: runnerLabels, templates};\n}\n\nfunction hasInterpolationSyntax(value: string): boolean {\n return value.includes('${{');\n}\n\nfunction validateRunnerLabels(params: {\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n runnerLabels: readonly string[];\n runnerLabelCount?: number;\n allowEmpty: boolean;\n}): void {\n const runnerLabels = params.runnerLabels;\n const runnerLabelCount = params.runnerLabelCount ?? runnerLabels.length;\n const invalid = findInvalidLabels(runnerLabels);\n\n if (invalid.length > 0) {\n params.issues.push(\n issue({\n code: 'invalid-runner-label',\n message: `Job \"${params.sourceName}\" has invalid runner label(s): ${invalid.join(', ')}. Labels must match ${RUNNER_LABEL_PATTERN} and be at most ${MAX_RUNNER_LABEL_LENGTH} chars.`,\n path: ['jobs', params.sourceName, 'runner'],\n details: {labels: invalid},\n }),\n );\n }\n\n if (runnerLabels.length === 0 && !params.allowEmpty) {\n params.issues.push(\n issue({\n code: 'missing-runner-label',\n message: `Job \"${params.sourceName}\" must declare at least one runner label. Set \"runner\" on the job or the workflow, or configure DEFINITION_DEFAULT_RUNNER_LABEL.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n\n if (runnerLabelCount > MAX_RUNNER_LABELS) {\n params.issues.push(\n issue({\n code: 'too-many-runner-labels',\n message: `Job \"${params.sourceName}\" declares ${runnerLabelCount} runner labels; the maximum is ${MAX_RUNNER_LABELS}.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n}\n\ntype WorkflowModelStepBaseFields = Pick<\n WorkflowModelStep,\n 'id' | 'key' | 'name' | 'outputs' | 'sourceLocation' | 'gate'\n>;\n\nfunction optionalRunStepTemplates(params: {\n command: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n env: WorkflowEnvTemplates | undefined;\n}):\n | {\n command?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n env?: WorkflowEnvTemplates;\n }\n | undefined {\n if (params.command === undefined && params.name === undefined && params.env === undefined) {\n return undefined;\n }\n\n return {\n ...(params.command === undefined ? {} : {command: params.command}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.env === undefined ? {} : {env: params.env}),\n };\n}\n\nfunction optionalAgentStepTemplates(params: {\n prompt: WorkflowFieldTemplate | undefined;\n model: WorkflowFieldTemplate | undefined;\n provider: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n}):\n | {\n prompt?: WorkflowFieldTemplate;\n model?: WorkflowFieldTemplate;\n provider?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n }\n | undefined {\n if (\n params.prompt === undefined &&\n params.model === undefined &&\n params.provider === undefined &&\n params.name === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.prompt === undefined ? {} : {prompt: params.prompt}),\n ...(params.model === undefined ? {} : {model: params.model}),\n ...(params.provider === undefined ? {} : {provider: params.provider}),\n ...(params.name === undefined ? {} : {name: params.name}),\n };\n}\n"],"names":["buildTypedRootsEnvironment","canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABEL_LENGTH","MAX_RUNNER_LABELS","RUNNER_LABEL_PATTERN","normalizeAgentIntegrations","normalizeEnv","normalizeIfCondition","normalizeJobCheckout","normalizeJobListening","normalizeJobSuccess","normalizeNeeds","normalizeStepGate","normalizeStepOutputs","parseDurationMs","parseInterpolationField","stableId","issue","normalizeJobs","document","jobIdBySourceName","issues","stepSourceLocations","context","entries","Object","jobs","pending","Set","map","sourceName","modelsBySourceName","Map","jobOutputTypesBySourceName","issuesBySourceName","size","progressed","job","has","dependencySourceNames","needs","filter","dependency","some","model","normalizeJob","issuesForSourceName","undefined","set","delete","push","get","flatMap","existing","params","id","dependencies","normalizeJobDependencies","allowedJobReferences","directNeedSourceNames","upstreamJobs","upstreamJobTypeOverlays","directNeedJobs","directNeedJobTypeOverlays","upstreamJobsTypeOverlay","length","jobConditionTypeOverlay","stepFillSite","stepTypeOverlay","steps","step","outputs","normalizeJobSteps","jobId","fillSite","typeOverlay","runner","normalizeRunner","defaultRunnerLabels","checkout","jobEnv","env","path","success","source","condition","field","if","site","invalidCode","invalidMessage","normalizeJobOutputs","types","executionTimeoutMs","execution_timeout","listening","name","kind","value","key","mode","labels","templates","runnerTemplates","outputTypes","dependencySourceName","dependencyId","previousStepOverlays","index","slice","allStepOverlays","overlays","overlay","create","hasStepOutputDeclarations","template","inferJobOutputType","segment","resultType","expression","isScalarExpressionType","code","message","details","output","type","usedStepIds","normalizeStep","allSteps","stepKey","stepId","existingIndex","indexes","stepIndex","currentStepOverlay","shouldBuildTypeOverlay","currentStep","conditionTypeOverlay","gate","previousStepKeys","candidate","sourceLocation","stepBase","run","normalizeRunStep","prompt","normalizeAgentStep","Error","commandTemplate","stepEnv","optionalRunStepTemplates","command","promptTemplate","modelTemplate","providerTemplate","provider","validateAgentStep","validateLiteralProvider","agentValidationCatalog","integrations","integrationValidationContext","optionalAgentStepTemplates","harness","thinking","tools","validateHarnessThinking","validateHarnessTools","providerId","providers","find","entry","support_status","descriptor","harnesses","supported_provider_ids","includes","join","supportedProviders","supportedTools","effective_tools","supportedToolSet","forEach","tool","toolIndex","supportedLevels","thinking_levels","rawRunner","runnerLabels","validateRunnerLabels","allowEmpty","runnerValues","literalLabels","templateValueCount","hasTemplateSyntax","hasInterpolationSyntax","runnerLabelCount","invalid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/workflow-model/normalize-jobs.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {\n type AvailabilitySite,\n buildTypedRootsEnvironment,\n classifyShellCodePosition,\n type ExpressionType,\n type ExpressionTypeEnvironment,\n hoistPlannedRunCommand,\n type ShellReevaluatingConstruct,\n type UnsafeRunInterpolation,\n UnsafeRunInterpolationError,\n type WorkflowJobTypeOverlay,\n type WorkflowStepTypeOverlay,\n} from '@shipfox/expression';\nimport {\n canonicalizeLabels,\n findInvalidLabels,\n MAX_RUNNER_LABEL_LENGTH,\n MAX_RUNNER_LABELS,\n RUNNER_LABEL_PATTERN,\n} from '@shipfox/runner-labels';\nimport type {\n WorkflowDocument,\n WorkflowDocumentJob,\n WorkflowDocumentStep,\n} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {\n WorkflowEnvTemplates,\n WorkflowFieldTemplate,\n WorkflowModelAgentStep,\n WorkflowModelCheckoutStep,\n WorkflowModelJob,\n WorkflowModelRunStep,\n WorkflowModelStep,\n WorkflowModelStepCheckout,\n WorkflowOutputTemplates,\n WorkflowStepSourceLocationMap,\n} from '../entities/workflow-model.js';\nimport type {\n WorkflowModelValidationIssue,\n WorkflowModelValidationIssuePathSegment,\n} from './invalid-workflow-model-error.js';\nimport {normalizeAgentIntegrations} from './normalize-agent-integrations.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeIfCondition} from './normalize-if-condition.js';\nimport {normalizeCheckout, normalizeJobCheckout} from './normalize-job-checkout.js';\nimport {normalizeJobListening} from './normalize-job-listening.js';\nimport {normalizeJobSuccess} from './normalize-job-success.js';\nimport {normalizeNeeds} from './normalize-needs.js';\nimport {normalizeStepGate} from './normalize-step-gate.js';\nimport {normalizeStepOutputs} from './normalize-step-outputs.js';\nimport {parseDurationMs} from './parse-duration-ms.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {stableId} from './stable-id.js';\nimport {unescapeLiteralName, validateLiteralName} from './validate-literal-name.js';\nimport {issue} from './validation-issue.js';\n\nexport interface NormalizeContext {\n readonly defaultRunnerLabels: readonly string[];\n readonly agentValidationCatalog: AgentValidationCatalog;\n readonly integrationValidationContext?: IntegrationValidationContext | undefined;\n}\n\nexport function normalizeJobs(\n document: WorkflowDocument,\n jobIdBySourceName: ReadonlyMap<string, string>,\n issues: WorkflowModelValidationIssue[],\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined,\n context: NormalizeContext,\n): readonly WorkflowModelJob[] {\n const entries = Object.entries(document.jobs);\n const pending = new Set(entries.map(([sourceName]) => sourceName));\n const modelsBySourceName = new Map<string, WorkflowModelJob>();\n const jobOutputTypesBySourceName = new Map<string, Readonly<Record<string, ExpressionType>>>();\n const issuesBySourceName = new Map<string, WorkflowModelValidationIssue[]>();\n\n while (pending.size > 0) {\n let progressed = false;\n\n for (const [sourceName, job] of entries) {\n if (!pending.has(sourceName)) continue;\n\n const dependencySourceNames = normalizeNeeds(job.needs).filter((dependency) =>\n jobIdBySourceName.has(dependency),\n );\n if (dependencySourceNames.some((dependency) => pending.has(dependency))) continue;\n\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n pending.delete(sourceName);\n progressed = true;\n }\n\n if (progressed) continue;\n\n for (const sourceName of pending) {\n const job = document.jobs[sourceName];\n if (job === undefined) continue;\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n }\n break;\n }\n\n for (const [sourceName] of entries) {\n issues.push(...(issuesBySourceName.get(sourceName) ?? []));\n }\n\n return entries.flatMap(([sourceName]) => {\n const model = modelsBySourceName.get(sourceName);\n return model === undefined ? [] : [model];\n });\n}\n\nfunction issuesForSourceName(\n issuesBySourceName: Map<string, WorkflowModelValidationIssue[]>,\n sourceName: string,\n): WorkflowModelValidationIssue[] {\n const existing = issuesBySourceName.get(sourceName);\n if (existing !== undefined) return existing;\n\n const issues: WorkflowModelValidationIssue[] = [];\n issuesBySourceName.set(sourceName, issues);\n return issues;\n}\n\nfunction normalizeJob(params: {\n document: WorkflowDocument;\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n context: NormalizeContext;\n jobOutputTypesBySourceName: Map<string, Readonly<Record<string, ExpressionType>>>;\n}): WorkflowModelJob | undefined {\n const id = params.jobIdBySourceName.get(params.sourceName);\n if (id === undefined) return undefined;\n\n const dependencies = normalizeJobDependencies({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const allowedJobReferences = directNeedSourceNames({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const upstreamJobs = upstreamJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const directNeedJobs = directNeedJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const upstreamJobsTypeOverlay =\n upstreamJobs.length === 0 ? undefined : buildTypedRootsEnvironment({jobs: upstreamJobs});\n const jobConditionTypeOverlay = buildTypedRootsEnvironment({\n jobs: directNeedJobs,\n needs: directNeedJobs,\n });\n // Step config can reference peer step outputs, which are completed at dispatch.\n const stepFillSite: AvailabilitySite = 'step-dispatch';\n const stepTypeOverlay = params.job.steps.some((step) => step.outputs !== undefined)\n ? {}\n : undefined;\n const steps = normalizeJobSteps({\n sourceName: params.sourceName,\n jobId: id,\n job: params.job,\n workflowEnvKeys: Object.keys(params.document.env ?? {}),\n jobEnvKeys: Object.keys(params.job.env ?? {}),\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: stepFillSite,\n allowedJobReferences,\n typeOverlay: stepTypeOverlay,\n upstreamJobs,\n directNeedJobs,\n context: params.context,\n });\n const runner = normalizeRunner({\n document: params.document,\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n defaultRunnerLabels: params.context.defaultRunnerLabels,\n });\n const checkout = normalizeJobCheckout({\n checkout: params.job.checkout,\n });\n const jobEnv = normalizeEnv({\n env: params.job.env,\n path: ['jobs', params.sourceName, 'env'],\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const success = normalizeJobSuccess({\n source: params.job.success,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const condition = normalizeIfCondition({\n field: 'job.if',\n source: params.job.if,\n path: ['jobs', params.sourceName, 'if'],\n invalidCode: 'invalid-job-if',\n invalidMessage: 'Job if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: jobConditionTypeOverlay,\n });\n const outputs = normalizeJobOutputs({\n sourceName: params.sourceName,\n outputs: params.job.outputs,\n issues: params.issues,\n allowedJobReferences,\n steps: params.job.steps,\n upstreamJobs,\n });\n if (outputs?.types !== undefined) {\n params.jobOutputTypesBySourceName.set(params.sourceName, outputs.types);\n }\n const executionTimeoutMs = parseDurationMs({\n source: params.job.execution_timeout,\n path: ['jobs', params.sourceName, 'execution_timeout'],\n issues: params.issues,\n });\n const listening = normalizeJobListening({\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n });\n if (params.job.name !== undefined) {\n validateLiteralName({\n field: 'job.name',\n dynamicField: 'execution_name',\n source: params.job.name,\n path: ['jobs', params.sourceName, 'name'],\n message: 'Job name must be literal. Move runtime interpolation to execution_name.',\n issues: params.issues,\n });\n }\n const name = params.job.name === undefined ? undefined : unescapeLiteralName(params.job.name);\n const executionName =\n params.job.execution_name === undefined\n ? undefined\n : (parseInterpolationField({\n field: 'job.execution_name',\n source: params.job.execution_name,\n path: ['jobs', params.sourceName, 'execution_name'],\n issues: params.issues,\n fillSite: 'execution-creation',\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n }) ?? [{kind: 'literal' as const, value: params.job.execution_name}]);\n\n return {\n id,\n key: params.sourceName,\n mode: listening === undefined ? 'one_shot' : 'listening',\n runner: runner.labels,\n ...(runner.templates.length === 0 ? {} : {runnerTemplates: runner.templates}),\n checkout,\n ...(condition === undefined ? {} : {if: condition}),\n ...(success === undefined ? {} : {success}),\n ...(outputs === undefined ? {} : {outputs: outputs.templates}),\n ...(outputs?.types === undefined ? {} : {outputTypes: outputs.types}),\n ...(executionTimeoutMs === undefined ? {} : {executionTimeoutMs}),\n ...(listening === undefined ? {} : {listening}),\n ...(name === undefined ? {} : {name}),\n ...(executionName === undefined ? {} : {executionName}),\n ...jobEnv,\n dependencies,\n steps,\n };\n}\n\nfunction normalizeJobDependencies(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): readonly string[] {\n return normalizeNeeds(params.job.needs).flatMap((dependencySourceName) => {\n const dependencyId = params.jobIdBySourceName.get(dependencySourceName);\n if (dependencyId === undefined || dependencySourceName === params.sourceName) return [];\n return [dependencyId];\n });\n}\n\nfunction directNeedSourceNames(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): ReadonlySet<string> {\n return new Set(\n normalizeNeeds(params.job.needs).filter(\n (dependencySourceName) =>\n dependencySourceName !== params.sourceName &&\n params.jobIdBySourceName.has(dependencySourceName),\n ),\n );\n}\n\nfunction previousStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n index: number,\n): readonly WorkflowStepTypeOverlay[] {\n return steps.slice(0, index).flatMap((step) => {\n if (step.key === undefined) return [];\n return [{key: step.key, ...(step.outputs === undefined ? {} : {outputs: step.outputs})}];\n });\n}\n\nfunction allStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n): readonly WorkflowStepTypeOverlay[] {\n return previousStepOverlays(steps, steps.length);\n}\n\nfunction upstreamJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n const overlays = [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n return overlays.some((overlay) => overlay.outputs !== undefined) ? overlays : [];\n}\n\nfunction directNeedJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n return [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n}\n\nfunction normalizeJobOutputs(params: {\n sourceName: string;\n outputs: WorkflowDocumentJob['outputs'];\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n steps: readonly WorkflowDocumentStep[];\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n}):\n | {templates: WorkflowOutputTemplates; types: Readonly<Record<string, ExpressionType>>}\n | undefined {\n if (params.outputs === undefined) return undefined;\n\n const templates: Record<string, WorkflowFieldTemplate> = Object.create(null) as Record<\n string,\n WorkflowFieldTemplate\n >;\n const types: Record<string, ExpressionType> = Object.create(null) as Record<\n string,\n ExpressionType\n >;\n const hasStepOutputDeclarations = params.steps.some((step) => step.outputs !== undefined);\n const typeOverlay =\n hasStepOutputDeclarations || params.upstreamJobs.length > 0\n ? buildTypedRootsEnvironment({\n ...(hasStepOutputDeclarations ? {steps: allStepOverlays(params.steps)} : {}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n })\n : undefined;\n\n for (const [key, source] of Object.entries(params.outputs)) {\n const template = parseInterpolationField({\n field: 'job.outputs',\n source,\n path: ['jobs', params.sourceName, 'outputs', key],\n issues: params.issues,\n fillSite: 'execution-resolution',\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n }) ?? [{kind: 'literal' as const, value: source}];\n templates[key] = template;\n types[key] = inferJobOutputType({\n sourceName: params.sourceName,\n key,\n source,\n template,\n issues: params.issues,\n });\n }\n\n return {templates, types};\n}\n\nfunction inferJobOutputType(params: {\n sourceName: string;\n key: string;\n source: string;\n template: WorkflowFieldTemplate;\n issues: WorkflowModelValidationIssue[];\n}): ExpressionType {\n if (params.template.length !== 1) return 'string';\n\n const [segment] = params.template;\n if (segment?.kind !== 'deferred') return 'string';\n\n const resultType = segment.expression.resultType;\n if (resultType === undefined) return 'string';\n if (isScalarExpressionType(resultType)) return resultType;\n\n params.issues.push(\n issue({\n code: 'invalid-job-output',\n message: `Job output \"${params.key}\" must resolve to a scalar value.`,\n path: ['jobs', params.sourceName, 'outputs', params.key],\n details: {\n output: params.key,\n source: params.source,\n },\n }),\n );\n return 'string';\n}\n\nfunction isScalarExpressionType(type: ExpressionType): boolean {\n return (\n type === 'string' ||\n type === 'int' ||\n type === 'double' ||\n type === 'bool' ||\n type === 'null' ||\n type === 'timestamp'\n );\n}\n\nfunction normalizeJobSteps(params: {\n sourceName: string;\n jobId: string;\n job: WorkflowDocumentJob;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): readonly WorkflowModelStep[] {\n const usedStepIds = new Map<string, number>();\n\n return params.job.steps.flatMap((step, index) => {\n const normalized = normalizeStep({\n step,\n index,\n sourceName: params.sourceName,\n jobId: params.jobId,\n allSteps: params.job.steps,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n usedStepIds,\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n upstreamJobs: params.upstreamJobs,\n directNeedJobs: params.directNeedJobs,\n context: params.context,\n });\n return normalized === undefined ? [] : [normalized];\n });\n}\n\nfunction normalizeStep(params: {\n step: WorkflowDocumentStep;\n index: number;\n sourceName: string;\n jobId: string;\n allSteps: readonly WorkflowDocumentStep[];\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n usedStepIds: Map<string, number>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): WorkflowModelStep | undefined {\n const stepKey = params.step.key;\n const stepId =\n stepKey === undefined\n ? `${params.jobId}-step-${params.index + 1}`\n : `${params.jobId}-${stableId(stepKey)}`;\n const existingIndex = params.usedStepIds.get(stepId);\n\n if (existingIndex !== undefined) {\n params.issues.push(\n issue({\n code: 'duplicate-step-id',\n message: `Steps ${existingIndex} and ${params.index} in job \"${params.sourceName}\" resolve to the same stable id \"${stepId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.index],\n details: {id: stepId, indexes: [existingIndex, params.index]},\n }),\n );\n } else {\n params.usedStepIds.set(stepId, params.index);\n }\n\n const outputs = normalizeStepOutputs({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n });\n const currentStepOverlay =\n stepKey === undefined\n ? undefined\n : ({\n key: stepKey,\n ...(outputs === undefined ? {} : {outputs}),\n } satisfies WorkflowStepTypeOverlay);\n const shouldBuildTypeOverlay = params.typeOverlay !== undefined || params.upstreamJobs.length > 0;\n const typeOverlay = !shouldBuildTypeOverlay\n ? undefined\n : buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n });\n const conditionTypeOverlay = buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n jobs: params.directNeedJobs,\n needs: params.directNeedJobs,\n });\n\n const condition = normalizeIfCondition({\n field: 'step.if',\n source: params.step.if,\n path: ['jobs', params.sourceName, 'steps', params.index, 'if'],\n invalidCode: 'invalid-step-if',\n invalidMessage: 'Step if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: conditionTypeOverlay,\n });\n const gate = normalizeStepGate({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n stepId,\n previousStepKeys: new Set(\n params.allSteps\n .slice(0, params.index)\n .flatMap((candidate) => (candidate.key ? [candidate.key] : [])),\n ),\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const sourceLocation = params.stepSourceLocations?.get(params.sourceName)?.get(params.index);\n const name =\n params.step.name === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.name',\n source: params.step.name,\n path: ['jobs', params.sourceName, 'steps', params.index, 'name'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const workingDirectory =\n params.step.working_directory === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.working_directory',\n source: params.step.working_directory,\n path: ['jobs', params.sourceName, 'steps', params.index, 'working_directory'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const stepBase = {\n id: stepId,\n ...(stepKey === undefined ? {} : {key: stepKey}),\n ...(params.step.name === undefined ? {} : {name: params.step.name}),\n ...(params.step.working_directory === undefined\n ? {}\n : {workingDirectory: params.step.working_directory}),\n ...(outputs === undefined ? {} : {outputs}),\n ...(sourceLocation === undefined ? {} : {sourceLocation}),\n ...(condition === undefined ? {} : {if: condition}),\n ...(gate === undefined ? {} : {gate}),\n };\n\n if (params.step.run !== undefined) {\n return normalizeRunStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n if (params.step.prompt !== undefined) {\n return normalizeAgentStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n context: params.context,\n });\n }\n\n if (params.step.checkout !== undefined) {\n return normalizeCheckoutStep({\n step: params.step,\n stepBase,\n name,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n // Keep the model-step union honest if callers bypass the document parser.\n throw new Error(`Workflow step \"${stepId}\" is neither a run, agent, nor checkout step`);\n}\n\nfunction normalizeCheckoutStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n name: WorkflowFieldTemplate | undefined;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelCheckoutStep {\n const checkout = params.step.checkout;\n if (checkout === undefined) {\n throw new Error('Checkout step normalization requires checkout settings');\n }\n\n const normalizedCheckout: WorkflowModelStepCheckout = normalizeCheckout({\n checkout,\n issues: params.issues,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'checkout'],\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n\n return {\n ...params.stepBase,\n kind: 'checkout',\n checkout: normalizedCheckout,\n ...(params.name === undefined ? {} : {templates: {name: params.name}}),\n };\n}\n\nfunction normalizeRunStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelRunStep {\n if (params.step.run === undefined) {\n throw new Error('Run step normalization requires a run command');\n }\n\n const commandTemplate = parseInterpolationField({\n field: 'run',\n source: params.step.run,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const stepEnv = normalizeEnv({\n env: params.step.env,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'env'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n addReevaluatingCommandWarnings({\n command: commandTemplate,\n source: params.step.run,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n stepEnvKeys: Object.keys(params.step.env ?? {}),\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n });\n const templates = optionalRunStepTemplates({\n command: commandTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n env: stepEnv.templates?.env,\n });\n\n return {\n ...params.stepBase,\n kind: 'run',\n command: {kind: 'shell', value: params.step.run},\n ...(stepEnv.env === undefined ? {} : {env: stepEnv.env}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction addReevaluatingCommandWarnings(params: {\n command: WorkflowFieldTemplate | undefined;\n source: string;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n stepEnvKeys: readonly string[];\n path: readonly WorkflowModelValidationIssuePathSegment[];\n issues: WorkflowModelValidationIssue[];\n}): void {\n const envKeys = new Set([...params.workflowEnvKeys, ...params.jobEnvKeys, ...params.stepEnvKeys]);\n let hoisted: ReturnType<typeof hoistPlannedRunCommand>;\n\n try {\n hoisted = hoistPlannedRunCommand({\n field: {\n segments: params.command ?? [{kind: 'literal', value: params.source}],\n },\n reservedNames: envKeys,\n });\n } catch (error) {\n if (!(error instanceof UnsafeRunInterpolationError)) return;\n\n for (const occurrence of error.occurrences) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: unsafeInterpolationWarningMessage(occurrence),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n\n if (error.partial === undefined) return;\n hoisted = error.partial;\n }\n\n try {\n const matches = classifyShellCodePosition({\n command: hoisted.command,\n workflowDataNames: [...envKeys, ...hoisted.bindings.map((binding) => binding.name)],\n }).matches;\n\n for (const match of matches) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: reevaluatingCommandWarningMessage(match.construct, match.name),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n } catch {\n return;\n }\n}\n\nfunction unsafeInterpolationWarningMessage(error: UnsafeRunInterpolation): string {\n const regionLabel = {\n single: 'single-quoted shell text',\n double: 'double-quoted shell text',\n 'dollar-single': 'ANSI-C shell text',\n 'dollar-double': 'dollar-double-quoted shell text',\n 'paren-sub': 'command substitution',\n arith: 'shell arithmetic',\n backtick: 'backtick substitution',\n 'param-brace': 'shell parameter expansion',\n heredoc: 'a heredoc',\n 'line-comment': 'a shell comment',\n escape: 'a shell escape',\n }[error.region];\n\n return `Value \"${error.source}\" is inside ${regionLabel} and will be re-executed as code. Hoisting cannot protect it; move the interpolation to a normal quoted argument instead.`;\n}\n\nfunction reevaluatingCommandWarningMessage(\n construct: ShellReevaluatingConstruct,\n name: string,\n): string {\n const constructLabel = {\n eval: 'eval',\n 'sh-c': 'sh -c',\n 'bash-c': 'bash -c',\n source: 'source',\n let: 'let',\n 'declare-i': 'declare -i',\n arithmetic: 'shell arithmetic',\n awk: 'awk',\n jq: 'jq',\n sed: 'sed',\n 'xargs-sh-c': 'xargs sh -c',\n }[construct];\n\n return `Value \"$${name}\" is passed to ${constructLabel} and re-executed as code. Hoisting cannot protect it; pass the value to a fixed program instead.`;\n}\n\nfunction normalizeAgentStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n context: NormalizeContext;\n}): WorkflowModelAgentStep {\n if (params.step.prompt === undefined) {\n throw new Error('Agent step normalization requires a prompt');\n }\n\n const promptTemplate = parseInterpolationField({\n field: 'agent.prompt',\n source: params.step.prompt,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'prompt'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const modelTemplate =\n params.step.model === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.model',\n source: params.step.model,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const providerTemplate =\n params.step.provider === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.provider',\n source: params.step.provider,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const thinkingTemplate =\n params.step.thinking === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.thinking',\n source: params.step.thinking,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n validateAgentStep({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n validateLiteralModel:\n params.step.model !== undefined && !hasInterpolationSyntax(params.step.model),\n validateLiteralProvider:\n params.step.provider !== undefined && !hasInterpolationSyntax(params.step.provider),\n agentValidationCatalog: params.context.agentValidationCatalog,\n });\n const integrations = normalizeAgentIntegrations({\n integrations: params.step.integrations,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n integrationValidationContext: params.context.integrationValidationContext,\n });\n const templates = optionalAgentStepTemplates({\n prompt: promptTemplate,\n model: modelTemplate,\n provider: providerTemplate,\n thinking: thinkingTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n });\n\n return {\n ...params.stepBase,\n kind: 'agent',\n ...(params.step.harness === undefined ? {} : {harness: params.step.harness}),\n ...(params.step.model === undefined ? {} : {model: params.step.model}),\n ...(params.step.provider === undefined ? {} : {provider: params.step.provider}),\n prompt: params.step.prompt,\n ...(params.step.thinking === undefined ? {} : {thinking: params.step.thinking}),\n ...(params.step.tools === undefined ? {} : {tools: params.step.tools}),\n ...(integrations === undefined ? {} : {integrations}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction validateAgentStep(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n validateLiteralModel: boolean;\n validateLiteralProvider: boolean;\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n validateHarnessThinking(params);\n validateHarnessTools(params);\n const providerId = params.step.provider;\n const harness = params.step.harness;\n const provider =\n providerId === undefined\n ? undefined\n : params.agentValidationCatalog.providers.find((entry) => entry.id === providerId);\n\n if (params.validateLiteralProvider && providerId !== undefined) {\n if (provider === undefined) {\n if (harness === undefined || harness === 'pi') return;\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (provider.support_status !== 'supported') {\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (harness === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find(\n (entry) => entry.id === harness,\n );\n if (!descriptor?.supported_provider_ids.includes(providerId)) {\n params.issues.push(\n issue({\n code: 'harness-provider-incompatible',\n message: `Harness \"${harness}\" does not support provider: ${providerId}. Supported providers: ${descriptor?.supported_provider_ids.join(', ') ?? ''}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {\n harness,\n provider: providerId,\n supportedProviders: descriptor?.supported_provider_ids ?? [],\n },\n }),\n );\n return;\n }\n }\n\n if (!params.validateLiteralModel || providerId === undefined || harness === undefined) return;\n if (provider === undefined || provider.support_status !== 'supported') return;\n\n const model = params.step.model;\n if (model === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness);\n const modelIds = descriptor?.model_ids_by_provider?.[providerId];\n if (modelIds === undefined || modelIds.includes(model)) return;\n\n params.issues.push(\n issue({\n code: 'invalid-model',\n message: `Agent model \"${model}\" is not available for harness \"${harness}\" and provider \"${providerId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n details: {harness, provider: providerId, model},\n }),\n );\n}\n\nfunction validateHarnessTools(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, tools} = params.step;\n if (tools === undefined) return;\n\n if (harness === undefined) {\n params.issues.push(\n issue({\n code: 'missing-harness-for-tools',\n message:\n 'Agent step tools require an explicit harness because tool names are harness-specific.',\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools'],\n details: {tools},\n }),\n );\n return;\n }\n\n const supportedTools =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.effective_tools ?? [];\n const supportedToolSet = new Set(supportedTools);\n\n tools.forEach((tool, toolIndex) => {\n if (supportedToolSet.has(tool)) return;\n\n params.issues.push(\n issue({\n code: 'harness-tool-incompatible',\n message: `Harness \"${harness}\" does not support tool: ${tool}. Supported tools: ${supportedTools.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools', toolIndex],\n details: {harness, tool, supportedTools},\n }),\n );\n });\n}\n\nfunction validateHarnessThinking(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, thinking} = params.step;\n if (harness === undefined || thinking === undefined) return;\n // An interpolated level is only known when the step dispatches, so the agent\n // module checks it against the resolved harness there.\n if (hasInterpolationSyntax(thinking)) return;\n\n const supportedLevels =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.thinking_levels ?? [];\n if ((supportedLevels as readonly string[]).includes(thinking)) return;\n params.issues.push(\n issue({\n code: 'harness-thinking-incompatible',\n message: `Harness \"${harness}\" does not support thinking: ${thinking}. Supported levels: ${supportedLevels.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n details: {harness, thinking, supportedLevels},\n }),\n );\n}\nfunction normalizeRunner(params: {\n document: WorkflowDocument;\n job: WorkflowDocumentJob;\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n defaultRunnerLabels: readonly string[];\n}): {labels: readonly string[]; templates: readonly WorkflowFieldTemplate[]} {\n const rawRunner = params.job.runner ?? params.document.runner;\n if (rawRunner === undefined) {\n const runnerLabels = params.defaultRunnerLabels;\n validateRunnerLabels({...params, runnerLabels, allowEmpty: false});\n return {labels: runnerLabels, templates: []};\n }\n\n const runnerValues = typeof rawRunner === 'string' ? [rawRunner] : rawRunner;\n const literalLabels: string[] = [];\n const templates: WorkflowFieldTemplate[] = [];\n let templateValueCount = 0;\n for (const [index, value] of runnerValues.entries()) {\n const template = parseInterpolationField({\n field: 'job.runner',\n source: value,\n path: ['jobs', params.sourceName, 'runner', index],\n issues: params.issues,\n fillSite: 'execution-creation',\n });\n const hasTemplateSyntax = hasInterpolationSyntax(value);\n if (hasTemplateSyntax) templateValueCount += 1;\n if (template === undefined && !hasTemplateSyntax) {\n literalLabels.push(value);\n } else if (template !== undefined) {\n templates.push(template);\n }\n }\n\n const runnerLabels = canonicalizeLabels(literalLabels);\n validateRunnerLabels({\n ...params,\n runnerLabels,\n runnerLabelCount: runnerLabels.length + templates.length,\n allowEmpty: templateValueCount > 0,\n });\n\n return {labels: runnerLabels, templates};\n}\n\nfunction hasInterpolationSyntax(value: string): boolean {\n return value.includes('${{');\n}\n\nfunction validateRunnerLabels(params: {\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n runnerLabels: readonly string[];\n runnerLabelCount?: number;\n allowEmpty: boolean;\n}): void {\n const runnerLabels = params.runnerLabels;\n const runnerLabelCount = params.runnerLabelCount ?? runnerLabels.length;\n const invalid = findInvalidLabels(runnerLabels);\n\n if (invalid.length > 0) {\n params.issues.push(\n issue({\n code: 'invalid-runner-label',\n message: `Job \"${params.sourceName}\" has invalid runner label(s): ${invalid.join(', ')}. Labels must match ${RUNNER_LABEL_PATTERN} and be at most ${MAX_RUNNER_LABEL_LENGTH} chars.`,\n path: ['jobs', params.sourceName, 'runner'],\n details: {labels: invalid},\n }),\n );\n }\n\n if (runnerLabels.length === 0 && !params.allowEmpty) {\n params.issues.push(\n issue({\n code: 'missing-runner-label',\n message: `Job \"${params.sourceName}\" must declare at least one runner label. Set \"runner\" on the job or the workflow, or configure DEFINITION_DEFAULT_RUNNER_LABEL.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n\n if (runnerLabelCount > MAX_RUNNER_LABELS) {\n params.issues.push(\n issue({\n code: 'too-many-runner-labels',\n message: `Job \"${params.sourceName}\" declares ${runnerLabelCount} runner labels; the maximum is ${MAX_RUNNER_LABELS}.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n}\n\ntype WorkflowModelStepBaseFields = Pick<\n WorkflowModelStep,\n 'id' | 'key' | 'name' | 'workingDirectory' | 'outputs' | 'sourceLocation' | 'gate'\n>;\n\nfunction optionalRunStepTemplates(params: {\n command: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n env: WorkflowEnvTemplates | undefined;\n}):\n | {\n command?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n env?: WorkflowEnvTemplates;\n }\n | undefined {\n if (\n params.command === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined &&\n params.env === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.command === undefined ? {} : {command: params.command}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n ...(params.env === undefined ? {} : {env: params.env}),\n };\n}\n\nfunction optionalAgentStepTemplates(params: {\n prompt: WorkflowFieldTemplate | undefined;\n model: WorkflowFieldTemplate | undefined;\n provider: WorkflowFieldTemplate | undefined;\n thinking: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n}):\n | {\n prompt?: WorkflowFieldTemplate;\n model?: WorkflowFieldTemplate;\n provider?: WorkflowFieldTemplate;\n thinking?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n }\n | undefined {\n if (\n params.prompt === undefined &&\n params.model === undefined &&\n params.provider === undefined &&\n params.thinking === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.prompt === undefined ? {} : {prompt: params.prompt}),\n ...(params.model === undefined ? {} : {model: params.model}),\n ...(params.provider === undefined ? {} : {provider: params.provider}),\n ...(params.thinking === undefined ? {} : {thinking: params.thinking}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n };\n}\n"],"names":["buildTypedRootsEnvironment","classifyShellCodePosition","hoistPlannedRunCommand","UnsafeRunInterpolationError","canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABEL_LENGTH","MAX_RUNNER_LABELS","RUNNER_LABEL_PATTERN","normalizeAgentIntegrations","normalizeEnv","normalizeIfCondition","normalizeCheckout","normalizeJobCheckout","normalizeJobListening","normalizeJobSuccess","normalizeNeeds","normalizeStepGate","normalizeStepOutputs","parseDurationMs","parseInterpolationField","stableId","unescapeLiteralName","validateLiteralName","issue","normalizeJobs","document","jobIdBySourceName","issues","stepSourceLocations","context","entries","Object","jobs","pending","Set","map","sourceName","modelsBySourceName","Map","jobOutputTypesBySourceName","issuesBySourceName","size","progressed","job","has","dependencySourceNames","needs","filter","dependency","some","model","normalizeJob","issuesForSourceName","undefined","set","delete","push","get","flatMap","existing","params","id","dependencies","normalizeJobDependencies","allowedJobReferences","directNeedSourceNames","upstreamJobs","upstreamJobTypeOverlays","directNeedJobs","directNeedJobTypeOverlays","upstreamJobsTypeOverlay","length","jobConditionTypeOverlay","stepFillSite","stepTypeOverlay","steps","step","outputs","normalizeJobSteps","jobId","workflowEnvKeys","keys","env","jobEnvKeys","fillSite","typeOverlay","runner","normalizeRunner","defaultRunnerLabels","checkout","jobEnv","path","success","source","condition","field","if","invalidCode","invalidMessage","normalizeJobOutputs","types","executionTimeoutMs","execution_timeout","listening","name","dynamicField","message","executionName","execution_name","kind","value","key","mode","labels","templates","runnerTemplates","outputTypes","dependencySourceName","dependencyId","previousStepOverlays","index","slice","allStepOverlays","overlays","overlay","create","hasStepOutputDeclarations","template","inferJobOutputType","segment","resultType","expression","isScalarExpressionType","code","details","output","type","usedStepIds","normalized","normalizeStep","allSteps","stepKey","stepId","existingIndex","indexes","stepIndex","currentStepOverlay","shouldBuildTypeOverlay","currentStep","conditionTypeOverlay","gate","previousStepKeys","candidate","sourceLocation","workingDirectory","working_directory","stepBase","run","normalizeRunStep","prompt","normalizeAgentStep","normalizeCheckoutStep","Error","normalizedCheckout","commandTemplate","stepEnv","addReevaluatingCommandWarnings","command","stepEnvKeys","optionalRunStepTemplates","envKeys","hoisted","segments","reservedNames","error","occurrence","occurrences","unsafeInterpolationWarningMessage","severity","partial","matches","workflowDataNames","bindings","binding","match","reevaluatingCommandWarningMessage","construct","regionLabel","single","double","arith","backtick","heredoc","escape","region","constructLabel","eval","let","arithmetic","awk","jq","sed","promptTemplate","modelTemplate","providerTemplate","provider","thinkingTemplate","thinking","validateAgentStep","validateLiteralModel","hasInterpolationSyntax","validateLiteralProvider","agentValidationCatalog","integrations","integrationValidationContext","optionalAgentStepTemplates","harness","tools","validateHarnessThinking","validateHarnessTools","providerId","providers","find","entry","support_status","descriptor","harnesses","supported_provider_ids","includes","join","supportedProviders","modelIds","model_ids_by_provider","supportedTools","effective_tools","supportedToolSet","forEach","tool","toolIndex","supportedLevels","thinking_levels","rawRunner","runnerLabels","validateRunnerLabels","allowEmpty","runnerValues","literalLabels","templateValueCount","hasTemplateSyntax","runnerLabelCount","invalid"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/workflow-model/normalize-step-gate.ts"],"sourcesContent":["import type {ExpressionTypeEnvironment, WorkflowExpression} from '@shipfox/expression';\nimport type {WorkflowDocumentStep} from '@shipfox/workflow-document';\nimport type {WorkflowModelStepGate} from '../entities/workflow-model.js';\nimport type {WorkflowModelValidationIssue} from './invalid-workflow-model-error.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {validatePredicateExpression} from './validate-predicate-expression.js';\nimport {issue} from './validation-issue.js';\n\nexport function normalizeStepGate(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n stepId: string;\n previousStepKeys: ReadonlySet<string>;\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelStepGate | undefined {\n const gate = params.step.gate;\n if (gate === undefined) return undefined;\n\n const success = normalizeGateSuccess({\n source: gate.success,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const feedbackTemplate =\n gate.on_failure?.feedback === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.feedback',\n source: gate.on_failure.feedback,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'gate', 'on_failure'],\n issues: params.issues,\n fillSite: 'step-report',\n typeOverlay: params.typeOverlay,\n });\n const onFailure =\n gate.on_failure === undefined\n ? undefined\n : {\n restartFrom: gate.on_failure.restart_from,\n ...(gate.on_failure.feedback === undefined ? {} : {feedback: gate.on_failure.feedback}),\n ...(feedbackTemplate === undefined ? {} : {feedbackTemplate}),\n };\n\n if (gate.on_failure !== undefined && !params.previousStepKeys.has(gate.on_failure.restart_from)) {\n params.issues.push(\n issue({\n code: 'invalid-step-gate-restart-from',\n message: `Step \"${params.stepId}\" must restart from an earlier keyed step; found \"${gate.on_failure.restart_from}\".`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'gate', 'on_failure'],\n details: {stepId: params.stepId, restartFrom: gate.on_failure.restart_from},\n }),\n );\n }\n\n if (success === undefined && onFailure === undefined) return undefined;\n\n return {\n ...(success === undefined ? {} : {success}),\n ...(onFailure === undefined ? {} : {onFailure}),\n };\n}\n\nfunction normalizeGateSuccess(params: {\n source: string | undefined;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowExpression | undefined {\n if (params.source === undefined) return undefined;\n\n return validatePredicateExpression({\n field: 'step.success',\n source: params.source,\n
|
|
1
|
+
{"version":3,"sources":["../../../src/core/workflow-model/normalize-step-gate.ts"],"sourcesContent":["import type {ExpressionTypeEnvironment, WorkflowExpression} from '@shipfox/expression';\nimport type {WorkflowDocumentStep} from '@shipfox/workflow-document';\nimport type {WorkflowModelStepGate} from '../entities/workflow-model.js';\nimport type {WorkflowModelValidationIssue} from './invalid-workflow-model-error.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {validatePredicateExpression} from './validate-predicate-expression.js';\nimport {issue} from './validation-issue.js';\n\nexport function normalizeStepGate(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n stepId: string;\n previousStepKeys: ReadonlySet<string>;\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelStepGate | undefined {\n const gate = params.step.gate;\n if (gate === undefined) return undefined;\n\n const success = normalizeGateSuccess({\n source: gate.success,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const feedbackTemplate =\n gate.on_failure?.feedback === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.feedback',\n source: gate.on_failure.feedback,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'gate', 'on_failure'],\n issues: params.issues,\n fillSite: 'step-report',\n typeOverlay: params.typeOverlay,\n });\n const onFailure =\n gate.on_failure === undefined\n ? undefined\n : {\n restartFrom: gate.on_failure.restart_from,\n ...(gate.on_failure.feedback === undefined ? {} : {feedback: gate.on_failure.feedback}),\n ...(feedbackTemplate === undefined ? {} : {feedbackTemplate}),\n };\n\n if (gate.on_failure !== undefined && !params.previousStepKeys.has(gate.on_failure.restart_from)) {\n params.issues.push(\n issue({\n code: 'invalid-step-gate-restart-from',\n message: `Step \"${params.stepId}\" must restart from an earlier keyed step; found \"${gate.on_failure.restart_from}\".`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'gate', 'on_failure'],\n details: {stepId: params.stepId, restartFrom: gate.on_failure.restart_from},\n }),\n );\n }\n\n if (success === undefined && onFailure === undefined) return undefined;\n\n return {\n ...(success === undefined ? {} : {success}),\n ...(onFailure === undefined ? {} : {onFailure}),\n };\n}\n\nfunction normalizeGateSuccess(params: {\n source: string | undefined;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowExpression | undefined {\n if (params.source === undefined) return undefined;\n\n return validatePredicateExpression({\n field: 'step.success',\n source: params.source,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'gate', 'success'],\n invalidCode: 'invalid-step-gate-success',\n invalidMessage: 'Step gate success must be a valid CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n}\n"],"names":["parseInterpolationField","validatePredicateExpression","issue","normalizeStepGate","params","gate","step","undefined","success","normalizeGateSuccess","source","sourceName","stepIndex","issues","allowedJobReferences","typeOverlay","feedbackTemplate","on_failure","feedback","field","path","fillSite","onFailure","restartFrom","restart_from","previousStepKeys","has","push","code","message","stepId","details","invalidCode","invalidMessage"],"mappings":"AAIA,SAAQA,uBAAuB,QAAO,iCAAiC;AACvE,SAAQC,2BAA2B,QAAO,qCAAqC;AAC/E,SAAQC,KAAK,QAAO,wBAAwB;AAE5C,OAAO,SAASC,kBAAkBC,MASjC;IACC,MAAMC,OAAOD,OAAOE,IAAI,CAACD,IAAI;IAC7B,IAAIA,SAASE,WAAW,OAAOA;IAE/B,MAAMC,UAAUC,qBAAqB;QACnCC,QAAQL,KAAKG,OAAO;QACpBG,YAAYP,OAAOO,UAAU;QAC7BC,WAAWR,OAAOQ,SAAS;QAC3BC,QAAQT,OAAOS,MAAM;QACrBC,sBAAsBV,OAAOU,oBAAoB;QACjDC,aAAaX,OAAOW,WAAW;IACjC;IACA,MAAMC,mBACJX,KAAKY,UAAU,EAAEC,aAAaX,YAC1BA,YACAP,wBAAwB;QACtBmB,OAAO;QACPT,QAAQL,KAAKY,UAAU,CAACC,QAAQ;QAChCE,MAAM;YAAC;YAAQhB,OAAOO,UAAU;YAAE;YAASP,OAAOQ,SAAS;YAAE;YAAQ;SAAa;QAClFC,QAAQT,OAAOS,MAAM;QACrBQ,UAAU;QACVN,aAAaX,OAAOW,WAAW;IACjC;IACN,MAAMO,YACJjB,KAAKY,UAAU,KAAKV,YAChBA,YACA;QACEgB,aAAalB,KAAKY,UAAU,CAACO,YAAY;QACzC,GAAInB,KAAKY,UAAU,CAACC,QAAQ,KAAKX,YAAY,CAAC,IAAI;YAACW,UAAUb,KAAKY,UAAU,CAACC,QAAQ;QAAA,CAAC;QACtF,GAAIF,qBAAqBT,YAAY,CAAC,IAAI;YAACS;QAAgB,CAAC;IAC9D;IAEN,IAAIX,KAAKY,UAAU,KAAKV,aAAa,CAACH,OAAOqB,gBAAgB,CAACC,GAAG,CAACrB,KAAKY,UAAU,CAACO,YAAY,GAAG;QAC/FpB,OAAOS,MAAM,CAACc,IAAI,CAChBzB,MAAM;YACJ0B,MAAM;YACNC,SAAS,CAAC,MAAM,EAAEzB,OAAO0B,MAAM,CAAC,kDAAkD,EAAEzB,KAAKY,UAAU,CAACO,YAAY,CAAC,EAAE,CAAC;YACpHJ,MAAM;gBAAC;gBAAQhB,OAAOO,UAAU;gBAAE;gBAASP,OAAOQ,SAAS;gBAAE;gBAAQ;aAAa;YAClFmB,SAAS;gBAACD,QAAQ1B,OAAO0B,MAAM;gBAAEP,aAAalB,KAAKY,UAAU,CAACO,YAAY;YAAA;QAC5E;IAEJ;IAEA,IAAIhB,YAAYD,aAAae,cAAcf,WAAW,OAAOA;IAE7D,OAAO;QACL,GAAIC,YAAYD,YAAY,CAAC,IAAI;YAACC;QAAO,CAAC;QAC1C,GAAIc,cAAcf,YAAY,CAAC,IAAI;YAACe;QAAS,CAAC;IAChD;AACF;AAEA,SAASb,qBAAqBL,MAO7B;IACC,IAAIA,OAAOM,MAAM,KAAKH,WAAW,OAAOA;IAExC,OAAON,4BAA4B;QACjCkB,OAAO;QACPT,QAAQN,OAAOM,MAAM;QACrBU,MAAM;YAAC;YAAQhB,OAAOO,UAAU;YAAE;YAASP,OAAOQ,SAAS;YAAE;YAAQ;SAAU;QAC/EoB,aAAa;QACbC,gBAAgB;QAChBpB,QAAQT,OAAOS,MAAM;QACrBC,sBAAsBV,OAAOU,oBAAoB;QACjDC,aAAaX,OAAOW,WAAW;IACjC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-triggers.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/normalize-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AASpF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,4BAA4B,EAAE,GACrC,SAAS,oBAAoB,EAAE,CAiEjC;
|
|
1
|
+
{"version":3,"file":"normalize-triggers.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/normalize-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AASpF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,4BAA4B,EAAE,GACrC,SAAS,oBAAoB,EAAE,CAiEjC;AAiCD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,GAAG,6BAA6B,CAOhC"}
|
|
@@ -105,7 +105,6 @@ function validateTriggerFilter(params) {
|
|
|
105
105
|
validatePredicateExpression({
|
|
106
106
|
field: 'trigger.filter',
|
|
107
107
|
source: trigger.filter,
|
|
108
|
-
site: 'ingest',
|
|
109
108
|
path,
|
|
110
109
|
invalidCode: 'invalid-trigger-filter',
|
|
111
110
|
invalidMessage: 'Trigger filter must be a valid boolean predicate.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/workflow-model/normalize-triggers.ts"],"sourcesContent":["import {triggerSourceConfigSchemas, type WorkflowDocument} from '@shipfox/workflow-document';\nimport type {\n WorkflowModelListeningTrigger,\n WorkflowModelTrigger,\n} from '../entities/workflow-model.js';\nimport {cronTriggerDefaultTimezone, validateCronTrigger} from './cron-trigger.js';\nimport type {WorkflowModelValidationIssue} from './invalid-workflow-model-error.js';\nimport {stableId} from './stable-id.js';\nimport {validatePredicateExpression} from './validate-predicate-expression.js';\nimport {issue} from './validation-issue.js';\n\nconst manualTriggerSource = 'manual';\nconst cronTriggerSource = 'cron';\ntype WorkflowDocumentTrigger = NonNullable<WorkflowDocument['triggers']>[string];\n\nexport function normalizeTriggers(\n document: WorkflowDocument,\n issues: WorkflowModelValidationIssue[],\n): readonly WorkflowModelTrigger[] {\n const triggers = document.triggers ?? {};\n const manualTriggerKeys = Object.entries(triggers)\n .filter(([, trigger]) => trigger.source === manualTriggerSource)\n .map(([sourceKey]) => sourceKey);\n const usedTriggerIds = new Map<string, string>();\n\n if (manualTriggerKeys.length > 1) {\n issues.push(\n issue({\n code: 'multiple-manual-triggers',\n message: `A workflow may declare at most one manual trigger; found ${manualTriggerKeys.length}: ${manualTriggerKeys.join(', ')}.`,\n path: ['triggers'],\n details: {manualTriggerKeys},\n }),\n );\n }\n\n return Object.entries(triggers).flatMap(([sourceKey, trigger]) => {\n const id = stableId(sourceKey);\n const existingSourceKey = usedTriggerIds.get(id);\n if (existingSourceKey !== undefined) {\n issues.push(\n issue({\n code: 'duplicate-trigger-id',\n message: `Trigger keys \"${existingSourceKey}\" and \"${sourceKey}\" resolve to the same stable id \"${id}\".`,\n path: ['triggers', sourceKey],\n details: {id, sourceKeys: [existingSourceKey, sourceKey]},\n }),\n );\n return [];\n }\n usedTriggerIds.set(id, sourceKey);\n\n validateTriggerFilter({sourceKey, trigger, issues});\n\n const normalizedTrigger = normalizeTriggerEntry(trigger);\n if (trigger.source !== cronTriggerSource) {\n return [\n {\n id,\n key: sourceKey,\n ...normalizedTrigger,\n ...(trigger.config === undefined ? {} : {config: trigger.config}),\n },\n ];\n }\n\n const cronConfig = triggerSourceConfigSchemas.cron.parse(trigger.config ?? {});\n const normalizedCronConfig = {\n ...cronConfig,\n timezone: cronConfig.timezone ?? cronTriggerDefaultTimezone,\n };\n\n validateCronTrigger({trigger, config: cronConfig, sourceKey, issues});\n\n return [\n {\n id,\n key: sourceKey,\n ...normalizedTrigger,\n config: normalizedCronConfig,\n },\n ];\n });\n}\n\nfunction validateTriggerFilter(params: {\n sourceKey: string;\n trigger: WorkflowDocumentTrigger;\n issues: WorkflowModelValidationIssue[];\n}): void {\n const {sourceKey, trigger, issues} = params;\n if (trigger.filter === undefined) return;\n\n const path = ['triggers', sourceKey, 'filter'] as const;\n if (trigger.source === manualTriggerSource || trigger.source === cronTriggerSource) {\n issues.push(\n issue({\n code: 'invalid-trigger-filter',\n message: `A ${trigger.source} trigger cannot define a filter because it does not receive an event payload.`,\n path,\n details: {source: trigger.filter, triggerSource: trigger.source},\n }),\n );\n return;\n }\n\n validatePredicateExpression({\n field: 'trigger.filter',\n source: trigger.filter,\n
|
|
1
|
+
{"version":3,"sources":["../../../src/core/workflow-model/normalize-triggers.ts"],"sourcesContent":["import {triggerSourceConfigSchemas, type WorkflowDocument} from '@shipfox/workflow-document';\nimport type {\n WorkflowModelListeningTrigger,\n WorkflowModelTrigger,\n} from '../entities/workflow-model.js';\nimport {cronTriggerDefaultTimezone, validateCronTrigger} from './cron-trigger.js';\nimport type {WorkflowModelValidationIssue} from './invalid-workflow-model-error.js';\nimport {stableId} from './stable-id.js';\nimport {validatePredicateExpression} from './validate-predicate-expression.js';\nimport {issue} from './validation-issue.js';\n\nconst manualTriggerSource = 'manual';\nconst cronTriggerSource = 'cron';\ntype WorkflowDocumentTrigger = NonNullable<WorkflowDocument['triggers']>[string];\n\nexport function normalizeTriggers(\n document: WorkflowDocument,\n issues: WorkflowModelValidationIssue[],\n): readonly WorkflowModelTrigger[] {\n const triggers = document.triggers ?? {};\n const manualTriggerKeys = Object.entries(triggers)\n .filter(([, trigger]) => trigger.source === manualTriggerSource)\n .map(([sourceKey]) => sourceKey);\n const usedTriggerIds = new Map<string, string>();\n\n if (manualTriggerKeys.length > 1) {\n issues.push(\n issue({\n code: 'multiple-manual-triggers',\n message: `A workflow may declare at most one manual trigger; found ${manualTriggerKeys.length}: ${manualTriggerKeys.join(', ')}.`,\n path: ['triggers'],\n details: {manualTriggerKeys},\n }),\n );\n }\n\n return Object.entries(triggers).flatMap(([sourceKey, trigger]) => {\n const id = stableId(sourceKey);\n const existingSourceKey = usedTriggerIds.get(id);\n if (existingSourceKey !== undefined) {\n issues.push(\n issue({\n code: 'duplicate-trigger-id',\n message: `Trigger keys \"${existingSourceKey}\" and \"${sourceKey}\" resolve to the same stable id \"${id}\".`,\n path: ['triggers', sourceKey],\n details: {id, sourceKeys: [existingSourceKey, sourceKey]},\n }),\n );\n return [];\n }\n usedTriggerIds.set(id, sourceKey);\n\n validateTriggerFilter({sourceKey, trigger, issues});\n\n const normalizedTrigger = normalizeTriggerEntry(trigger);\n if (trigger.source !== cronTriggerSource) {\n return [\n {\n id,\n key: sourceKey,\n ...normalizedTrigger,\n ...(trigger.config === undefined ? {} : {config: trigger.config}),\n },\n ];\n }\n\n const cronConfig = triggerSourceConfigSchemas.cron.parse(trigger.config ?? {});\n const normalizedCronConfig = {\n ...cronConfig,\n timezone: cronConfig.timezone ?? cronTriggerDefaultTimezone,\n };\n\n validateCronTrigger({trigger, config: cronConfig, sourceKey, issues});\n\n return [\n {\n id,\n key: sourceKey,\n ...normalizedTrigger,\n config: normalizedCronConfig,\n },\n ];\n });\n}\n\nfunction validateTriggerFilter(params: {\n sourceKey: string;\n trigger: WorkflowDocumentTrigger;\n issues: WorkflowModelValidationIssue[];\n}): void {\n const {sourceKey, trigger, issues} = params;\n if (trigger.filter === undefined) return;\n\n const path = ['triggers', sourceKey, 'filter'] as const;\n if (trigger.source === manualTriggerSource || trigger.source === cronTriggerSource) {\n issues.push(\n issue({\n code: 'invalid-trigger-filter',\n message: `A ${trigger.source} trigger cannot define a filter because it does not receive an event payload.`,\n path,\n details: {source: trigger.filter, triggerSource: trigger.source},\n }),\n );\n return;\n }\n\n validatePredicateExpression({\n field: 'trigger.filter',\n source: trigger.filter,\n path,\n invalidCode: 'invalid-trigger-filter',\n invalidMessage: 'Trigger filter must be a valid boolean predicate.',\n issues,\n });\n}\n\nexport function normalizeTriggerEntry(trigger: {\n readonly source: string;\n readonly event: string;\n readonly with?: Readonly<Record<string, unknown>> | undefined;\n readonly filter?: string | undefined;\n}): WorkflowModelListeningTrigger {\n return {\n source: trigger.source,\n event: trigger.event,\n ...(trigger.with === undefined ? {} : {inputs: trigger.with}),\n ...(trigger.filter === undefined ? {} : {filter: trigger.filter}),\n };\n}\n"],"names":["triggerSourceConfigSchemas","cronTriggerDefaultTimezone","validateCronTrigger","stableId","validatePredicateExpression","issue","manualTriggerSource","cronTriggerSource","normalizeTriggers","document","issues","triggers","manualTriggerKeys","Object","entries","filter","trigger","source","map","sourceKey","usedTriggerIds","Map","length","push","code","message","join","path","details","flatMap","id","existingSourceKey","get","undefined","sourceKeys","set","validateTriggerFilter","normalizedTrigger","normalizeTriggerEntry","key","config","cronConfig","cron","parse","normalizedCronConfig","timezone","params","triggerSource","field","invalidCode","invalidMessage","event","with","inputs"],"mappings":"AAAA,SAAQA,0BAA0B,QAA8B,6BAA6B;AAK7F,SAAQC,0BAA0B,EAAEC,mBAAmB,QAAO,oBAAoB;AAElF,SAAQC,QAAQ,QAAO,iBAAiB;AACxC,SAAQC,2BAA2B,QAAO,qCAAqC;AAC/E,SAAQC,KAAK,QAAO,wBAAwB;AAE5C,MAAMC,sBAAsB;AAC5B,MAAMC,oBAAoB;AAG1B,OAAO,SAASC,kBACdC,QAA0B,EAC1BC,MAAsC;IAEtC,MAAMC,WAAWF,SAASE,QAAQ,IAAI,CAAC;IACvC,MAAMC,oBAAoBC,OAAOC,OAAO,CAACH,UACtCI,MAAM,CAAC,CAAC,GAAGC,QAAQ,GAAKA,QAAQC,MAAM,KAAKX,qBAC3CY,GAAG,CAAC,CAAC,CAACC,UAAU,GAAKA;IACxB,MAAMC,iBAAiB,IAAIC;IAE3B,IAAIT,kBAAkBU,MAAM,GAAG,GAAG;QAChCZ,OAAOa,IAAI,CACTlB,MAAM;YACJmB,MAAM;YACNC,SAAS,CAAC,yDAAyD,EAAEb,kBAAkBU,MAAM,CAAC,EAAE,EAAEV,kBAAkBc,IAAI,CAAC,MAAM,CAAC,CAAC;YACjIC,MAAM;gBAAC;aAAW;YAClBC,SAAS;gBAAChB;YAAiB;QAC7B;IAEJ;IAEA,OAAOC,OAAOC,OAAO,CAACH,UAAUkB,OAAO,CAAC,CAAC,CAACV,WAAWH,QAAQ;QAC3D,MAAMc,KAAK3B,SAASgB;QACpB,MAAMY,oBAAoBX,eAAeY,GAAG,CAACF;QAC7C,IAAIC,sBAAsBE,WAAW;YACnCvB,OAAOa,IAAI,CACTlB,MAAM;gBACJmB,MAAM;gBACNC,SAAS,CAAC,cAAc,EAAEM,kBAAkB,OAAO,EAAEZ,UAAU,iCAAiC,EAAEW,GAAG,EAAE,CAAC;gBACxGH,MAAM;oBAAC;oBAAYR;iBAAU;gBAC7BS,SAAS;oBAACE;oBAAII,YAAY;wBAACH;wBAAmBZ;qBAAU;gBAAA;YAC1D;YAEF,OAAO,EAAE;QACX;QACAC,eAAee,GAAG,CAACL,IAAIX;QAEvBiB,sBAAsB;YAACjB;YAAWH;YAASN;QAAM;QAEjD,MAAM2B,oBAAoBC,sBAAsBtB;QAChD,IAAIA,QAAQC,MAAM,KAAKV,mBAAmB;YACxC,OAAO;gBACL;oBACEuB;oBACAS,KAAKpB;oBACL,GAAGkB,iBAAiB;oBACpB,GAAIrB,QAAQwB,MAAM,KAAKP,YAAY,CAAC,IAAI;wBAACO,QAAQxB,QAAQwB,MAAM;oBAAA,CAAC;gBAClE;aACD;QACH;QAEA,MAAMC,aAAazC,2BAA2B0C,IAAI,CAACC,KAAK,CAAC3B,QAAQwB,MAAM,IAAI,CAAC;QAC5E,MAAMI,uBAAuB;YAC3B,GAAGH,UAAU;YACbI,UAAUJ,WAAWI,QAAQ,IAAI5C;QACnC;QAEAC,oBAAoB;YAACc;YAASwB,QAAQC;YAAYtB;YAAWT;QAAM;QAEnE,OAAO;YACL;gBACEoB;gBACAS,KAAKpB;gBACL,GAAGkB,iBAAiB;gBACpBG,QAAQI;YACV;SACD;IACH;AACF;AAEA,SAASR,sBAAsBU,MAI9B;IACC,MAAM,EAAC3B,SAAS,EAAEH,OAAO,EAAEN,MAAM,EAAC,GAAGoC;IACrC,IAAI9B,QAAQD,MAAM,KAAKkB,WAAW;IAElC,MAAMN,OAAO;QAAC;QAAYR;QAAW;KAAS;IAC9C,IAAIH,QAAQC,MAAM,KAAKX,uBAAuBU,QAAQC,MAAM,KAAKV,mBAAmB;QAClFG,OAAOa,IAAI,CACTlB,MAAM;YACJmB,MAAM;YACNC,SAAS,CAAC,EAAE,EAAET,QAAQC,MAAM,CAAC,6EAA6E,CAAC;YAC3GU;YACAC,SAAS;gBAACX,QAAQD,QAAQD,MAAM;gBAAEgC,eAAe/B,QAAQC,MAAM;YAAA;QACjE;QAEF;IACF;IAEAb,4BAA4B;QAC1B4C,OAAO;QACP/B,QAAQD,QAAQD,MAAM;QACtBY;QACAsB,aAAa;QACbC,gBAAgB;QAChBxC;IACF;AACF;AAEA,OAAO,SAAS4B,sBAAsBtB,OAKrC;IACC,OAAO;QACLC,QAAQD,QAAQC,MAAM;QACtBkC,OAAOnC,QAAQmC,KAAK;QACpB,GAAInC,QAAQoC,IAAI,KAAKnB,YAAY,CAAC,IAAI;YAACoB,QAAQrC,QAAQoC,IAAI;QAAA,CAAC;QAC5D,GAAIpC,QAAQD,MAAM,KAAKkB,YAAY,CAAC,IAAI;YAAClB,QAAQC,QAAQD,MAAM;QAAA,CAAC;IAClE;AACF"}
|
|
@@ -2,10 +2,13 @@ import type { AgentValidationCatalog } from '@shipfox/api-agent-dto/inter-module
|
|
|
2
2
|
import type { WorkflowDocument } from '@shipfox/workflow-document';
|
|
3
3
|
import type { IntegrationValidationContext } from '../entities/integration-context.js';
|
|
4
4
|
import type { WorkflowModel, WorkflowStepSourceLocationMap } from '../entities/workflow-model.js';
|
|
5
|
+
import { type WorkflowModelValidationIssue } from './invalid-workflow-model-error.js';
|
|
5
6
|
export declare function normalizeWorkflowDocument(document: WorkflowDocument, options: {
|
|
6
7
|
defaultRunnerLabels?: readonly string[] | undefined;
|
|
7
8
|
agentValidationCatalog: AgentValidationCatalog;
|
|
8
9
|
integrationValidationContext?: IntegrationValidationContext | undefined;
|
|
9
10
|
stepSourceLocations?: WorkflowStepSourceLocationMap | undefined;
|
|
11
|
+
/** Provide a fresh array for each call to collect non-fatal validation issues. */
|
|
12
|
+
warnings?: WorkflowModelValidationIssue[] | undefined;
|
|
10
13
|
}): WorkflowModel;
|
|
11
14
|
//# sourceMappingURL=normalize-workflow-document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-workflow-document.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/normalize-workflow-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,oCAAoC,CAAC;AACrF,OAAO,KAAK,EAAC,aAAa,EAAE,6BAA6B,EAAC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize-workflow-document.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/normalize-workflow-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,oCAAoC,CAAC;AACrF,OAAO,KAAK,EAAC,aAAa,EAAE,6BAA6B,EAAC,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,mCAAmC,CAAC;AAS3C,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE;IACP,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACpD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,4BAA4B,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACxE,mBAAmB,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAChE,kFAAkF;IAClF,QAAQ,CAAC,EAAE,4BAA4B,EAAE,GAAG,SAAS,CAAC;CACvD,GACA,aAAa,CAuDf"}
|
|
@@ -5,6 +5,8 @@ import { normalizeDependencies, validateCycles } from './normalize-dependencies.
|
|
|
5
5
|
import { normalizeEnv } from './normalize-env.js';
|
|
6
6
|
import { normalizeJobs } from './normalize-jobs.js';
|
|
7
7
|
import { normalizeTriggers } from './normalize-triggers.js';
|
|
8
|
+
import { parseInterpolationField } from './parse-interpolation-field.js';
|
|
9
|
+
import { unescapeLiteralName, validateLiteralName } from './validate-literal-name.js';
|
|
8
10
|
export function normalizeWorkflowDocument(document, options) {
|
|
9
11
|
const issues = [];
|
|
10
12
|
const defaultRunnerLabels = canonicalizeLabels(options.defaultRunnerLabels);
|
|
@@ -13,6 +15,16 @@ export function normalizeWorkflowDocument(document, options) {
|
|
|
13
15
|
agentValidationCatalog: options.agentValidationCatalog,
|
|
14
16
|
integrationValidationContext: options.integrationValidationContext
|
|
15
17
|
};
|
|
18
|
+
validateLiteralName({
|
|
19
|
+
field: 'workflow.name',
|
|
20
|
+
dynamicField: 'run_name',
|
|
21
|
+
source: document.name,
|
|
22
|
+
path: [
|
|
23
|
+
'name'
|
|
24
|
+
],
|
|
25
|
+
message: 'Workflow name must be literal. Move runtime interpolation to run_name.',
|
|
26
|
+
issues
|
|
27
|
+
});
|
|
16
28
|
const jobIdBySourceName = mapJobIds(document, issues);
|
|
17
29
|
const triggers = normalizeTriggers(document, issues);
|
|
18
30
|
const jobs = normalizeJobs(document, jobIdBySourceName, issues, options.stepSourceLocations, context);
|
|
@@ -24,13 +36,31 @@ export function normalizeWorkflowDocument(document, options) {
|
|
|
24
36
|
],
|
|
25
37
|
issues
|
|
26
38
|
});
|
|
39
|
+
const runName = document.run_name === undefined ? undefined : parseInterpolationField({
|
|
40
|
+
field: 'workflow.run_name',
|
|
41
|
+
source: document.run_name,
|
|
42
|
+
path: [
|
|
43
|
+
'run_name'
|
|
44
|
+
],
|
|
45
|
+
issues,
|
|
46
|
+
fillSite: 'run-creation'
|
|
47
|
+
}) ?? [
|
|
48
|
+
{
|
|
49
|
+
kind: 'literal',
|
|
50
|
+
value: document.run_name
|
|
51
|
+
}
|
|
52
|
+
];
|
|
27
53
|
validateCycles(document.jobs, jobIdBySourceName, issues);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
54
|
+
const warnings = issues.filter((issue)=>issue.severity === 'warning');
|
|
55
|
+
options.warnings?.push(...warnings);
|
|
56
|
+
const errors = issues.filter((issue)=>issue.severity !== 'warning');
|
|
57
|
+
if (errors.length > 0) throw new InvalidWorkflowModelError(errors);
|
|
31
58
|
return {
|
|
32
59
|
kind: 'workflow',
|
|
33
|
-
name: document.name,
|
|
60
|
+
name: unescapeLiteralName(document.name),
|
|
61
|
+
...runName === undefined ? {} : {
|
|
62
|
+
runName
|
|
63
|
+
},
|
|
34
64
|
...workflowEnv,
|
|
35
65
|
triggers,
|
|
36
66
|
jobs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/workflow-model/normalize-workflow-document.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {canonicalizeLabels} from '@shipfox/runner-labels';\nimport type {WorkflowDocument} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {WorkflowModel, WorkflowStepSourceLocationMap} from '../entities/workflow-model.js';\nimport {\n InvalidWorkflowModelError,\n type WorkflowModelValidationIssue,\n} from './invalid-workflow-model-error.js';\nimport {mapJobIds} from './map-job-ids.js';\nimport {normalizeDependencies, validateCycles} from './normalize-dependencies.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeJobs} from './normalize-jobs.js';\nimport {normalizeTriggers} from './normalize-triggers.js';\n\nexport function normalizeWorkflowDocument(\n document: WorkflowDocument,\n options: {\n defaultRunnerLabels?: readonly string[] | undefined;\n agentValidationCatalog: AgentValidationCatalog;\n integrationValidationContext?: IntegrationValidationContext | undefined;\n stepSourceLocations?: WorkflowStepSourceLocationMap | undefined;\n },\n): WorkflowModel {\n const issues: WorkflowModelValidationIssue[] = [];\n const defaultRunnerLabels = canonicalizeLabels(options.defaultRunnerLabels);\n const context = {\n defaultRunnerLabels,\n agentValidationCatalog: options.agentValidationCatalog,\n integrationValidationContext: options.integrationValidationContext,\n };\n const jobIdBySourceName = mapJobIds(document, issues);\n const triggers = normalizeTriggers(document, issues);\n const jobs = normalizeJobs(\n document,\n jobIdBySourceName,\n issues,\n options.stepSourceLocations,\n context,\n );\n const dependencies = normalizeDependencies(document.jobs, jobIdBySourceName, issues);\n const workflowEnv = normalizeEnv({env: document.env, path: ['env'], issues});\n\n validateCycles(document.jobs, jobIdBySourceName, issues);\n\n
|
|
1
|
+
{"version":3,"sources":["../../../src/core/workflow-model/normalize-workflow-document.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {canonicalizeLabels} from '@shipfox/runner-labels';\nimport type {WorkflowDocument} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {WorkflowModel, WorkflowStepSourceLocationMap} from '../entities/workflow-model.js';\nimport {\n InvalidWorkflowModelError,\n type WorkflowModelValidationIssue,\n} from './invalid-workflow-model-error.js';\nimport {mapJobIds} from './map-job-ids.js';\nimport {normalizeDependencies, validateCycles} from './normalize-dependencies.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeJobs} from './normalize-jobs.js';\nimport {normalizeTriggers} from './normalize-triggers.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {unescapeLiteralName, validateLiteralName} from './validate-literal-name.js';\n\nexport function normalizeWorkflowDocument(\n document: WorkflowDocument,\n options: {\n defaultRunnerLabels?: readonly string[] | undefined;\n agentValidationCatalog: AgentValidationCatalog;\n integrationValidationContext?: IntegrationValidationContext | undefined;\n stepSourceLocations?: WorkflowStepSourceLocationMap | undefined;\n /** Provide a fresh array for each call to collect non-fatal validation issues. */\n warnings?: WorkflowModelValidationIssue[] | undefined;\n },\n): WorkflowModel {\n const issues: WorkflowModelValidationIssue[] = [];\n const defaultRunnerLabels = canonicalizeLabels(options.defaultRunnerLabels);\n const context = {\n defaultRunnerLabels,\n agentValidationCatalog: options.agentValidationCatalog,\n integrationValidationContext: options.integrationValidationContext,\n };\n validateLiteralName({\n field: 'workflow.name',\n dynamicField: 'run_name',\n source: document.name,\n path: ['name'],\n message: 'Workflow name must be literal. Move runtime interpolation to run_name.',\n issues,\n });\n const jobIdBySourceName = mapJobIds(document, issues);\n const triggers = normalizeTriggers(document, issues);\n const jobs = normalizeJobs(\n document,\n jobIdBySourceName,\n issues,\n options.stepSourceLocations,\n context,\n );\n const dependencies = normalizeDependencies(document.jobs, jobIdBySourceName, issues);\n const workflowEnv = normalizeEnv({env: document.env, path: ['env'], issues});\n const runName =\n document.run_name === undefined\n ? undefined\n : (parseInterpolationField({\n field: 'workflow.run_name',\n source: document.run_name,\n path: ['run_name'],\n issues,\n fillSite: 'run-creation',\n }) ?? [{kind: 'literal' as const, value: document.run_name}]);\n\n validateCycles(document.jobs, jobIdBySourceName, issues);\n\n const warnings = issues.filter((issue) => issue.severity === 'warning');\n options.warnings?.push(...warnings);\n\n const errors = issues.filter((issue) => issue.severity !== 'warning');\n if (errors.length > 0) throw new InvalidWorkflowModelError(errors);\n\n return {\n kind: 'workflow',\n name: unescapeLiteralName(document.name),\n ...(runName === undefined ? {} : {runName}),\n ...workflowEnv,\n triggers,\n jobs,\n dependencies,\n };\n}\n"],"names":["canonicalizeLabels","InvalidWorkflowModelError","mapJobIds","normalizeDependencies","validateCycles","normalizeEnv","normalizeJobs","normalizeTriggers","parseInterpolationField","unescapeLiteralName","validateLiteralName","normalizeWorkflowDocument","document","options","issues","defaultRunnerLabels","context","agentValidationCatalog","integrationValidationContext","field","dynamicField","source","name","path","message","jobIdBySourceName","triggers","jobs","stepSourceLocations","dependencies","workflowEnv","env","runName","run_name","undefined","fillSite","kind","value","warnings","filter","issue","severity","push","errors","length"],"mappings":"AACA,SAAQA,kBAAkB,QAAO,yBAAyB;AAI1D,SACEC,yBAAyB,QAEpB,oCAAoC;AAC3C,SAAQC,SAAS,QAAO,mBAAmB;AAC3C,SAAQC,qBAAqB,EAAEC,cAAc,QAAO,8BAA8B;AAClF,SAAQC,YAAY,QAAO,qBAAqB;AAChD,SAAQC,aAAa,QAAO,sBAAsB;AAClD,SAAQC,iBAAiB,QAAO,0BAA0B;AAC1D,SAAQC,uBAAuB,QAAO,iCAAiC;AACvE,SAAQC,mBAAmB,EAAEC,mBAAmB,QAAO,6BAA6B;AAEpF,OAAO,SAASC,0BACdC,QAA0B,EAC1BC,OAOC;IAED,MAAMC,SAAyC,EAAE;IACjD,MAAMC,sBAAsBf,mBAAmBa,QAAQE,mBAAmB;IAC1E,MAAMC,UAAU;QACdD;QACAE,wBAAwBJ,QAAQI,sBAAsB;QACtDC,8BAA8BL,QAAQK,4BAA4B;IACpE;IACAR,oBAAoB;QAClBS,OAAO;QACPC,cAAc;QACdC,QAAQT,SAASU,IAAI;QACrBC,MAAM;YAAC;SAAO;QACdC,SAAS;QACTV;IACF;IACA,MAAMW,oBAAoBvB,UAAUU,UAAUE;IAC9C,MAAMY,WAAWnB,kBAAkBK,UAAUE;IAC7C,MAAMa,OAAOrB,cACXM,UACAa,mBACAX,QACAD,QAAQe,mBAAmB,EAC3BZ;IAEF,MAAMa,eAAe1B,sBAAsBS,SAASe,IAAI,EAAEF,mBAAmBX;IAC7E,MAAMgB,cAAczB,aAAa;QAAC0B,KAAKnB,SAASmB,GAAG;QAAER,MAAM;YAAC;SAAM;QAAET;IAAM;IAC1E,MAAMkB,UACJpB,SAASqB,QAAQ,KAAKC,YAClBA,YACC1B,wBAAwB;QACvBW,OAAO;QACPE,QAAQT,SAASqB,QAAQ;QACzBV,MAAM;YAAC;SAAW;QAClBT;QACAqB,UAAU;IACZ,MAAM;QAAC;YAACC,MAAM;YAAoBC,OAAOzB,SAASqB,QAAQ;QAAA;KAAE;IAElE7B,eAAeQ,SAASe,IAAI,EAAEF,mBAAmBX;IAEjD,MAAMwB,WAAWxB,OAAOyB,MAAM,CAAC,CAACC,QAAUA,MAAMC,QAAQ,KAAK;IAC7D5B,QAAQyB,QAAQ,EAAEI,QAAQJ;IAE1B,MAAMK,SAAS7B,OAAOyB,MAAM,CAAC,CAACC,QAAUA,MAAMC,QAAQ,KAAK;IAC3D,IAAIE,OAAOC,MAAM,GAAG,GAAG,MAAM,IAAI3C,0BAA0B0C;IAE3D,OAAO;QACLP,MAAM;QACNd,MAAMb,oBAAoBG,SAASU,IAAI;QACvC,GAAIU,YAAYE,YAAY,CAAC,IAAI;YAACF;QAAO,CAAC;QAC1C,GAAGF,WAAW;QACdJ;QACAC;QACAE;IACF;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AvailabilitySite, type ExpressionTypeEnvironment } from '@shipfox/expression';
|
|
2
2
|
import type { WorkflowFieldTemplate } from '../entities/workflow-model.js';
|
|
3
3
|
import type { WorkflowModelValidationIssue, WorkflowModelValidationIssuePathSegment } from './invalid-workflow-model-error.js';
|
|
4
|
-
export type StoredInterpolationField = 'run' | 'env.value' | 'agent.prompt' | 'agent.model' | 'agent.provider' | 'job.outputs' | 'job.
|
|
4
|
+
export type StoredInterpolationField = 'run' | 'env.value' | 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking' | 'job.outputs' | 'workflow.run_name' | 'job.execution_name' | 'job.runner' | 'step.name' | 'step.working_directory' | 'step.feedback' | 'checkout.project' | 'checkout.connection' | 'checkout.repository' | 'checkout.ref' | 'checkout.path';
|
|
5
5
|
export declare function parseInterpolationField(params: {
|
|
6
6
|
field: StoredInterpolationField;
|
|
7
7
|
source: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-interpolation-field.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/parse-interpolation-field.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"parse-interpolation-field.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/parse-interpolation-field.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EAIrB,KAAK,yBAAyB,EAkB/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EACV,4BAA4B,EAE5B,uCAAuC,EACxC,MAAM,mCAAmC,CAAC;AAG3C,MAAM,MAAM,wBAAwB,GAChC,KAAK,GACL,WAAW,GACX,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,YAAY,GACZ,WAAW,GACX,wBAAwB,GACxB,eAAe,GACf,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,cAAc,GACd,eAAe,CAAC;AAEpB,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,KAAK,EAAE,wBAAwB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,uCAAuC,EAAE,CAAC;IACzD,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;CACrD,GAAG,qBAAqB,GAAG,SAAS,CAuBpC"}
|