@shipfox/api-definitions 7.1.0 → 8.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.
Files changed (93) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +14 -0
  3. package/dist/config.d.ts +0 -4
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -14
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/index.d.ts +1 -1
  8. package/dist/core/index.d.ts.map +1 -1
  9. package/dist/core/index.js.map +1 -1
  10. package/dist/core/integrations.d.ts +1 -1
  11. package/dist/core/integrations.d.ts.map +1 -1
  12. package/dist/core/integrations.js +1 -1
  13. package/dist/core/integrations.js.map +1 -1
  14. package/dist/core/parse-definition.d.ts +3 -3
  15. package/dist/core/parse-definition.d.ts.map +1 -1
  16. package/dist/core/parse-definition.js.map +1 -1
  17. package/dist/core/sync-definitions.d.ts +2 -0
  18. package/dist/core/sync-definitions.d.ts.map +1 -1
  19. package/dist/core/sync-definitions.js +9 -3
  20. package/dist/core/sync-definitions.js.map +1 -1
  21. package/dist/core/validate-definition.d.ts +3 -3
  22. package/dist/core/validate-definition.d.ts.map +1 -1
  23. package/dist/core/validate-definition.js +3 -3
  24. package/dist/core/validate-definition.js.map +1 -1
  25. package/dist/core/workflow-model/normalize-jobs.d.ts +2 -2
  26. package/dist/core/workflow-model/normalize-jobs.d.ts.map +1 -1
  27. package/dist/core/workflow-model/normalize-jobs.js +9 -11
  28. package/dist/core/workflow-model/normalize-jobs.js.map +1 -1
  29. package/dist/core/workflow-model/normalize-workflow-document.d.ts +3 -3
  30. package/dist/core/workflow-model/normalize-workflow-document.d.ts.map +1 -1
  31. package/dist/core/workflow-model/normalize-workflow-document.js +2 -4
  32. package/dist/core/workflow-model/normalize-workflow-document.js.map +1 -1
  33. package/dist/index.d.ts +5 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +3 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/presentation/routes/create-definition.d.ts +4 -2
  38. package/dist/presentation/routes/create-definition.d.ts.map +1 -1
  39. package/dist/presentation/routes/create-definition.js +5 -1
  40. package/dist/presentation/routes/create-definition.js.map +1 -1
  41. package/dist/presentation/routes/get-definition.d.ts +1 -1
  42. package/dist/presentation/routes/get-definition.d.ts.map +1 -1
  43. package/dist/presentation/routes/get-definition.js.map +1 -1
  44. package/dist/presentation/routes/index.js +2 -2
  45. package/dist/presentation/routes/index.js.map +1 -1
  46. package/dist/presentation/routes/list-definitions.d.ts +1 -1
  47. package/dist/presentation/routes/list-definitions.d.ts.map +1 -1
  48. package/dist/presentation/routes/list-definitions.js.map +1 -1
  49. package/dist/presentation/routes/project-access.d.ts +1 -1
  50. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  51. package/dist/presentation/routes/project-access.js.map +1 -1
  52. package/dist/presentation/routes/validate-definition.d.ts +2 -1
  53. package/dist/presentation/routes/validate-definition.d.ts.map +1 -1
  54. package/dist/presentation/routes/validate-definition.js +26 -22
  55. package/dist/presentation/routes/validate-definition.js.map +1 -1
  56. package/dist/temporal/activities/sync-activities.d.ts +3 -2
  57. package/dist/temporal/activities/sync-activities.d.ts.map +1 -1
  58. package/dist/temporal/activities/sync-activities.js +4 -3
  59. package/dist/temporal/activities/sync-activities.js.map +1 -1
  60. package/dist/tsconfig.test.tsbuildinfo +1 -1
  61. package/package.json +4 -4
  62. package/src/config.ts +1 -19
  63. package/src/core/index.ts +4 -1
  64. package/src/core/integrations.ts +1 -1
  65. package/src/core/parse-definition.test.ts +6 -1
  66. package/src/core/parse-definition.ts +3 -3
  67. package/src/core/sync-definitions.test.ts +9 -2
  68. package/src/core/sync-definitions.ts +13 -6
  69. package/src/core/validate-definition.test.ts +18 -4
  70. package/src/core/validate-definition.ts +5 -6
  71. package/src/core/workflow-model/normalize-jobs.ts +22 -23
  72. package/src/core/workflow-model/normalize-workflow-document.test.ts +37 -18
  73. package/src/core/workflow-model/normalize-workflow-document.ts +4 -9
  74. package/src/db/definitions.test.ts +2 -1
  75. package/src/db/schema/definitions.test.ts +2 -1
  76. package/src/index.ts +7 -4
  77. package/src/presentation/dto/definition.test.ts +2 -1
  78. package/src/presentation/routes/create-definition.test.ts +10 -3
  79. package/src/presentation/routes/create-definition.ts +7 -3
  80. package/src/presentation/routes/get-definition.test.ts +1 -1
  81. package/src/presentation/routes/get-definition.ts +1 -1
  82. package/src/presentation/routes/index.test.ts +6 -2
  83. package/src/presentation/routes/index.ts +2 -2
  84. package/src/presentation/routes/list-definitions.test.ts +1 -1
  85. package/src/presentation/routes/list-definitions.ts +1 -1
  86. package/src/presentation/routes/project-access.ts +1 -1
  87. package/src/presentation/routes/validate-definition.test.ts +8 -2
  88. package/src/presentation/routes/validate-definition.ts +27 -22
  89. package/src/temporal/activities/sync-activities.test.ts +14 -8
  90. package/src/temporal/activities/sync-activities.ts +10 -2
  91. package/test/agent-validation-catalog.ts +25 -0
  92. package/test/factories/definition.ts +2 -1
  93. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/workflow-model/normalize-jobs.ts"],"sourcesContent":["import {\n agentThinkingByHarness,\n getHarnessDescriptor,\n getModelProviderEntry,\n type HarnessToolDeploymentConfig,\n listEnabledHarnessTools,\n} from '@shipfox/api-agent-dto';\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 harnessToolDeploymentConfig: HarnessToolDeploymentConfig;\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 harnessToolDeploymentConfig: params.context.harnessToolDeploymentConfig,\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 harnessToolDeploymentConfig: HarnessToolDeploymentConfig;\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 = getModelProviderEntry(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 = getHarnessDescriptor(harness);\n if (descriptor.supportedProviderIds.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.supportedProviderIds.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {harness, provider: providerId, supportedProviders: descriptor.supportedProviderIds},\n }),\n );\n}\n\nfunction validateHarnessTools(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n harnessToolDeploymentConfig: HarnessToolDeploymentConfig;\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 = listEnabledHarnessTools(harness, params.harnessToolDeploymentConfig).map(\n (tool) => tool.name,\n );\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}): void {\n const {harness, thinking} = params.step;\n if (harness === undefined || thinking === undefined) return;\n\n const thinkingSchema = agentThinkingByHarness[harness];\n if (thinkingSchema.safeParse(thinking).success) return;\n\n const supportedLevels = thinkingSchema.options;\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":["agentThinkingByHarness","getHarnessDescriptor","getModelProviderEntry","listEnabledHarnessTools","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","harnessToolDeploymentConfig","integrations","integrationValidationContext","optionalAgentStepTemplates","harness","thinking","tools","validateHarnessThinking","validateHarnessTools","providerId","support_status","descriptor","supportedProviderIds","includes","join","supportedProviders","supportedTools","tool","supportedToolSet","forEach","toolIndex","thinkingSchema","safeParse","supportedLevels","options","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 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,10 +1,10 @@
1
- import { type HarnessToolDeploymentConfig } from '@shipfox/api-agent-dto';
1
+ 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
- export declare function normalizeWorkflowDocument(document: WorkflowDocument, options?: {
5
+ export declare function normalizeWorkflowDocument(document: WorkflowDocument, options: {
6
6
  defaultRunnerLabels?: readonly string[] | undefined;
7
- harnessToolDeploymentConfig?: HarnessToolDeploymentConfig | undefined;
7
+ agentValidationCatalog: AgentValidationCatalog;
8
8
  integrationValidationContext?: IntegrationValidationContext | undefined;
9
9
  stepSourceLocations?: WorkflowStepSourceLocationMap | undefined;
10
10
  }): WorkflowModel;
@@ -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,EAEL,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAEhC,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;AAWhG,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACpD,2BAA2B,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACtE,4BAA4B,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACxE,mBAAmB,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;CAC5D,GACL,aAAa,CAoCf"}
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;AAWhG,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;CACjE,GACA,aAAa,CAkCf"}
@@ -1,4 +1,3 @@
1
- import { DEFAULT_HARNESS_TOOL_DEPLOYMENT_CONFIG } from '@shipfox/api-agent-dto';
2
1
  import { canonicalizeLabels } from '@shipfox/runner-labels';
3
2
  import { InvalidWorkflowModelError } from './invalid-workflow-model-error.js';
4
3
  import { mapJobIds } from './map-job-ids.js';
@@ -6,13 +5,12 @@ import { normalizeDependencies, validateCycles } from './normalize-dependencies.
6
5
  import { normalizeEnv } from './normalize-env.js';
7
6
  import { normalizeJobs } from './normalize-jobs.js';
8
7
  import { normalizeTriggers } from './normalize-triggers.js';
9
- export function normalizeWorkflowDocument(document, options = {}) {
8
+ export function normalizeWorkflowDocument(document, options) {
10
9
  const issues = [];
11
10
  const defaultRunnerLabels = canonicalizeLabels(options.defaultRunnerLabels);
12
- const harnessToolDeploymentConfig = options.harnessToolDeploymentConfig ?? DEFAULT_HARNESS_TOOL_DEPLOYMENT_CONFIG;
13
11
  const context = {
14
12
  defaultRunnerLabels,
15
- harnessToolDeploymentConfig,
13
+ agentValidationCatalog: options.agentValidationCatalog,
16
14
  integrationValidationContext: options.integrationValidationContext
17
15
  };
18
16
  const jobIdBySourceName = mapJobIds(document, issues);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/workflow-model/normalize-workflow-document.ts"],"sourcesContent":["import {\n DEFAULT_HARNESS_TOOL_DEPLOYMENT_CONFIG,\n type HarnessToolDeploymentConfig,\n} from '@shipfox/api-agent-dto';\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 harnessToolDeploymentConfig?: HarnessToolDeploymentConfig | undefined;\n integrationValidationContext?: IntegrationValidationContext | undefined;\n stepSourceLocations?: WorkflowStepSourceLocationMap | undefined;\n } = {},\n): WorkflowModel {\n const issues: WorkflowModelValidationIssue[] = [];\n const defaultRunnerLabels = canonicalizeLabels(options.defaultRunnerLabels);\n const harnessToolDeploymentConfig =\n options.harnessToolDeploymentConfig ?? DEFAULT_HARNESS_TOOL_DEPLOYMENT_CONFIG;\n const context = {\n defaultRunnerLabels,\n harnessToolDeploymentConfig,\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 if (issues.length > 0) {\n throw new InvalidWorkflowModelError(issues);\n }\n\n return {\n kind: 'workflow',\n name: document.name,\n ...workflowEnv,\n triggers,\n jobs,\n dependencies,\n };\n}\n"],"names":["DEFAULT_HARNESS_TOOL_DEPLOYMENT_CONFIG","canonicalizeLabels","InvalidWorkflowModelError","mapJobIds","normalizeDependencies","validateCycles","normalizeEnv","normalizeJobs","normalizeTriggers","normalizeWorkflowDocument","document","options","issues","defaultRunnerLabels","harnessToolDeploymentConfig","context","integrationValidationContext","jobIdBySourceName","triggers","jobs","stepSourceLocations","dependencies","workflowEnv","env","path","length","kind","name"],"mappings":"AAAA,SACEA,sCAAsC,QAEjC,yBAAyB;AAChC,SAAQC,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;AAE1D,OAAO,SAASC,0BACdC,QAA0B,EAC1BC,UAKI,CAAC,CAAC;IAEN,MAAMC,SAAyC,EAAE;IACjD,MAAMC,sBAAsBZ,mBAAmBU,QAAQE,mBAAmB;IAC1E,MAAMC,8BACJH,QAAQG,2BAA2B,IAAId;IACzC,MAAMe,UAAU;QACdF;QACAC;QACAE,8BAA8BL,QAAQK,4BAA4B;IACpE;IACA,MAAMC,oBAAoBd,UAAUO,UAAUE;IAC9C,MAAMM,WAAWV,kBAAkBE,UAAUE;IAC7C,MAAMO,OAAOZ,cACXG,UACAO,mBACAL,QACAD,QAAQS,mBAAmB,EAC3BL;IAEF,MAAMM,eAAejB,sBAAsBM,SAASS,IAAI,EAAEF,mBAAmBL;IAC7E,MAAMU,cAAchB,aAAa;QAACiB,KAAKb,SAASa,GAAG;QAAEC,MAAM;YAAC;SAAM;QAAEZ;IAAM;IAE1EP,eAAeK,SAASS,IAAI,EAAEF,mBAAmBL;IAEjD,IAAIA,OAAOa,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIvB,0BAA0BU;IACtC;IAEA,OAAO;QACLc,MAAM;QACNC,MAAMjB,SAASiB,IAAI;QACnB,GAAGL,WAAW;QACdJ;QACAC;QACAE;IACF;AACF"}
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 if (issues.length > 0) {\n throw new InvalidWorkflowModelError(issues);\n }\n\n return {\n kind: 'workflow',\n name: document.name,\n ...workflowEnv,\n triggers,\n jobs,\n dependencies,\n };\n}\n"],"names":["canonicalizeLabels","InvalidWorkflowModelError","mapJobIds","normalizeDependencies","validateCycles","normalizeEnv","normalizeJobs","normalizeTriggers","normalizeWorkflowDocument","document","options","issues","defaultRunnerLabels","context","agentValidationCatalog","integrationValidationContext","jobIdBySourceName","triggers","jobs","stepSourceLocations","dependencies","workflowEnv","env","path","length","kind","name"],"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;AAE1D,OAAO,SAASC,0BACdC,QAA0B,EAC1BC,OAKC;IAED,MAAMC,SAAyC,EAAE;IACjD,MAAMC,sBAAsBZ,mBAAmBU,QAAQE,mBAAmB;IAC1E,MAAMC,UAAU;QACdD;QACAE,wBAAwBJ,QAAQI,sBAAsB;QACtDC,8BAA8BL,QAAQK,4BAA4B;IACpE;IACA,MAAMC,oBAAoBd,UAAUO,UAAUE;IAC9C,MAAMM,WAAWV,kBAAkBE,UAAUE;IAC7C,MAAMO,OAAOZ,cACXG,UACAO,mBACAL,QACAD,QAAQS,mBAAmB,EAC3BN;IAEF,MAAMO,eAAejB,sBAAsBM,SAASS,IAAI,EAAEF,mBAAmBL;IAC7E,MAAMU,cAAchB,aAAa;QAACiB,KAAKb,SAASa,GAAG;QAAEC,MAAM;YAAC;SAAM;QAAEZ;IAAM;IAE1EP,eAAeK,SAASS,IAAI,EAAEF,mBAAmBL;IAEjD,IAAIA,OAAOa,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIvB,0BAA0BU;IACtC;IAEA,OAAO;QACLc,MAAM;QACNC,MAAMjB,SAASiB,IAAI;QACnB,GAAGL,WAAW;QACdJ;QACAC;QACAE;IACF;AACF"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,14 @@
1
- import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
2
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
1
+ import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
2
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
3
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
3
4
  import { type ShipfoxModule } from '@shipfox/node-module';
4
5
  export type { WorkflowDefinition, WorkflowDefinitionPayload, WorkflowEnvTemplates, WorkflowModel, WorkflowModelJobCheckout, WorkflowSourceSnapshot, WorkflowSpec, } from '#core/index.js';
5
6
  export { DEFAULT_JOB_CHECKOUT, DEFAULT_JOB_SUCCESS, DEFAULT_RUN_TIMEOUT_MS, normalizeWorkflowDocument, } from '#core/index.js';
6
7
  export { db, definitionsOutbox, getDefinitionById, migrationsPath } from '#db/index.js';
7
8
  export interface CreateDefinitionsModuleOptions {
8
9
  projects: ProjectsModuleClient;
10
+ agent: AgentInterModuleClient;
9
11
  integrations: IntegrationsModuleClient;
10
12
  }
11
- export declare function createDefinitionsModule({ projects, integrations, }: CreateDefinitionsModuleOptions): ShipfoxModule;
13
+ export declare function createDefinitionsModule({ projects, agent, integrations, }: CreateDefinitionsModuleOptions): ShipfoxModule;
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAMpE,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAY3E,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAOtF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,YAAY,EAAE,wBAAwB,CAAC;CACxC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,YAAY,GACb,EAAE,8BAA8B,GAAG,aAAa,CA4BhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAMhF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAM7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAY3E,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAOtF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,YAAY,EAAE,wBAAwB,CAAC;CACxC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,KAAK,EACL,YAAY,GACb,EAAE,8BAA8B,GAAG,aAAa,CA4BhD"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { db, definitionsOutbox, getDefinitionById, migrationsPath } from '#db/in
15
15
  const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
16
16
  const workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');
17
17
  const subscriber = subscriberFactory();
18
- export function createDefinitionsModule({ projects, integrations }) {
18
+ export function createDefinitionsModule({ projects, agent, integrations }) {
19
19
  const sourceControl = createDefinitionsSourceControl(integrations);
20
20
  return {
21
21
  name: 'definitions',
@@ -25,6 +25,7 @@ export function createDefinitionsModule({ projects, integrations }) {
25
25
  },
26
26
  routes: createDefinitionRoutes({
27
27
  projects,
28
+ agent,
28
29
  integrations
29
30
  }),
30
31
  publishers: [
@@ -49,7 +50,7 @@ export function createDefinitionsModule({ projects, integrations }) {
49
50
  {
50
51
  taskQueue: DEFINITIONS_TASK_QUEUE,
51
52
  workflowsPath,
52
- activities: ()=>createDefinitionSyncActivities(sourceControl, integrations),
53
+ activities: ()=>createDefinitionSyncActivities(sourceControl, agent, integrations),
53
54
  workflows: []
54
55
  }
55
56
  ],
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {\n DEFINITION_RESOLVED,\n type DefinitionsEventMap,\n definitionsEventSchemas,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {\n PROJECT_SOURCE_BOUND,\n PROJECT_SOURCE_COMMIT_OBSERVED,\n type ProjectsEventMap,\n} from '@shipfox/api-projects-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {createDefinitionsSourceControl} from '#core/integrations.js';\nimport {db, definitionsOutbox, migrationsPath} from '#db/index.js';\nimport {createDefinitionRoutes} from '#presentation/index.js';\nimport {createDefinitionsInterModulePresentation} from '#presentation/inter-module.js';\nimport {\n onProjectSourceBound,\n onProjectSourceCommitObserved,\n} from '#presentation/subscribers/index.js';\nimport {createDefinitionSyncActivities, DEFINITIONS_TASK_QUEUE} from '#temporal/index.js';\n\nexport type {\n WorkflowDefinition,\n WorkflowDefinitionPayload,\n WorkflowEnvTemplates,\n WorkflowModel,\n WorkflowModelJobCheckout,\n WorkflowSourceSnapshot,\n WorkflowSpec,\n} from '#core/index.js';\nexport {\n DEFAULT_JOB_CHECKOUT,\n DEFAULT_JOB_SUCCESS,\n DEFAULT_RUN_TIMEOUT_MS,\n normalizeWorkflowDocument,\n} from '#core/index.js';\nexport {db, definitionsOutbox, getDefinitionById, migrationsPath} from '#db/index.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<DefinitionsEventMap & ProjectsEventMap>();\n\nexport interface CreateDefinitionsModuleOptions {\n projects: ProjectsModuleClient;\n integrations: IntegrationsModuleClient;\n}\n\nexport function createDefinitionsModule({\n projects,\n integrations,\n}: CreateDefinitionsModuleOptions): ShipfoxModule {\n const sourceControl = createDefinitionsSourceControl(integrations);\n\n return {\n name: 'definitions',\n database: {db, migrationsPath},\n routes: createDefinitionRoutes({projects, integrations}),\n publishers: [\n {name: 'definitions', table: definitionsOutbox, db, eventSchemas: definitionsEventSchemas},\n ],\n subscribers: [\n subscriber(DEFINITION_RESOLVED, (_payload, event) => {\n logger().info({event}, 'Definition resolved');\n return Promise.resolve();\n }),\n subscriber(PROJECT_SOURCE_BOUND, onProjectSourceBound),\n subscriber(PROJECT_SOURCE_COMMIT_OBSERVED, onProjectSourceCommitObserved),\n ],\n workers: [\n {\n taskQueue: DEFINITIONS_TASK_QUEUE,\n workflowsPath,\n activities: () => createDefinitionSyncActivities(sourceControl, integrations),\n workflows: [],\n },\n ],\n interModulePresentations: [createDefinitionsInterModulePresentation()],\n };\n}\n"],"names":["dirname","resolve","fileURLToPath","DEFINITION_RESOLVED","definitionsEventSchemas","PROJECT_SOURCE_BOUND","PROJECT_SOURCE_COMMIT_OBSERVED","subscriberFactory","logger","createDefinitionsSourceControl","db","definitionsOutbox","migrationsPath","createDefinitionRoutes","createDefinitionsInterModulePresentation","onProjectSourceBound","onProjectSourceCommitObserved","createDefinitionSyncActivities","DEFINITIONS_TASK_QUEUE","DEFAULT_JOB_CHECKOUT","DEFAULT_JOB_SUCCESS","DEFAULT_RUN_TIMEOUT_MS","normalizeWorkflowDocument","getDefinitionById","packageRoot","url","workflowsPath","subscriber","createDefinitionsModule","projects","integrations","sourceControl","name","database","routes","publishers","table","eventSchemas","subscribers","_payload","event","info","Promise","workers","taskQueue","activities","workflows","interModulePresentations"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AACvC,SACEC,mBAAmB,EAEnBC,uBAAuB,QAClB,+BAA+B;AAGtC,SACEC,oBAAoB,EACpBC,8BAA8B,QAEzB,4BAA4B;AACnC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,8BAA8B,QAAO,wBAAwB;AACrE,SAAQC,EAAE,EAAEC,iBAAiB,EAAEC,cAAc,QAAO,eAAe;AACnE,SAAQC,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,wCAAwC,QAAO,gCAAgC;AACvF,SACEC,oBAAoB,EACpBC,6BAA6B,QACxB,qCAAqC;AAC5C,SAAQC,8BAA8B,EAAEC,sBAAsB,QAAO,qBAAqB;AAW1F,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,sBAAsB,EACtBC,yBAAyB,QACpB,iBAAiB;AACxB,SAAQZ,EAAE,EAAEC,iBAAiB,EAAEY,iBAAiB,EAAEX,cAAc,QAAO,eAAe;AAEtF,MAAMY,cAAcvB,QAAQD,QAAQE,cAAc,YAAYuB,GAAG,IAAI;AACrE,MAAMC,gBAAgBzB,QAAQuB,aAAa;AAE3C,MAAMG,aAAapB;AAOnB,OAAO,SAASqB,wBAAwB,EACtCC,QAAQ,EACRC,YAAY,EACmB;IAC/B,MAAMC,gBAAgBtB,+BAA+BqB;IAErD,OAAO;QACLE,MAAM;QACNC,UAAU;YAACvB;YAAIE;QAAc;QAC7BsB,QAAQrB,uBAAuB;YAACgB;YAAUC;QAAY;QACtDK,YAAY;YACV;gBAACH,MAAM;gBAAeI,OAAOzB;gBAAmBD;gBAAI2B,cAAcjC;YAAuB;SAC1F;QACDkC,aAAa;YACXX,WAAWxB,qBAAqB,CAACoC,UAAUC;gBACzChC,SAASiC,IAAI,CAAC;oBAACD;gBAAK,GAAG;gBACvB,OAAOE,QAAQzC,OAAO;YACxB;YACA0B,WAAWtB,sBAAsBU;YACjCY,WAAWrB,gCAAgCU;SAC5C;QACD2B,SAAS;YACP;gBACEC,WAAW1B;gBACXQ;gBACAmB,YAAY,IAAM5B,+BAA+Bc,eAAeD;gBAChEgB,WAAW,EAAE;YACf;SACD;QACDC,0BAA0B;YAACjC;SAA2C;IACxE;AACF"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport {\n DEFINITION_RESOLVED,\n type DefinitionsEventMap,\n definitionsEventSchemas,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport {\n PROJECT_SOURCE_BOUND,\n PROJECT_SOURCE_COMMIT_OBSERVED,\n type ProjectsEventMap,\n} from '@shipfox/api-projects-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {createDefinitionsSourceControl} from '#core/integrations.js';\nimport {db, definitionsOutbox, migrationsPath} from '#db/index.js';\nimport {createDefinitionRoutes} from '#presentation/index.js';\nimport {createDefinitionsInterModulePresentation} from '#presentation/inter-module.js';\nimport {\n onProjectSourceBound,\n onProjectSourceCommitObserved,\n} from '#presentation/subscribers/index.js';\nimport {createDefinitionSyncActivities, DEFINITIONS_TASK_QUEUE} from '#temporal/index.js';\n\nexport type {\n WorkflowDefinition,\n WorkflowDefinitionPayload,\n WorkflowEnvTemplates,\n WorkflowModel,\n WorkflowModelJobCheckout,\n WorkflowSourceSnapshot,\n WorkflowSpec,\n} from '#core/index.js';\nexport {\n DEFAULT_JOB_CHECKOUT,\n DEFAULT_JOB_SUCCESS,\n DEFAULT_RUN_TIMEOUT_MS,\n normalizeWorkflowDocument,\n} from '#core/index.js';\nexport {db, definitionsOutbox, getDefinitionById, migrationsPath} from '#db/index.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<DefinitionsEventMap & ProjectsEventMap>();\n\nexport interface CreateDefinitionsModuleOptions {\n projects: ProjectsModuleClient;\n agent: AgentInterModuleClient;\n integrations: IntegrationsModuleClient;\n}\n\nexport function createDefinitionsModule({\n projects,\n agent,\n integrations,\n}: CreateDefinitionsModuleOptions): ShipfoxModule {\n const sourceControl = createDefinitionsSourceControl(integrations);\n\n return {\n name: 'definitions',\n database: {db, migrationsPath},\n routes: createDefinitionRoutes({projects, agent, integrations}),\n publishers: [\n {name: 'definitions', table: definitionsOutbox, db, eventSchemas: definitionsEventSchemas},\n ],\n subscribers: [\n subscriber(DEFINITION_RESOLVED, (_payload, event) => {\n logger().info({event}, 'Definition resolved');\n return Promise.resolve();\n }),\n subscriber(PROJECT_SOURCE_BOUND, onProjectSourceBound),\n subscriber(PROJECT_SOURCE_COMMIT_OBSERVED, onProjectSourceCommitObserved),\n ],\n workers: [\n {\n taskQueue: DEFINITIONS_TASK_QUEUE,\n workflowsPath,\n activities: () => createDefinitionSyncActivities(sourceControl, agent, integrations),\n workflows: [],\n },\n ],\n interModulePresentations: [createDefinitionsInterModulePresentation()],\n };\n}\n"],"names":["dirname","resolve","fileURLToPath","DEFINITION_RESOLVED","definitionsEventSchemas","PROJECT_SOURCE_BOUND","PROJECT_SOURCE_COMMIT_OBSERVED","subscriberFactory","logger","createDefinitionsSourceControl","db","definitionsOutbox","migrationsPath","createDefinitionRoutes","createDefinitionsInterModulePresentation","onProjectSourceBound","onProjectSourceCommitObserved","createDefinitionSyncActivities","DEFINITIONS_TASK_QUEUE","DEFAULT_JOB_CHECKOUT","DEFAULT_JOB_SUCCESS","DEFAULT_RUN_TIMEOUT_MS","normalizeWorkflowDocument","getDefinitionById","packageRoot","url","workflowsPath","subscriber","createDefinitionsModule","projects","agent","integrations","sourceControl","name","database","routes","publishers","table","eventSchemas","subscribers","_payload","event","info","Promise","workers","taskQueue","activities","workflows","interModulePresentations"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SACEC,mBAAmB,EAEnBC,uBAAuB,QAClB,+BAA+B;AAEtC,SACEC,oBAAoB,EACpBC,8BAA8B,QAEzB,4BAA4B;AAEnC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,8BAA8B,QAAO,wBAAwB;AACrE,SAAQC,EAAE,EAAEC,iBAAiB,EAAEC,cAAc,QAAO,eAAe;AACnE,SAAQC,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,wCAAwC,QAAO,gCAAgC;AACvF,SACEC,oBAAoB,EACpBC,6BAA6B,QACxB,qCAAqC;AAC5C,SAAQC,8BAA8B,EAAEC,sBAAsB,QAAO,qBAAqB;AAW1F,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,sBAAsB,EACtBC,yBAAyB,QACpB,iBAAiB;AACxB,SAAQZ,EAAE,EAAEC,iBAAiB,EAAEY,iBAAiB,EAAEX,cAAc,QAAO,eAAe;AAEtF,MAAMY,cAAcvB,QAAQD,QAAQE,cAAc,YAAYuB,GAAG,IAAI;AACrE,MAAMC,gBAAgBzB,QAAQuB,aAAa;AAE3C,MAAMG,aAAapB;AAQnB,OAAO,SAASqB,wBAAwB,EACtCC,QAAQ,EACRC,KAAK,EACLC,YAAY,EACmB;IAC/B,MAAMC,gBAAgBvB,+BAA+BsB;IAErD,OAAO;QACLE,MAAM;QACNC,UAAU;YAACxB;YAAIE;QAAc;QAC7BuB,QAAQtB,uBAAuB;YAACgB;YAAUC;YAAOC;QAAY;QAC7DK,YAAY;YACV;gBAACH,MAAM;gBAAeI,OAAO1B;gBAAmBD;gBAAI4B,cAAclC;YAAuB;SAC1F;QACDmC,aAAa;YACXZ,WAAWxB,qBAAqB,CAACqC,UAAUC;gBACzCjC,SAASkC,IAAI,CAAC;oBAACD;gBAAK,GAAG;gBACvB,OAAOE,QAAQ1C,OAAO;YACxB;YACA0B,WAAWtB,sBAAsBU;YACjCY,WAAWrB,gCAAgCU;SAC5C;QACD4B,SAAS;YACP;gBACEC,WAAW3B;gBACXQ;gBACAoB,YAAY,IAAM7B,+BAA+Be,eAAeF,OAAOC;gBACvEgB,WAAW,EAAE;YACf;SACD;QACDC,0BAA0B;YAAClC;SAA2C;IACxE;AACF"}
@@ -1,7 +1,9 @@
1
- import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
2
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
1
+ import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
2
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
3
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
3
4
  export interface CreateDefinitionRouteOptions {
4
5
  projects: ProjectsModuleClient;
6
+ agent: AgentInterModuleClient;
5
7
  integrations?: IntegrationsModuleClient;
6
8
  }
7
9
  export declare function buildCreateDefinitionRoute(options: CreateDefinitionRouteOptions): import("@shipfox/node-fastify").RouteDefinition;
@@ -1 +1 @@
1
- {"version":3,"file":"create-definition.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/create-definition.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAWpE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,4BAA4B,mDA2D/E"}
1
+ {"version":3,"file":"create-definition.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/create-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAMhF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAWjF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,4BAA4B,mDA6D/E"}
@@ -39,9 +39,13 @@ export function buildCreateDefinitionRoute(options) {
39
39
  handler: async (request)=>{
40
40
  const { project_id: projectId, config_path, source, yaml: yamlString, sha, ref } = request.body;
41
41
  const project = await requireProjectAccess(request, projectId, options.projects);
42
- const structurallyParsed = parseDefinition(yamlString);
42
+ const agentValidationCatalog = await options.agent.getValidationCatalog({});
43
+ const structurallyParsed = parseDefinition(yamlString, {
44
+ agentValidationCatalog
45
+ });
43
46
  const { integrations } = options;
44
47
  const parsed = integrations !== undefined && hasAgentStepIntegrations(structurallyParsed.document) ? parseDefinition(yamlString, {
48
+ agentValidationCatalog,
45
49
  integrationValidationContext: await loadIntegrationValidationContext(integrations, project.workspaceId, project.sourceConnectionId)
46
50
  }) : structurallyParsed;
47
51
  const definition = await upsertDefinition({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/create-definition.ts"],"sourcesContent":["import {\n createDefinitionBodySchema,\n definitionResponseSchema,\n definitionValidationErrorSchema,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {DefinitionParseError} from '#core/errors.js';\nimport {hasAgentStepIntegrations} from '#core/has-agent-step-integrations.js';\nimport {loadIntegrationValidationContext} from '#core/integrations.js';\nimport {parseDefinition} from '#core/parse-definition.js';\nimport {upsertDefinition} from '#db/definitions.js';\nimport {toDefinitionDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport interface CreateDefinitionRouteOptions {\n projects: ProjectsModuleClient;\n integrations?: IntegrationsModuleClient;\n}\n\nexport function buildCreateDefinitionRoute(options: CreateDefinitionRouteOptions) {\n return defineRoute({\n method: 'POST',\n path: '/',\n description: 'Create or update a workflow definition',\n schema: {\n body: createDefinitionBodySchema,\n response: {\n 200: definitionResponseSchema,\n 400: z.object({\n code: z.string(),\n message: z.string().optional(),\n details: z.array(definitionValidationErrorSchema).optional(),\n }),\n 404: z.object({code: z.string()}),\n },\n },\n errorHandler: (error, _request, _reply) => {\n if (error instanceof DefinitionParseError) {\n throw new ClientError(error.message, 'invalid-workflow-definition', {\n details: error.details,\n status: 400,\n });\n }\n throw error;\n },\n handler: async (request) => {\n const {project_id: projectId, config_path, source, yaml: yamlString, sha, ref} = request.body;\n const project = await requireProjectAccess(request, projectId, options.projects);\n\n const structurallyParsed = parseDefinition(yamlString);\n const {integrations} = options;\n const parsed =\n integrations !== undefined && hasAgentStepIntegrations(structurallyParsed.document)\n ? parseDefinition(yamlString, {\n integrationValidationContext: await loadIntegrationValidationContext(\n integrations,\n project.workspaceId,\n project.sourceConnectionId,\n ),\n })\n : structurallyParsed;\n\n const definition = await upsertDefinition({\n projectId,\n workspaceId: project.workspaceId,\n configPath: config_path,\n source,\n name: parsed.document.name,\n document: parsed.document,\n model: parsed.model,\n sourceSnapshot: parsed.sourceSnapshot,\n sha,\n ref,\n });\n\n return toDefinitionDto(definition);\n },\n });\n}\n"],"names":["createDefinitionBodySchema","definitionResponseSchema","definitionValidationErrorSchema","ClientError","defineRoute","z","DefinitionParseError","hasAgentStepIntegrations","loadIntegrationValidationContext","parseDefinition","upsertDefinition","toDefinitionDto","requireProjectAccess","buildCreateDefinitionRoute","options","method","path","description","schema","body","response","object","code","string","message","optional","details","array","errorHandler","error","_request","_reply","status","handler","request","project_id","projectId","config_path","source","yaml","yamlString","sha","ref","project","projects","structurallyParsed","integrations","parsed","undefined","document","integrationValidationContext","workspaceId","sourceConnectionId","definition","configPath","name","model","sourceSnapshot"],"mappings":"AAAA,SACEA,0BAA0B,EAC1BC,wBAAwB,EACxBC,+BAA+B,QAC1B,+BAA+B;AAGtC,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,kBAAkB;AACrD,SAAQC,wBAAwB,QAAO,uCAAuC;AAC9E,SAAQC,gCAAgC,QAAO,wBAAwB;AACvE,SAAQC,eAAe,QAAO,4BAA4B;AAC1D,SAAQC,gBAAgB,QAAO,qBAAqB;AACpD,SAAQC,eAAe,QAAO,6BAA6B;AAC3D,SAAQC,oBAAoB,QAAO,sBAAsB;AAOzD,OAAO,SAASC,2BAA2BC,OAAqC;IAC9E,OAAOV,YAAY;QACjBW,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMnB;YACNoB,UAAU;gBACR,KAAKnB;gBACL,KAAKI,EAAEgB,MAAM,CAAC;oBACZC,MAAMjB,EAAEkB,MAAM;oBACdC,SAASnB,EAAEkB,MAAM,GAAGE,QAAQ;oBAC5BC,SAASrB,EAAEsB,KAAK,CAACzB,iCAAiCuB,QAAQ;gBAC5D;gBACA,KAAKpB,EAAEgB,MAAM,CAAC;oBAACC,MAAMjB,EAAEkB,MAAM;gBAAE;YACjC;QACF;QACAK,cAAc,CAACC,OAAOC,UAAUC;YAC9B,IAAIF,iBAAiBvB,sBAAsB;gBACzC,MAAM,IAAIH,YAAY0B,MAAML,OAAO,EAAE,+BAA+B;oBAClEE,SAASG,MAAMH,OAAO;oBACtBM,QAAQ;gBACV;YACF;YACA,MAAMH;QACR;QACAI,SAAS,OAAOC;YACd,MAAM,EAACC,YAAYC,SAAS,EAAEC,WAAW,EAAEC,MAAM,EAAEC,MAAMC,UAAU,EAAEC,GAAG,EAAEC,GAAG,EAAC,GAAGR,QAAQf,IAAI;YAC7F,MAAMwB,UAAU,MAAM/B,qBAAqBsB,SAASE,WAAWtB,QAAQ8B,QAAQ;YAE/E,MAAMC,qBAAqBpC,gBAAgB+B;YAC3C,MAAM,EAACM,YAAY,EAAC,GAAGhC;YACvB,MAAMiC,SACJD,iBAAiBE,aAAazC,yBAAyBsC,mBAAmBI,QAAQ,IAC9ExC,gBAAgB+B,YAAY;gBAC1BU,8BAA8B,MAAM1C,iCAClCsC,cACAH,QAAQQ,WAAW,EACnBR,QAAQS,kBAAkB;YAE9B,KACAP;YAEN,MAAMQ,aAAa,MAAM3C,iBAAiB;gBACxC0B;gBACAe,aAAaR,QAAQQ,WAAW;gBAChCG,YAAYjB;gBACZC;gBACAiB,MAAMR,OAAOE,QAAQ,CAACM,IAAI;gBAC1BN,UAAUF,OAAOE,QAAQ;gBACzBO,OAAOT,OAAOS,KAAK;gBACnBC,gBAAgBV,OAAOU,cAAc;gBACrChB;gBACAC;YACF;YAEA,OAAO/B,gBAAgB0C;QACzB;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/create-definition.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport {\n createDefinitionBodySchema,\n definitionResponseSchema,\n definitionValidationErrorSchema,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {DefinitionParseError} from '#core/errors.js';\nimport {hasAgentStepIntegrations} from '#core/has-agent-step-integrations.js';\nimport {loadIntegrationValidationContext} from '#core/integrations.js';\nimport {parseDefinition} from '#core/parse-definition.js';\nimport {upsertDefinition} from '#db/definitions.js';\nimport {toDefinitionDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport interface CreateDefinitionRouteOptions {\n projects: ProjectsModuleClient;\n agent: AgentInterModuleClient;\n integrations?: IntegrationsModuleClient;\n}\n\nexport function buildCreateDefinitionRoute(options: CreateDefinitionRouteOptions) {\n return defineRoute({\n method: 'POST',\n path: '/',\n description: 'Create or update a workflow definition',\n schema: {\n body: createDefinitionBodySchema,\n response: {\n 200: definitionResponseSchema,\n 400: z.object({\n code: z.string(),\n message: z.string().optional(),\n details: z.array(definitionValidationErrorSchema).optional(),\n }),\n 404: z.object({code: z.string()}),\n },\n },\n errorHandler: (error, _request, _reply) => {\n if (error instanceof DefinitionParseError) {\n throw new ClientError(error.message, 'invalid-workflow-definition', {\n details: error.details,\n status: 400,\n });\n }\n throw error;\n },\n handler: async (request) => {\n const {project_id: projectId, config_path, source, yaml: yamlString, sha, ref} = request.body;\n const project = await requireProjectAccess(request, projectId, options.projects);\n\n const agentValidationCatalog = await options.agent.getValidationCatalog({});\n const structurallyParsed = parseDefinition(yamlString, {agentValidationCatalog});\n const {integrations} = options;\n const parsed =\n integrations !== undefined && hasAgentStepIntegrations(structurallyParsed.document)\n ? parseDefinition(yamlString, {\n agentValidationCatalog,\n integrationValidationContext: await loadIntegrationValidationContext(\n integrations,\n project.workspaceId,\n project.sourceConnectionId,\n ),\n })\n : structurallyParsed;\n\n const definition = await upsertDefinition({\n projectId,\n workspaceId: project.workspaceId,\n configPath: config_path,\n source,\n name: parsed.document.name,\n document: parsed.document,\n model: parsed.model,\n sourceSnapshot: parsed.sourceSnapshot,\n sha,\n ref,\n });\n\n return toDefinitionDto(definition);\n },\n });\n}\n"],"names":["createDefinitionBodySchema","definitionResponseSchema","definitionValidationErrorSchema","ClientError","defineRoute","z","DefinitionParseError","hasAgentStepIntegrations","loadIntegrationValidationContext","parseDefinition","upsertDefinition","toDefinitionDto","requireProjectAccess","buildCreateDefinitionRoute","options","method","path","description","schema","body","response","object","code","string","message","optional","details","array","errorHandler","error","_request","_reply","status","handler","request","project_id","projectId","config_path","source","yaml","yamlString","sha","ref","project","projects","agentValidationCatalog","agent","getValidationCatalog","structurallyParsed","integrations","parsed","undefined","document","integrationValidationContext","workspaceId","sourceConnectionId","definition","configPath","name","model","sourceSnapshot"],"mappings":"AACA,SACEA,0BAA0B,EAC1BC,wBAAwB,EACxBC,+BAA+B,QAC1B,+BAA+B;AAGtC,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,oBAAoB,QAAO,kBAAkB;AACrD,SAAQC,wBAAwB,QAAO,uCAAuC;AAC9E,SAAQC,gCAAgC,QAAO,wBAAwB;AACvE,SAAQC,eAAe,QAAO,4BAA4B;AAC1D,SAAQC,gBAAgB,QAAO,qBAAqB;AACpD,SAAQC,eAAe,QAAO,6BAA6B;AAC3D,SAAQC,oBAAoB,QAAO,sBAAsB;AAQzD,OAAO,SAASC,2BAA2BC,OAAqC;IAC9E,OAAOV,YAAY;QACjBW,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMnB;YACNoB,UAAU;gBACR,KAAKnB;gBACL,KAAKI,EAAEgB,MAAM,CAAC;oBACZC,MAAMjB,EAAEkB,MAAM;oBACdC,SAASnB,EAAEkB,MAAM,GAAGE,QAAQ;oBAC5BC,SAASrB,EAAEsB,KAAK,CAACzB,iCAAiCuB,QAAQ;gBAC5D;gBACA,KAAKpB,EAAEgB,MAAM,CAAC;oBAACC,MAAMjB,EAAEkB,MAAM;gBAAE;YACjC;QACF;QACAK,cAAc,CAACC,OAAOC,UAAUC;YAC9B,IAAIF,iBAAiBvB,sBAAsB;gBACzC,MAAM,IAAIH,YAAY0B,MAAML,OAAO,EAAE,+BAA+B;oBAClEE,SAASG,MAAMH,OAAO;oBACtBM,QAAQ;gBACV;YACF;YACA,MAAMH;QACR;QACAI,SAAS,OAAOC;YACd,MAAM,EAACC,YAAYC,SAAS,EAAEC,WAAW,EAAEC,MAAM,EAAEC,MAAMC,UAAU,EAAEC,GAAG,EAAEC,GAAG,EAAC,GAAGR,QAAQf,IAAI;YAC7F,MAAMwB,UAAU,MAAM/B,qBAAqBsB,SAASE,WAAWtB,QAAQ8B,QAAQ;YAE/E,MAAMC,yBAAyB,MAAM/B,QAAQgC,KAAK,CAACC,oBAAoB,CAAC,CAAC;YACzE,MAAMC,qBAAqBvC,gBAAgB+B,YAAY;gBAACK;YAAsB;YAC9E,MAAM,EAACI,YAAY,EAAC,GAAGnC;YACvB,MAAMoC,SACJD,iBAAiBE,aAAa5C,yBAAyByC,mBAAmBI,QAAQ,IAC9E3C,gBAAgB+B,YAAY;gBAC1BK;gBACAQ,8BAA8B,MAAM7C,iCAClCyC,cACAN,QAAQW,WAAW,EACnBX,QAAQY,kBAAkB;YAE9B,KACAP;YAEN,MAAMQ,aAAa,MAAM9C,iBAAiB;gBACxC0B;gBACAkB,aAAaX,QAAQW,WAAW;gBAChCG,YAAYpB;gBACZC;gBACAoB,MAAMR,OAAOE,QAAQ,CAACM,IAAI;gBAC1BN,UAAUF,OAAOE,QAAQ;gBACzBO,OAAOT,OAAOS,KAAK;gBACnBC,gBAAgBV,OAAOU,cAAc;gBACrCnB;gBACAC;YACF;YAEA,OAAO/B,gBAAgB6C;QACzB;IACF;AACF"}
@@ -1,3 +1,3 @@
1
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
1
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
2
2
  export declare function buildGetDefinitionRoute(projects: ProjectsModuleClient): import("@shipfox/node-fastify").RouteDefinition;
3
3
  //# sourceMappingURL=get-definition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-definition.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/get-definition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAOpE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,mDAyBrE"}
1
+ {"version":3,"file":"get-definition.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/get-definition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAOjF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,mDAyBrE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/get-definition.ts"],"sourcesContent":["import {definitionResponseSchema} from '@shipfox/api-definitions-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {getDefinitionById} from '#db/definitions.js';\nimport {toDefinitionDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function buildGetDefinitionRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/:id',\n description: 'Get a definition by ID',\n schema: {\n params: z.object({\n id: z.string().uuid(),\n }),\n response: {\n 200: definitionResponseSchema,\n },\n },\n handler: async (request) => {\n const {id} = request.params;\n const definition = await getDefinitionById(id);\n\n if (!definition) {\n throw new ClientError('Definition not found', 'not-found', {status: 404});\n }\n await requireProjectAccess(request, definition.projectId, projects);\n\n return toDefinitionDto(definition);\n },\n });\n}\n"],"names":["definitionResponseSchema","ClientError","defineRoute","z","getDefinitionById","toDefinitionDto","requireProjectAccess","buildGetDefinitionRoute","projects","method","path","description","schema","params","object","id","string","uuid","response","handler","request","definition","status","projectId"],"mappings":"AAAA,SAAQA,wBAAwB,QAAO,+BAA+B;AAEtE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,iBAAiB,QAAO,qBAAqB;AACrD,SAAQC,eAAe,QAAO,6BAA6B;AAC3D,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,wBAAwBC,QAA8B;IACpE,OAAON,YAAY;QACjBO,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,QAAQV,EAAEW,MAAM,CAAC;gBACfC,IAAIZ,EAAEa,MAAM,GAAGC,IAAI;YACrB;YACAC,UAAU;gBACR,KAAKlB;YACP;QACF;QACAmB,SAAS,OAAOC;YACd,MAAM,EAACL,EAAE,EAAC,GAAGK,QAAQP,MAAM;YAC3B,MAAMQ,aAAa,MAAMjB,kBAAkBW;YAE3C,IAAI,CAACM,YAAY;gBACf,MAAM,IAAIpB,YAAY,wBAAwB,aAAa;oBAACqB,QAAQ;gBAAG;YACzE;YACA,MAAMhB,qBAAqBc,SAASC,WAAWE,SAAS,EAAEf;YAE1D,OAAOH,gBAAgBgB;QACzB;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/get-definition.ts"],"sourcesContent":["import {definitionResponseSchema} from '@shipfox/api-definitions-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {getDefinitionById} from '#db/definitions.js';\nimport {toDefinitionDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function buildGetDefinitionRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/:id',\n description: 'Get a definition by ID',\n schema: {\n params: z.object({\n id: z.string().uuid(),\n }),\n response: {\n 200: definitionResponseSchema,\n },\n },\n handler: async (request) => {\n const {id} = request.params;\n const definition = await getDefinitionById(id);\n\n if (!definition) {\n throw new ClientError('Definition not found', 'not-found', {status: 404});\n }\n await requireProjectAccess(request, definition.projectId, projects);\n\n return toDefinitionDto(definition);\n },\n });\n}\n"],"names":["definitionResponseSchema","ClientError","defineRoute","z","getDefinitionById","toDefinitionDto","requireProjectAccess","buildGetDefinitionRoute","projects","method","path","description","schema","params","object","id","string","uuid","response","handler","request","definition","status","projectId"],"mappings":"AAAA,SAAQA,wBAAwB,QAAO,+BAA+B;AAEtE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,iBAAiB,QAAO,qBAAqB;AACrD,SAAQC,eAAe,QAAO,6BAA6B;AAC3D,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,wBAAwBC,QAA8B;IACpE,OAAON,YAAY;QACjBO,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,QAAQV,EAAEW,MAAM,CAAC;gBACfC,IAAIZ,EAAEa,MAAM,GAAGC,IAAI;YACrB;YACAC,UAAU;gBACR,KAAKlB;YACP;QACF;QACAmB,SAAS,OAAOC;YACd,MAAM,EAACL,EAAE,EAAC,GAAGK,QAAQP,MAAM;YAC3B,MAAMQ,aAAa,MAAMjB,kBAAkBW;YAE3C,IAAI,CAACM,YAAY;gBACf,MAAM,IAAIpB,YAAY,wBAAwB,aAAa;oBAACqB,QAAQ;gBAAG;YACzE;YACA,MAAMhB,qBAAqBc,SAASC,WAAWE,SAAS,EAAEf;YAE1D,OAAOH,gBAAgBgB;QACzB;IACF;AACF"}
@@ -2,7 +2,7 @@ import { AUTH_USER } from '@shipfox/api-auth-context';
2
2
  import { buildCreateDefinitionRoute } from './create-definition.js';
3
3
  import { buildGetDefinitionRoute } from './get-definition.js';
4
4
  import { buildListDefinitionsRoute } from './list-definitions.js';
5
- import { validateDefinitionRoute } from './validate-definition.js';
5
+ import { buildValidateDefinitionRoute } from './validate-definition.js';
6
6
  export function createDefinitionRoutes(options) {
7
7
  return [
8
8
  {
@@ -12,7 +12,7 @@ export function createDefinitionRoutes(options) {
12
12
  buildCreateDefinitionRoute(options),
13
13
  buildListDefinitionsRoute(options.projects),
14
14
  buildGetDefinitionRoute(options.projects),
15
- validateDefinitionRoute
15
+ buildValidateDefinitionRoute(options.agent)
16
16
  ]
17
17
  }
18
18
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/index.ts"],"sourcesContent":["import {AUTH_USER} from '@shipfox/api-auth-context';\nimport type {RouteGroup} from '@shipfox/node-fastify';\nimport {\n buildCreateDefinitionRoute,\n type CreateDefinitionRouteOptions,\n} from './create-definition.js';\nimport {buildGetDefinitionRoute} from './get-definition.js';\nimport {buildListDefinitionsRoute} from './list-definitions.js';\nimport {validateDefinitionRoute} from './validate-definition.js';\n\nexport interface DefinitionRouteOptions extends CreateDefinitionRouteOptions {}\n\nexport function createDefinitionRoutes(options: DefinitionRouteOptions): RouteGroup[] {\n return [\n {\n prefix: '/definitions',\n auth: AUTH_USER,\n routes: [\n buildCreateDefinitionRoute(options),\n buildListDefinitionsRoute(options.projects),\n buildGetDefinitionRoute(options.projects),\n validateDefinitionRoute,\n ],\n },\n ];\n}\n"],"names":["AUTH_USER","buildCreateDefinitionRoute","buildGetDefinitionRoute","buildListDefinitionsRoute","validateDefinitionRoute","createDefinitionRoutes","options","prefix","auth","routes","projects"],"mappings":"AAAA,SAAQA,SAAS,QAAO,4BAA4B;AAEpD,SACEC,0BAA0B,QAErB,yBAAyB;AAChC,SAAQC,uBAAuB,QAAO,sBAAsB;AAC5D,SAAQC,yBAAyB,QAAO,wBAAwB;AAChE,SAAQC,uBAAuB,QAAO,2BAA2B;AAIjE,OAAO,SAASC,uBAAuBC,OAA+B;IACpE,OAAO;QACL;YACEC,QAAQ;YACRC,MAAMR;YACNS,QAAQ;gBACNR,2BAA2BK;gBAC3BH,0BAA0BG,QAAQI,QAAQ;gBAC1CR,wBAAwBI,QAAQI,QAAQ;gBACxCN;aACD;QACH;KACD;AACH"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/index.ts"],"sourcesContent":["import {AUTH_USER} from '@shipfox/api-auth-context';\nimport type {RouteGroup} from '@shipfox/node-fastify';\nimport {\n buildCreateDefinitionRoute,\n type CreateDefinitionRouteOptions,\n} from './create-definition.js';\nimport {buildGetDefinitionRoute} from './get-definition.js';\nimport {buildListDefinitionsRoute} from './list-definitions.js';\nimport {buildValidateDefinitionRoute} from './validate-definition.js';\n\nexport interface DefinitionRouteOptions extends CreateDefinitionRouteOptions {}\n\nexport function createDefinitionRoutes(options: DefinitionRouteOptions): RouteGroup[] {\n return [\n {\n prefix: '/definitions',\n auth: AUTH_USER,\n routes: [\n buildCreateDefinitionRoute(options),\n buildListDefinitionsRoute(options.projects),\n buildGetDefinitionRoute(options.projects),\n buildValidateDefinitionRoute(options.agent),\n ],\n },\n ];\n}\n"],"names":["AUTH_USER","buildCreateDefinitionRoute","buildGetDefinitionRoute","buildListDefinitionsRoute","buildValidateDefinitionRoute","createDefinitionRoutes","options","prefix","auth","routes","projects","agent"],"mappings":"AAAA,SAAQA,SAAS,QAAO,4BAA4B;AAEpD,SACEC,0BAA0B,QAErB,yBAAyB;AAChC,SAAQC,uBAAuB,QAAO,sBAAsB;AAC5D,SAAQC,yBAAyB,QAAO,wBAAwB;AAChE,SAAQC,4BAA4B,QAAO,2BAA2B;AAItE,OAAO,SAASC,uBAAuBC,OAA+B;IACpE,OAAO;QACL;YACEC,QAAQ;YACRC,MAAMR;YACNS,QAAQ;gBACNR,2BAA2BK;gBAC3BH,0BAA0BG,QAAQI,QAAQ;gBAC1CR,wBAAwBI,QAAQI,QAAQ;gBACxCN,6BAA6BE,QAAQK,KAAK;aAC3C;QACH;KACD;AACH"}
@@ -1,3 +1,3 @@
1
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
1
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
2
2
  export declare function buildListDefinitionsRoute(projects: ProjectsModuleClient): import("@shipfox/node-fastify").RouteDefinition;
3
3
  //# sourceMappingURL=list-definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-definitions.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-definitions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAQpE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,oBAAoB,mDAiCvE"}
1
+ {"version":3,"file":"list-definitions.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-definitions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAQjF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,oBAAoB,mDAiCvE"}