tubeless 0.2.13 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/cli-pipeline-command.d.ts +7 -2
- package/dist/cli/cli-pipeline-command.js +24 -3
- package/dist/cli/cli-pipeline-command.js.map +1 -1
- package/dist/core/child-execution.js +5 -3
- package/dist/core/child-execution.js.map +1 -1
- package/dist/core/child-progress.js +2 -0
- package/dist/core/child-progress.js.map +1 -1
- package/dist/core/pipeline-cache.d.ts +68 -0
- package/dist/core/pipeline-cache.js +157 -0
- package/dist/core/pipeline-cache.js.map +1 -0
- package/dist/core/pipeline-compiler.js +4 -2
- package/dist/core/pipeline-compiler.js.map +1 -1
- package/dist/core/pipeline-definition-identity.d.ts +3 -1
- package/dist/core/pipeline-definition-identity.js +38 -5
- package/dist/core/pipeline-definition-identity.js.map +1 -1
- package/dist/core/pipeline-definition-validation.d.ts +7 -2
- package/dist/core/pipeline-definition-validation.js +22 -2
- package/dist/core/pipeline-definition-validation.js.map +1 -1
- package/dist/core/pipeline-definition.d.ts +6 -0
- package/dist/core/pipeline-definition.js.map +1 -1
- package/dist/core/pipeline-execute.js +5 -0
- package/dist/core/pipeline-execute.js.map +1 -1
- package/dist/core/pipeline-graph.d.ts +2 -1
- package/dist/core/pipeline-graph.js +10 -4
- package/dist/core/pipeline-graph.js.map +1 -1
- package/dist/core/pipeline-mermaid.js +7 -1
- package/dist/core/pipeline-mermaid.js.map +1 -1
- package/dist/core/pipeline-plan.js +4 -0
- package/dist/core/pipeline-plan.js.map +1 -1
- package/dist/core/pipeline-query.d.ts +11 -0
- package/dist/core/pipeline-query.js +10 -0
- package/dist/core/pipeline-query.js.map +1 -0
- package/dist/core/pipeline-run-state.d.ts +2 -2
- package/dist/core/pipeline-run-state.js.map +1 -1
- package/dist/core/pipeline-step-executor.d.ts +2 -0
- package/dist/core/pipeline-step-executor.js +24 -9
- package/dist/core/pipeline-step-executor.js.map +1 -1
- package/dist/core/pipeline-step-metadata.d.ts +1 -0
- package/dist/core/pipeline-step-metadata.js +1 -0
- package/dist/core/pipeline-step-metadata.js.map +1 -1
- package/dist/core/pipeline-steps.d.ts +17 -3
- package/dist/core/pipeline-steps.js +11 -3
- package/dist/core/pipeline-steps.js.map +1 -1
- package/dist/core/pipeline-types.d.ts +20 -7
- package/dist/core/pipeline-types.js.map +1 -1
- package/dist/core/pipeline-validation.js +1 -1
- package/dist/core/pipeline-validation.js.map +1 -1
- package/dist/core/pipeline.d.ts +4 -0
- package/dist/core/pipeline.js +7 -1
- package/dist/core/pipeline.js.map +1 -1
- package/dist/node/node.d.ts +1 -0
- package/dist/node/node.js +1 -0
- package/dist/node/node.js.map +1 -1
- package/dist/reporter/interactive-reporter.js +3 -4
- package/dist/reporter/interactive-reporter.js.map +1 -1
- package/dist/reporter/reporter.d.ts +1 -0
- package/dist/reporter/reporter.js +4 -2
- package/dist/reporter/reporter.js.map +1 -1
- package/dist/run-store/cache-artifact.d.ts +7 -0
- package/dist/run-store/cache-artifact.js +22 -0
- package/dist/run-store/cache-artifact.js.map +1 -0
- package/dist/run-store/definition-diff.js +20 -8
- package/dist/run-store/definition-diff.js.map +1 -1
- package/dist/run-store/run-projection.js +2 -2
- package/dist/run-store/run-projection.js.map +1 -1
- package/dist/run-store/run-store.d.ts +2 -2
- package/dist/run-store/run-store.js.map +1 -1
- package/dist/studio/run-store-ui-artifacts.d.ts +5 -0
- package/dist/studio/run-store-ui-artifacts.js +18 -0
- package/dist/studio/run-store-ui-artifacts.js.map +1 -0
- package/dist/studio/run-store-ui-client-browser.js +2 -2
- package/dist/studio/run-store-ui-client-transport.d.ts +3 -1
- package/dist/studio/run-store-ui-client-transport.js +74 -32
- package/dist/studio/run-store-ui-client-transport.js.map +1 -1
- package/dist/studio/run-store-ui-client.d.ts +12 -5
- package/dist/studio/run-store-ui-client.js +176 -57
- package/dist/studio/run-store-ui-client.js.map +1 -1
- package/dist/studio/run-store-ui-data-controller.d.ts +2 -1
- package/dist/studio/run-store-ui-data-controller.js +31 -9
- package/dist/studio/run-store-ui-data-controller.js.map +1 -1
- package/dist/studio/run-store-ui-debugging.d.ts +13 -0
- package/dist/studio/run-store-ui-debugging.js +48 -0
- package/dist/studio/run-store-ui-debugging.js.map +1 -0
- package/dist/studio/run-store-ui-definitions.js +2 -1
- package/dist/studio/run-store-ui-definitions.js.map +1 -1
- package/dist/studio/run-store-ui-hosting.d.ts +18 -0
- package/dist/studio/run-store-ui-hosting.js +88 -0
- package/dist/studio/run-store-ui-hosting.js.map +1 -0
- package/dist/studio/run-store-ui-http.d.ts +1 -1
- package/dist/studio/run-store-ui-http.js +2 -2
- package/dist/studio/run-store-ui-http.js.map +1 -1
- package/dist/studio/run-store-ui-metadata.d.ts +13 -0
- package/dist/studio/run-store-ui-metadata.js +32 -0
- package/dist/studio/run-store-ui-metadata.js.map +1 -0
- package/dist/studio/run-store-ui-page.d.ts +2 -0
- package/dist/studio/run-store-ui-page.js +52 -3
- package/dist/studio/run-store-ui-page.js.map +1 -1
- package/dist/studio/run-store-ui.d.ts +2 -0
- package/dist/studio/run-store-ui.js +45 -9
- package/dist/studio/run-store-ui.js.map +1 -1
- package/dist/tracing/artifact-metadata.d.ts +1 -0
- package/dist/tracing/artifact-metadata.js +2 -2
- package/dist/tracing/artifact-metadata.js.map +1 -1
- package/dist/tracing/graph-metadata.d.ts +12 -0
- package/dist/tracing/graph-metadata.js +55 -0
- package/dist/tracing/graph-metadata.js.map +1 -0
- package/dist/tracing/tracing-internal.js +2 -2
- package/dist/tracing/tracing-internal.js.map +1 -1
- package/dist/tracing/tracing-schema.d.ts +58 -31
- package/dist/tracing/tracing-schema.js +26 -8
- package/dist/tracing/tracing-schema.js.map +1 -1
- package/dist/utilities/cache-duration.d.ts +2 -0
- package/dist/utilities/cache-duration.js +39 -0
- package/dist/utilities/cache-duration.js.map +1 -0
- package/dist/utilities/cache-key.d.ts +2 -0
- package/dist/utilities/cache-key.js +63 -0
- package/dist/utilities/cache-key.js.map +1 -0
- package/dist/utilities/cache-storage.d.ts +6 -0
- package/dist/utilities/cache-storage.js +83 -0
- package/dist/utilities/cache-storage.js.map +1 -0
- package/dist/utilities/canonical-json.d.ts +2 -0
- package/dist/utilities/canonical-json.js +12 -0
- package/dist/utilities/canonical-json.js.map +1 -0
- package/dist/workbench/workbench-commands.js +43 -3
- package/dist/workbench/workbench-commands.js.map +1 -1
- package/dist/workbench/workbench-history.js +2 -1
- package/dist/workbench/workbench-history.js.map +1 -1
- package/dist/workbench/workbench-ui.js +18 -7
- package/dist/workbench/workbench-ui.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/agent-guide.md +31 -2
- package/docs/api-reference.md +98 -85
- package/docs/api-report.json +19 -6
- package/docs/artifacts.md +6 -2
- package/docs/cli.md +25 -0
- package/docs/concepts.md +10 -0
- package/docs/declarative-pipelines.md +4 -0
- package/docs/graph-metadata.md +108 -0
- package/docs/llms.txt +4 -0
- package/docs/recipes.md +15 -0
- package/docs/step-output-cache.md +242 -0
- package/docs/studio.md +171 -19
- package/examples/graph-metadata.ts +32 -0
- package/examples/project/tubeless.project.ts +5 -0
- package/examples/step-output-cache.ts +30 -0
- package/package.json +2 -2
- package/skills/tubeless/SKILL.md +16 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-plan.js","sourceRoot":"","sources":["../../src/core/pipeline-plan.ts"],"names":[],"mappings":"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","sourcesContent":["import { duplicateValues } from \"../utilities/collections.js\";\nimport type { CompiledPipeline } from \"./pipeline-compiler.js\";\nimport type { StepIds, TargetIds } from \"./pipeline-definition.js\";\nimport { decideStepDisposition } from \"./pipeline-disposition.js\";\nimport { pipelineDiagnostic } from \"./pipeline-errors.js\";\nimport { compiledStepGraph, liveStepGraph, type CompiledStepGraph } from \"./pipeline-graph.js\";\nimport type { AnyStep } from \"./pipeline-steps.js\";\nimport { STEP_NESTED_PIPELINE, STEP_REMOTE } from \"./pipeline-step-metadata.js\";\nimport type {\n PipelineError,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRunControls,\n PipelineStepReport,\n PipelineStepSelectionReason,\n PipelineStepSkipReason,\n PipelineStepSkippedReport,\n StandardSchemaV1,\n} from \"./pipeline-types.js\";\n\nexport function stepToPlanStep<TOptions extends object>(\n step: AnyStep<TOptions>,\n selected: boolean,\n skipReason?: PipelineStepSkipReason,\n selectionReasons?: readonly PipelineStepSelectionReason[],\n graph: CompiledStepGraph<TOptions> = liveStepGraph(step)\n): PipelinePlanStep {\n const reasons = selectionReasons ?? [{ kind: \"all\" }];\n const planStep: PipelinePlanStep = {\n dependencies: graph.dependsOn.map((dep) => dep.id),\n description: step.description,\n dryRun: step.dryRun === \"skip\" ? \"skip\" : step.dryRun !== undefined ? \"custom\" : \"run\",\n id: step.id,\n name: step.name,\n optionalDependencies: graph.optionalDependsOn.map((dep) => dep.id),\n runtimeSkipPossible: step.skip !== undefined,\n selected,\n selectionReasons: reasons,\n skipAfterFailureOf: graph.skipAfterFailureOf.map((dep) => dep.id),\n skipReason,\n };\n if (step[STEP_NESTED_PIPELINE]) {\n planStep.nestedPipeline = {\n ...step[STEP_NESTED_PIPELINE],\n stepIds: [...step[STEP_NESTED_PIPELINE].stepIds],\n };\n }\n if (step[STEP_REMOTE]) {\n planStep.remote = { ...step[STEP_REMOTE] };\n }\n return planStep;\n}\n\nfunction addSelectionReason(\n reasonsByStepId: Map<string, PipelineStepSelectionReason[]>,\n stepId: string,\n reason: PipelineStepSelectionReason\n): void {\n const reasons = reasonsByStepId.get(stepId) ?? [];\n const reasonKey = JSON.stringify(reason);\n if (!reasons.some((candidate) => JSON.stringify(candidate) === reasonKey)) {\n reasons.push(reason);\n reasonsByStepId.set(stepId, reasons);\n }\n}\n\nfunction targetSelectionReasons<TOptions extends object>(\n targets: readonly AnyStep<TOptions>[],\n stepGraph: ReadonlyMap<AnyStep, CompiledStepGraph>\n): Map<string, PipelineStepSelectionReason[]> {\n const reasonsByStepId = new Map<string, PipelineStepSelectionReason[]>();\n\n for (const target of targets) {\n addSelectionReason(reasonsByStepId, target.id, { kind: \"target\", targetId: target.id });\n const expanded = new Set<AnyStep<TOptions>>();\n const includePrerequisites = (step: AnyStep<TOptions>): void => {\n if (expanded.has(step)) return;\n expanded.add(step);\n\n const graph = compiledStepGraph({ stepGraph }, step);\n for (const dependency of graph.dependsOn) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"required-dependency\",\n targetId: target.id,\n });\n includePrerequisites(dependency);\n }\n for (const dependency of graph.skipAfterFailureOf) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"failure-gate\",\n targetId: target.id,\n });\n includePrerequisites(dependency);\n }\n for (const dependency of graph.optionalDependsOn) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"optional-only\",\n targetId: target.id,\n });\n }\n };\n includePrerequisites(target);\n }\n\n return reasonsByStepId;\n}\n\nfunction selectsStep(reason: PipelineStepSelectionReason): boolean {\n return ![\"not-selected\", \"optional-only\", \"outside-target-closure\"].includes(reason.kind);\n}\n\nexport function buildPipelinePlan<\n TSteps extends readonly AnyStep[],\n TResult,\n TTargets extends readonly TSteps[number][],\n TResultSchema extends StandardSchemaV1 | undefined,\n>(\n compiled: CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>,\n controls: PipelineRunControls<StepIds<TSteps>, TargetIds<TTargets>>\n): PipelinePlan {\n const dryRun = controls.dryRun === true;\n const steps = compiled.orderedSteps;\n const errors: PipelineError[] = [];\n\n const knownStepIds = new Set(compiled.stepIds);\n const declaredTargetIds = new Set(compiled.declaredTargets.map((target) => target.id));\n const requestedStepIds = controls.stepIds ?? [];\n const requestedTargets = controls.targets ?? [];\n const maxConcurrency = controls.maxConcurrency ?? 1;\n if (!Number.isInteger(maxConcurrency) || maxConcurrency < 1) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_RUN_CONCURRENCY_INVALID\",\n \"planning\",\n \"validation\",\n \"maxConcurrency must be a positive finite integer\"\n )\n );\n }\n if (controls.stepIds !== undefined && controls.targets !== undefined) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_SELECTION_CONFLICT\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} cannot combine exact stepIds filtering with dependency-aware targets`\n )\n );\n }\n if (controls.stepIds !== undefined && controls.stepIds.length === 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_SELECTION_EMPTY\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} received an empty stepIds array; omit stepIds to run every step, or pass at least one step id`\n )\n );\n }\n if (controls.targets !== undefined && controls.targets.length === 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_SELECTION_EMPTY\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} received an empty targets array; omit targets to run every step, or pass at least one target step id`\n )\n );\n }\n const duplicateRequestedStepIds = duplicateValues(requestedStepIds);\n if (duplicateRequestedStepIds.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_SELECTION_DUPLICATE\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested duplicate step ids: ${duplicateRequestedStepIds.join(\", \")}`\n )\n );\n }\n const unknownRequestedStepIds = requestedStepIds.filter((stepId) => !knownStepIds.has(stepId));\n if (unknownRequestedStepIds.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_UNKNOWN\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested unknown step ids: ${unknownRequestedStepIds.join(\", \")}`\n )\n );\n }\n const duplicateTargets = duplicateValues(requestedTargets);\n if (duplicateTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_SELECTION_DUPLICATE\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested duplicate targets: ${duplicateTargets.join(\", \")}`\n )\n );\n }\n const unknownTargets = requestedTargets.filter((stepId) => !knownStepIds.has(stepId));\n if (unknownTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_UNKNOWN\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested unknown targets: ${unknownTargets.join(\", \")}`\n )\n );\n }\n const undeclaredTargets = requestedTargets.filter(\n (stepId) => knownStepIds.has(stepId) && !declaredTargetIds.has(stepId)\n );\n if (undeclaredTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_UNDECLARED\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested undeclared targets: ${undeclaredTargets.join(\", \")}`\n )\n );\n }\n\n if (errors.length > 0) {\n return {\n dryRun,\n errors,\n ok: false,\n pipelineId: compiled.id,\n definition: compiled.definition,\n steps: [],\n };\n }\n\n let selectionReasonsByStepId: Map<string, PipelineStepSelectionReason[]>;\n if (controls.stepIds !== undefined) {\n const selectedIds = new Set(controls.stepIds);\n selectionReasonsByStepId = new Map(\n steps.map((step) => [\n step.id,\n selectedIds.has(step.id)\n ? ([{ kind: \"exact\" }] satisfies PipelineStepSelectionReason[])\n : ([{ kind: \"not-selected\" }] satisfies PipelineStepSelectionReason[]),\n ])\n );\n } else if (controls.targets !== undefined) {\n const stepsById = new Map(steps.map((step) => [step.id, step]));\n const selectedTargets = controls.targets.map((target) => stepsById.get(target)!);\n selectionReasonsByStepId = targetSelectionReasons(selectedTargets, compiled.stepGraph);\n for (const step of steps) {\n const reasons = selectionReasonsByStepId.get(step.id) ?? [];\n const selected = reasons.some(selectsStep);\n selectionReasonsByStepId.set(\n step.id,\n selected\n ? reasons.filter(selectsStep)\n : reasons.length > 0\n ? reasons\n : [{ kind: \"outside-target-closure\" }]\n );\n }\n } else {\n selectionReasonsByStepId = new Map(\n steps.map((step) => [step.id, [{ kind: \"all\" }] satisfies PipelineStepSelectionReason[]])\n );\n }\n const planSteps: PipelinePlanStep[] = [];\n // Accumulated planned skip/complete reports so later steps see the same\n // unmet-dependency chain as today's skipReason walk (not one empty map).\n const plannedReportsByStepId = new Map<string, PipelineStepReport>();\n for (const step of steps) {\n const selectionReasons = selectionReasonsByStepId.get(step.id)!;\n const selected = selectionReasons.some(selectsStep);\n const graph = compiledStepGraph(compiled, step);\n const planned = stepToPlanStep(step, selected, undefined, selectionReasons, graph);\n const disposition = decideStepDisposition({\n dryRun,\n graph,\n planned,\n reportsByStepId: plannedReportsByStepId,\n step,\n });\n const skipReason = disposition.kind === \"skip\" ? disposition.reason : undefined;\n const planStep = stepToPlanStep(step, selected, skipReason, selectionReasons, graph);\n planSteps.push(planStep);\n if (disposition.kind === \"skip\") {\n const report: PipelineStepSkippedReport = {\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: 0,\n reason: disposition.reason,\n status: \"skipped\",\n };\n if (disposition.dependencyId) report.dependencyId = disposition.dependencyId;\n if (disposition.message) report.message = disposition.message;\n plannedReportsByStepId.set(step.id, report);\n } else {\n // Synthetic complete so isRequiredDependencyMet treats will-run deps as met.\n plannedReportsByStepId.set(step.id, {\n attemptId: \"\",\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: 0,\n startedAtMs: 0,\n status: \"completed\",\n });\n }\n }\n\n return {\n dryRun,\n errors,\n ok: errors.length === 0,\n pipelineId: compiled.id,\n definition: compiled.definition,\n steps: planSteps,\n };\n}\n\nexport function planStepById(plan: PipelinePlan): Map<string, PipelinePlanStep> {\n return new Map(plan.steps.map((step) => [step.id, step]));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pipeline-plan.js","sourceRoot":"","sources":["../../src/core/pipeline-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAahF,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,QAAiB,EACjB,UAAmC,EACnC,gBAAyD,EACzD,KAAK,GAAgC,aAAa,CAAC,IAAI,CAAC;IAExD,MAAM,OAAO,GAAG,gBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAqB;QACjC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnE,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;QACtF,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,oBAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,mBAAmB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;QAC5C,QAAQ;QACR,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,UAAU;KACX,CAAC;IACF,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,cAAc,GAAG;YACxB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC7B,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;SACjD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,eAA2D,EAC3D,MAAc,EACd,MAAmC;IAEnC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAqC,EACrC,SAAkD;IAElD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEzE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC9C,MAAM,oBAAoB,GAAG,CAAC,IAAuB,EAAQ,EAAE;YAC7D,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;YACrD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACzC,kBAAkB,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,EAAE;oBACjD,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CAAC;gBACH,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAClD,kBAAkB,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,EAAE;oBACjD,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CAAC;gBACH,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBACjD,kBAAkB,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,EAAE;oBACjD,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QACF,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,MAAmC;IACtD,OAAO,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAM/B,QAAoE,EACpE,QAAmE;IAEnE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IACpC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAChD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7F,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,4BAA4B,EAC5B,UAAU,EACV,YAAY,EACZ,yCAAyC,CAC1C,CACF,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,kCAAkC,EAClC,UAAU,EACV,YAAY,EACZ,kDAAkD,CACnD,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,sCAAsC,EACtC,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,uEAAuE,CAC/F,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,wCAAwC,EACxC,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,gGAAgG,CACxH,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,0CAA0C,EAC1C,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,uGAAuG,CAC/H,CACF,CAAC;IACJ,CAAC;IACD,MAAM,yBAAyB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACpE,IAAI,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,4CAA4C,EAC5C,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,kCAAkC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CACF,CAAC;IACJ,CAAC;IACD,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,gCAAgC,EAChC,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,gCAAgC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5F,CACF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC3D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,8CAA8C,EAC9C,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,iCAAiC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,kCAAkC,EAClC,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,+BAA+B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAC/C,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CACvE,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,qCAAqC,EACrC,UAAU,EACV,WAAW,EACX,YAAY,QAAQ,CAAC,EAAE,kCAAkC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM;YACN,MAAM;YACN,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,IAAI,wBAAoE,CAAC;IACzE,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,wBAAwB,GAAG,IAAI,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,EAAE;YACP,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,CAAC,CAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAA0C;gBAC/D,CAAC,CAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAA0C;SACzE,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;QACjF,wBAAwB,GAAG,sBAAsB,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,wBAAwB,CAAC,GAAG,CAC1B,IAAI,CAAC,EAAE,EACP,QAAQ;gBACN,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wBAAwB,GAAG,IAAI,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAyC,CAAC,CAAC,CAC1F,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,wEAAwE;IACxE,yEAAyE;IACzE,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACnF,MAAM,WAAW,GAAG,qBAAqB,CAAC;YACxC,MAAM;YACN,KAAK;YACL,OAAO;YACP,eAAe,EAAE,sBAAsB;YACvC,IAAI;SACL,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACrF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,MAAM,GAA8B;gBACxC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,MAAM,EAAE,SAAS;aAClB,CAAC;YACF,IAAI,WAAW,CAAC,YAAY;gBAAE,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;YAC7E,IAAI,WAAW,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YAC9D,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBAClC,SAAS,EAAE,EAAE;gBACb,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,MAAM;QACN,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import { duplicateValues } from \"../utilities/collections.js\";\nimport type { CompiledPipeline } from \"./pipeline-compiler.js\";\nimport type { StepIds, TargetIds } from \"./pipeline-definition.js\";\nimport { decideStepDisposition } from \"./pipeline-disposition.js\";\nimport { pipelineDiagnostic } from \"./pipeline-errors.js\";\nimport { compiledStepGraph, liveStepGraph, type CompiledStepGraph } from \"./pipeline-graph.js\";\nimport type { AnyStep } from \"./pipeline-steps.js\";\nimport { STEP_NESTED_PIPELINE, STEP_REMOTE } from \"./pipeline-step-metadata.js\";\nimport type {\n PipelineError,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRunControls,\n PipelineStepReport,\n PipelineStepSelectionReason,\n PipelineStepSkipReason,\n PipelineStepSkippedReport,\n StandardSchemaV1,\n} from \"./pipeline-types.js\";\n\nexport function stepToPlanStep<TOptions extends object>(\n step: AnyStep<TOptions>,\n selected: boolean,\n skipReason?: PipelineStepSkipReason,\n selectionReasons?: readonly PipelineStepSelectionReason[],\n graph: CompiledStepGraph<TOptions> = liveStepGraph(step)\n): PipelinePlanStep {\n const reasons = selectionReasons ?? [{ kind: \"all\" }];\n const planStep: PipelinePlanStep = {\n dependencies: graph.dependsOn.map((dep) => dep.id),\n description: step.description,\n ...(step.metadata === undefined ? {} : { metadata: step.metadata }),\n dryRun: step.dryRun === \"skip\" ? \"skip\" : step.dryRun !== undefined ? \"custom\" : \"run\",\n id: step.id,\n name: step.name,\n optionalDependencies: graph.optionalDependsOn.map((dep) => dep.id),\n runtimeSkipPossible: step.skip !== undefined,\n selected,\n selectionReasons: reasons,\n skipAfterFailureOf: graph.skipAfterFailureOf.map((dep) => dep.id),\n skipReason,\n };\n if (step[STEP_NESTED_PIPELINE]) {\n planStep.nestedPipeline = {\n ...step[STEP_NESTED_PIPELINE],\n stepIds: [...step[STEP_NESTED_PIPELINE].stepIds],\n };\n }\n if (step[STEP_REMOTE]) {\n planStep.remote = { ...step[STEP_REMOTE] };\n }\n return planStep;\n}\n\nfunction addSelectionReason(\n reasonsByStepId: Map<string, PipelineStepSelectionReason[]>,\n stepId: string,\n reason: PipelineStepSelectionReason\n): void {\n const reasons = reasonsByStepId.get(stepId) ?? [];\n const reasonKey = JSON.stringify(reason);\n if (!reasons.some((candidate) => JSON.stringify(candidate) === reasonKey)) {\n reasons.push(reason);\n reasonsByStepId.set(stepId, reasons);\n }\n}\n\nfunction targetSelectionReasons<TOptions extends object>(\n targets: readonly AnyStep<TOptions>[],\n stepGraph: ReadonlyMap<AnyStep, CompiledStepGraph>\n): Map<string, PipelineStepSelectionReason[]> {\n const reasonsByStepId = new Map<string, PipelineStepSelectionReason[]>();\n\n for (const target of targets) {\n addSelectionReason(reasonsByStepId, target.id, { kind: \"target\", targetId: target.id });\n const expanded = new Set<AnyStep<TOptions>>();\n const includePrerequisites = (step: AnyStep<TOptions>): void => {\n if (expanded.has(step)) return;\n expanded.add(step);\n\n const graph = compiledStepGraph({ stepGraph }, step);\n for (const dependency of graph.dependsOn) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"required-dependency\",\n targetId: target.id,\n });\n includePrerequisites(dependency);\n }\n for (const dependency of graph.skipAfterFailureOf) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"failure-gate\",\n targetId: target.id,\n });\n includePrerequisites(dependency);\n }\n for (const dependency of graph.optionalDependsOn) {\n addSelectionReason(reasonsByStepId, dependency.id, {\n dependentId: step.id,\n kind: \"optional-only\",\n targetId: target.id,\n });\n }\n };\n includePrerequisites(target);\n }\n\n return reasonsByStepId;\n}\n\nfunction selectsStep(reason: PipelineStepSelectionReason): boolean {\n return ![\"not-selected\", \"optional-only\", \"outside-target-closure\"].includes(reason.kind);\n}\n\nexport function buildPipelinePlan<\n TSteps extends readonly AnyStep[],\n TResult,\n TTargets extends readonly TSteps[number][],\n TResultSchema extends StandardSchemaV1 | undefined,\n>(\n compiled: CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>,\n controls: PipelineRunControls<StepIds<TSteps>, TargetIds<TTargets>>\n): PipelinePlan {\n const dryRun = controls.dryRun === true;\n const steps = compiled.orderedSteps;\n const errors: PipelineError[] = [];\n\n const knownStepIds = new Set(compiled.stepIds);\n const declaredTargetIds = new Set(compiled.declaredTargets.map((target) => target.id));\n const requestedStepIds = controls.stepIds ?? [];\n const requestedTargets = controls.targets ?? [];\n if (controls.cache !== undefined && ![\"use\", \"recompute\", \"bypass\"].includes(controls.cache)) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_RUN_CACHE_INVALID\",\n \"planning\",\n \"validation\",\n \"cache must be use, recompute, or bypass\"\n )\n );\n }\n const maxConcurrency = controls.maxConcurrency ?? 1;\n if (!Number.isInteger(maxConcurrency) || maxConcurrency < 1) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_RUN_CONCURRENCY_INVALID\",\n \"planning\",\n \"validation\",\n \"maxConcurrency must be a positive finite integer\"\n )\n );\n }\n if (controls.stepIds !== undefined && controls.targets !== undefined) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_SELECTION_CONFLICT\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} cannot combine exact stepIds filtering with dependency-aware targets`\n )\n );\n }\n if (controls.stepIds !== undefined && controls.stepIds.length === 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_SELECTION_EMPTY\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} received an empty stepIds array; omit stepIds to run every step, or pass at least one step id`\n )\n );\n }\n if (controls.targets !== undefined && controls.targets.length === 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_SELECTION_EMPTY\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} received an empty targets array; omit targets to run every step, or pass at least one target step id`\n )\n );\n }\n const duplicateRequestedStepIds = duplicateValues(requestedStepIds);\n if (duplicateRequestedStepIds.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_SELECTION_DUPLICATE\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested duplicate step ids: ${duplicateRequestedStepIds.join(\", \")}`\n )\n );\n }\n const unknownRequestedStepIds = requestedStepIds.filter((stepId) => !knownStepIds.has(stepId));\n if (unknownRequestedStepIds.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_STEP_UNKNOWN\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested unknown step ids: ${unknownRequestedStepIds.join(\", \")}`\n )\n );\n }\n const duplicateTargets = duplicateValues(requestedTargets);\n if (duplicateTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_SELECTION_DUPLICATE\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested duplicate targets: ${duplicateTargets.join(\", \")}`\n )\n );\n }\n const unknownTargets = requestedTargets.filter((stepId) => !knownStepIds.has(stepId));\n if (unknownTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_UNKNOWN\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested unknown targets: ${unknownTargets.join(\", \")}`\n )\n );\n }\n const undeclaredTargets = requestedTargets.filter(\n (stepId) => knownStepIds.has(stepId) && !declaredTargetIds.has(stepId)\n );\n if (undeclaredTargets.length > 0) {\n errors.push(\n pipelineDiagnostic(\n \"TUBELESS_PLANNING_TARGET_UNDECLARED\",\n \"planning\",\n \"selection\",\n `Pipeline ${compiled.id} requested undeclared targets: ${undeclaredTargets.join(\", \")}`\n )\n );\n }\n\n if (errors.length > 0) {\n return {\n dryRun,\n errors,\n ok: false,\n pipelineId: compiled.id,\n definition: compiled.definition,\n steps: [],\n };\n }\n\n let selectionReasonsByStepId: Map<string, PipelineStepSelectionReason[]>;\n if (controls.stepIds !== undefined) {\n const selectedIds = new Set(controls.stepIds);\n selectionReasonsByStepId = new Map(\n steps.map((step) => [\n step.id,\n selectedIds.has(step.id)\n ? ([{ kind: \"exact\" }] satisfies PipelineStepSelectionReason[])\n : ([{ kind: \"not-selected\" }] satisfies PipelineStepSelectionReason[]),\n ])\n );\n } else if (controls.targets !== undefined) {\n const stepsById = new Map(steps.map((step) => [step.id, step]));\n const selectedTargets = controls.targets.map((target) => stepsById.get(target)!);\n selectionReasonsByStepId = targetSelectionReasons(selectedTargets, compiled.stepGraph);\n for (const step of steps) {\n const reasons = selectionReasonsByStepId.get(step.id) ?? [];\n const selected = reasons.some(selectsStep);\n selectionReasonsByStepId.set(\n step.id,\n selected\n ? reasons.filter(selectsStep)\n : reasons.length > 0\n ? reasons\n : [{ kind: \"outside-target-closure\" }]\n );\n }\n } else {\n selectionReasonsByStepId = new Map(\n steps.map((step) => [step.id, [{ kind: \"all\" }] satisfies PipelineStepSelectionReason[]])\n );\n }\n const planSteps: PipelinePlanStep[] = [];\n // Accumulated planned skip/complete reports so later steps see the same\n // unmet-dependency chain as today's skipReason walk (not one empty map).\n const plannedReportsByStepId = new Map<string, PipelineStepReport>();\n for (const step of steps) {\n const selectionReasons = selectionReasonsByStepId.get(step.id)!;\n const selected = selectionReasons.some(selectsStep);\n const graph = compiledStepGraph(compiled, step);\n const planned = stepToPlanStep(step, selected, undefined, selectionReasons, graph);\n const disposition = decideStepDisposition({\n dryRun,\n graph,\n planned,\n reportsByStepId: plannedReportsByStepId,\n step,\n });\n const skipReason = disposition.kind === \"skip\" ? disposition.reason : undefined;\n const planStep = stepToPlanStep(step, selected, skipReason, selectionReasons, graph);\n planSteps.push(planStep);\n if (disposition.kind === \"skip\") {\n const report: PipelineStepSkippedReport = {\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: 0,\n reason: disposition.reason,\n status: \"skipped\",\n };\n if (disposition.dependencyId) report.dependencyId = disposition.dependencyId;\n if (disposition.message) report.message = disposition.message;\n plannedReportsByStepId.set(step.id, report);\n } else {\n // Synthetic complete so isRequiredDependencyMet treats will-run deps as met.\n plannedReportsByStepId.set(step.id, {\n attemptId: \"\",\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: 0,\n startedAtMs: 0,\n status: \"completed\",\n });\n }\n }\n\n return {\n dryRun,\n errors,\n ok: errors.length === 0,\n pipelineId: compiled.id,\n definition: compiled.definition,\n steps: planSteps,\n };\n}\n\nexport function planStepById(plan: PipelinePlan): Map<string, PipelinePlanStep> {\n return new Map(plan.steps.map((step) => [step.id, step]));\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PipelineMetadata } from "../tracing/graph-metadata.js";
|
|
2
|
+
import type { PipelinePlan, PipelinePlanStep } from "./pipeline-types.js";
|
|
3
|
+
/** Discovery filters combine with AND; tags require every exact, case-sensitive tag. */
|
|
4
|
+
export interface PipelineStepQuery {
|
|
5
|
+
readonly tags?: readonly string[];
|
|
6
|
+
readonly owner?: string;
|
|
7
|
+
readonly domain?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function matchesStepQuery(metadata: PipelineMetadata | undefined, query: PipelineStepQuery): boolean;
|
|
10
|
+
/** Return matching plan steps in execution order without changing selection or including prerequisites. */
|
|
11
|
+
export declare function querySteps(plan: PipelinePlan, query?: PipelineStepQuery): PipelinePlanStep[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function matchesStepQuery(metadata, query) {
|
|
2
|
+
return ((query.owner === undefined || metadata?.owner === query.owner) &&
|
|
3
|
+
(query.domain === undefined || metadata?.domain === query.domain) &&
|
|
4
|
+
(query.tags === undefined || query.tags.every((tag) => metadata?.tags?.includes(tag))));
|
|
5
|
+
}
|
|
6
|
+
/** Return matching plan steps in execution order without changing selection or including prerequisites. */
|
|
7
|
+
export function querySteps(plan, query = {}) {
|
|
8
|
+
return plan.steps.filter((step) => matchesStepQuery(step.metadata, query));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=pipeline-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-query.js","sourceRoot":"","sources":["../../src/core/pipeline-query.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,gBAAgB,CAC9B,QAAsC,EACtC,KAAwB;IAExB,OAAO,CACL,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;QAC9D,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;QACjE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CACvF,CAAC;AACJ,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,UAAU,CAAC,IAAkB,EAAE,KAAK,GAAsB,EAAE;IAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["import type { PipelineMetadata } from \"../tracing/graph-metadata.js\";\nimport type { PipelinePlan, PipelinePlanStep } from \"./pipeline-types.js\";\n\n/** Discovery filters combine with AND; tags require every exact, case-sensitive tag. */\nexport interface PipelineStepQuery {\n readonly tags?: readonly string[];\n readonly owner?: string;\n readonly domain?: string;\n}\n\nexport function matchesStepQuery(\n metadata: PipelineMetadata | undefined,\n query: PipelineStepQuery\n): boolean {\n return (\n (query.owner === undefined || metadata?.owner === query.owner) &&\n (query.domain === undefined || metadata?.domain === query.domain) &&\n (query.tags === undefined || query.tags.every((tag) => metadata?.tags?.includes(tag)))\n );\n}\n\n/** Return matching plan steps in execution order without changing selection or including prerequisites. */\nexport function querySteps(plan: PipelinePlan, query: PipelineStepQuery = {}): PipelinePlanStep[] {\n return plan.steps.filter((step) => matchesStepQuery(step.metadata, query));\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PipelineLifecycleObserver } from "./lifecycle.js";
|
|
2
2
|
import type { PipelineError, PipelinePlan, PipelinePlanStep, PipelineRun, PipelineStepProgress, PipelineStepReport, PipelineStepSkipReason } from "./pipeline-types.js";
|
|
3
3
|
export interface PipelineStepAttempt {
|
|
4
|
-
outputSource?: "override";
|
|
4
|
+
outputSource?: "override" | "cache";
|
|
5
5
|
attemptId: string;
|
|
6
6
|
startedAtMs: number;
|
|
7
7
|
}
|
|
@@ -27,7 +27,7 @@ export declare class PipelineRunState<TResult> {
|
|
|
27
27
|
get reportsByStepId(): ReadonlyMap<string, PipelineStepReport>;
|
|
28
28
|
start(plan: PipelinePlan, targetIds: readonly string[]): void;
|
|
29
29
|
planStep(step: PipelinePlanStep): void;
|
|
30
|
-
beginAttempt(step: PipelinePlanStep, startedAtMs?: number, outputSource?: "override"): PipelineStepAttempt;
|
|
30
|
+
beginAttempt(step: PipelinePlanStep, startedAtMs?: number, outputSource?: "override" | "cache"): PipelineStepAttempt;
|
|
31
31
|
reportProgress(step: PipelinePlanStep, attempt: PipelineStepAttempt, progress: PipelineStepProgress): void;
|
|
32
32
|
completeStep(step: PipelinePlanStep, attempt: PipelineStepAttempt, value: unknown): void;
|
|
33
33
|
skipStep(step: PipelinePlanStep, input: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-run-state.js","sourceRoot":"","sources":["../../src/core/pipeline-run-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { isCancellationOnly } from \"./pipeline-execution-error.js\";\nimport type { PipelineLifecycleObserver } from \"./lifecycle.js\";\nimport { RUN_MODEL_VERSION } from \"./pipeline-ids.js\";\nimport type {\n PipelineError,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunStatus,\n PipelineStepCancelledReport,\n PipelineStepCompleteReport,\n PipelineStepFailedReport,\n PipelineStepProgress,\n PipelineStepReport,\n PipelineStepSkipReason,\n PipelineStepSkippedReport,\n PipelineStepStatus,\n} from \"./pipeline-types.js\";\n\nexport interface PipelineStepAttempt {\n outputSource?: \"override\";\n attemptId: string;\n startedAtMs: number;\n}\n\ntype RunPhase = \"created\" | \"finalizing\" | \"finished\" | \"running\";\n\ntype StepTransitionEffects = {\n error?: { record: boolean; value: PipelineError };\n output?: { value: unknown };\n};\n\ntype PipelineFinalization<TResult> =\n | { finalized: false; value: undefined }\n | { finalized: true; value: TResult };\n\nfunction terminalRunStatus(errors: readonly PipelineError[]): PipelineRunStatus {\n if (errors.length === 0) return \"completed\";\n return isCancellationOnly(errors) ? \"cancelled\" : \"failed\";\n}\n\nfunction stepReportFromStatus(\n event: Exclude<PipelineStepStatus, { status: \"planned\" | \"running\" }>\n): PipelineStepReport {\n const base = {\n id: event.id,\n name: event.name,\n description: event.description,\n finishedAtMs: event.finishedAtMs,\n ...(event.outputSource ? { outputSource: event.outputSource } : {}),\n };\n switch (event.status) {\n case \"completed\":\n return {\n ...base,\n attemptId: event.attemptId,\n startedAtMs: event.startedAtMs,\n status: \"completed\",\n };\n case \"failed\":\n return {\n ...base,\n attemptId: event.attemptId,\n error: event.error,\n startedAtMs: event.startedAtMs,\n status: \"failed\",\n };\n case \"cancelled\": {\n const report: PipelineStepCancelledReport = {\n ...base,\n error: event.error,\n status: \"cancelled\",\n };\n if (event.attemptId) report.attemptId = event.attemptId;\n if (event.startedAtMs !== undefined) report.startedAtMs = event.startedAtMs;\n return report;\n }\n case \"skipped\": {\n const report: PipelineStepSkippedReport = {\n ...base,\n reason: event.reason,\n status: \"skipped\",\n };\n if (event.attemptId) report.attemptId = event.attemptId;\n if (event.startedAtMs !== undefined) report.startedAtMs = event.startedAtMs;\n if (event.dependencyId) report.dependencyId = event.dependencyId;\n if (event.message) report.message = event.message;\n return report;\n }\n }\n}\n\nexport class PipelineRunState<TResult> {\n readonly #currentStepStatuses = new Map<string, PipelineStepStatus[\"status\"]>();\n readonly #errors: PipelineError[] = [];\n readonly #runErrors = new Set<PipelineError>();\n readonly #outputs = new Map<string, unknown>();\n readonly #stepOrder = new Map<string, number>();\n readonly #reportsByStepId = new Map<string, PipelineStepReport>();\n #definitionIdentity: PipelineRun[\"definitionIdentity\"];\n #finalizationAttempted = false;\n #finalization: PipelineFinalization<TResult> = { finalized: false, value: undefined };\n #nextAttemptSequence = 0;\n #phase: RunPhase = \"created\";\n\n constructor(\n readonly pipelineId: string,\n readonly dryRun: boolean,\n readonly startedAtMs: number,\n readonly identity: { correlationId?: string; parentRunId?: string; runId: string },\n readonly now: () => number,\n readonly lifecycle: Pick<\n PipelineLifecycleObserver,\n | \"pipelineStart\"\n | \"stepStatus\"\n | \"finalizeStart\"\n | \"finalizeComplete\"\n | \"finalizeError\"\n | \"pipelineComplete\"\n | \"flush\"\n >\n ) {}\n\n get errors(): readonly PipelineError[] {\n return this.#errors;\n }\n\n get outputs(): ReadonlyMap<string, unknown> {\n return this.#outputs;\n }\n\n get reportsByStepId(): ReadonlyMap<string, PipelineStepReport> {\n return this.#reportsByStepId;\n }\n\n start(plan: PipelinePlan, targetIds: readonly string[]): void {\n this.#expectPhase(\"created\");\n this.#phase = \"running\";\n this.#definitionIdentity = plan.definition?.identity;\n plan.steps.forEach((step, index) => this.#stepOrder.set(step.id, index));\n this.lifecycle.pipelineStart(plan, targetIds);\n }\n\n planStep(step: PipelinePlanStep): void {\n this.#applyStepStatus({ pipelineId: this.pipelineId, status: \"planned\", step });\n }\n\n beginAttempt(\n step: PipelinePlanStep,\n startedAtMs = this.now(),\n outputSource?: \"override\"\n ): PipelineStepAttempt {\n const attempt = {\n attemptId: `${this.identity.runId}:attempt:${(this.#nextAttemptSequence += 1).toString(36)}`,\n startedAtMs,\n ...(outputSource ? { outputSource } : {}),\n };\n this.#applyStepStatus({\n attemptId: attempt.attemptId,\n ...(attempt.outputSource ? { outputSource: attempt.outputSource } : {}),\n pipelineId: this.pipelineId,\n status: \"running\",\n step,\n });\n return attempt;\n }\n\n reportProgress(\n step: PipelinePlanStep,\n attempt: PipelineStepAttempt,\n progress: PipelineStepProgress\n ): void {\n this.#applyStepStatus({\n attemptId: attempt.attemptId,\n ...(attempt.outputSource ? { outputSource: attempt.outputSource } : {}),\n pipelineId: this.pipelineId,\n progress,\n status: \"running\",\n step,\n });\n }\n\n completeStep(step: PipelinePlanStep, attempt: PipelineStepAttempt, value: unknown): void {\n const report: PipelineStepCompleteReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: this.now(),\n status: \"completed\",\n };\n this.#applyStepStatus({ ...report, pipelineId: this.pipelineId, step }, { output: { value } });\n }\n\n skipStep(\n step: PipelinePlanStep,\n input: {\n attempt?: PipelineStepAttempt;\n dependencyId?: string;\n message?: string;\n output?: { value: unknown };\n reason: PipelineStepSkipReason;\n }\n ): void {\n const report: PipelineStepSkippedReport = {\n ...input.attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: this.now(),\n reason: input.reason,\n status: \"skipped\",\n };\n if (input.dependencyId) report.dependencyId = input.dependencyId;\n if (input.message) report.message = input.message;\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n input.output ? { output: input.output } : undefined\n );\n }\n\n failStep(step: PipelinePlanStep, attempt: PipelineStepAttempt, error: PipelineError): void {\n if (error.kind === \"cancellation\") {\n this.cancelStep(step, error, true, attempt);\n return;\n }\n const report: PipelineStepFailedReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n error,\n finishedAtMs: this.now(),\n status: \"failed\",\n };\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n { error: { record: true, value: error } }\n );\n }\n\n cancelStep(\n step: PipelinePlanStep,\n error: PipelineError,\n recordError: boolean,\n attempt?: PipelineStepAttempt\n ): void {\n const report: PipelineStepCancelledReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n error,\n finishedAtMs: this.now(),\n status: \"cancelled\",\n };\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n { error: { record: recordError, value: error } }\n );\n }\n\n recordRunErrors(errors: readonly PipelineError[]): void {\n this.#expectPhase(\"running\");\n for (const error of errors) this.#runErrors.add(error);\n this.#errors.push(...errors);\n }\n\n beginFinalization(): void {\n this.#expectPhase(\"running\");\n this.#expectAllStepsTerminal();\n if (this.#finalizationAttempted) throw new Error(\"Pipeline finalization already attempted\");\n this.#finalizationAttempted = true;\n this.#phase = \"finalizing\";\n this.lifecycle.finalizeStart();\n }\n\n completeFinalization(value: TResult, durationMs: number): void {\n this.#expectPhase(\"finalizing\");\n this.#finalization = { finalized: true, value };\n this.#phase = \"running\";\n this.lifecycle.finalizeComplete(durationMs, value);\n }\n\n failFinalization(error: PipelineError, durationMs: number): void {\n this.#expectPhase(\"finalizing\");\n this.#errors.push(error);\n this.#phase = \"running\";\n this.lifecycle.finalizeError(error, durationMs);\n }\n\n async finish(): Promise<PipelineRun<TResult>> {\n this.#expectPhase(\"running\");\n this.#expectAllStepsTerminal();\n this.#phase = \"finished\";\n const errorOrder = (error: PipelineError): number => {\n // A run-level diagnostic may identify a step without becoming a step failure.\n if (this.#runErrors.has(error)) return -1;\n if (error.phase === \"finalization\") return this.#stepOrder.size;\n return error.stepId === undefined ? -1 : (this.#stepOrder.get(error.stepId) ?? -1);\n };\n // Live observations retain event order; only the finished record is ordered by plan.\n const errors = [...this.#errors].sort((left, right) => errorOrder(left) - errorOrder(right));\n const steps = [...this.#reportsByStepId.values()].sort(\n (left, right) => this.#stepOrder.get(left.id)! - this.#stepOrder.get(right.id)!\n );\n const result: PipelineRun<TResult> = {\n pipelineId: this.pipelineId,\n dryRun: this.dryRun,\n errors,\n finishedAtMs: this.now(),\n runId: this.identity.runId,\n startedAtMs: this.startedAtMs,\n status: terminalRunStatus(this.#errors),\n steps,\n version: RUN_MODEL_VERSION,\n ...this.#finalization,\n };\n if (this.#definitionIdentity) result.definitionIdentity = this.#definitionIdentity;\n if (this.identity.correlationId !== undefined) {\n result.correlationId = this.identity.correlationId;\n }\n if (this.identity.parentRunId) result.parentRunId = this.identity.parentRunId;\n this.lifecycle.pipelineComplete(result);\n await this.lifecycle.flush();\n return result;\n }\n\n #applyStepStatus(event: PipelineStepStatus, effects: StepTransitionEffects = {}): void {\n this.#expectPhase(\"running\");\n const previous = this.#currentStepStatuses.get(event.step.id);\n const valid =\n (previous === undefined && event.status === \"planned\") ||\n (previous === \"planned\" &&\n (event.status === \"running\" ||\n event.status === \"skipped\" ||\n event.status === \"cancelled\")) ||\n (previous === \"running\" &&\n (event.status === \"running\" ||\n event.status === \"completed\" ||\n event.status === \"skipped\" ||\n event.status === \"cancelled\" ||\n event.status === \"failed\"));\n if (!valid) {\n throw new Error(\n `Invalid step status transition for ${event.step.id}: ${previous ?? \"unobserved\"} -> ${event.status}`\n );\n }\n\n this.#currentStepStatuses.set(event.step.id, event.status);\n if (event.status !== \"planned\" && event.status !== \"running\") {\n const report = stepReportFromStatus(event);\n this.#reportsByStepId.set(event.step.id, report);\n }\n if (effects.output) this.#outputs.set(event.step.id, effects.output.value);\n if (effects.error?.record) this.#errors.push(effects.error.value);\n this.lifecycle.stepStatus(event);\n }\n\n #expectPhase(expected: RunPhase): void {\n if (this.#phase !== expected) {\n throw new Error(\n `Invalid pipeline run transition: expected ${expected}, found ${this.#phase}`\n );\n }\n }\n\n #expectAllStepsTerminal(): void {\n for (const [stepId, status] of this.#currentStepStatuses) {\n if (status === \"planned\" || status === \"running\") {\n throw new Error(`Cannot finish pipeline run while step ${stepId} is ${status}`);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pipeline-run-state.js","sourceRoot":"","sources":["../../src/core/pipeline-run-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { isCancellationOnly } from \"./pipeline-execution-error.js\";\nimport type { PipelineLifecycleObserver } from \"./lifecycle.js\";\nimport { RUN_MODEL_VERSION } from \"./pipeline-ids.js\";\nimport type {\n PipelineError,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunStatus,\n PipelineStepCancelledReport,\n PipelineStepCompleteReport,\n PipelineStepFailedReport,\n PipelineStepProgress,\n PipelineStepReport,\n PipelineStepSkipReason,\n PipelineStepSkippedReport,\n PipelineStepStatus,\n} from \"./pipeline-types.js\";\n\nexport interface PipelineStepAttempt {\n outputSource?: \"override\" | \"cache\";\n attemptId: string;\n startedAtMs: number;\n}\n\ntype RunPhase = \"created\" | \"finalizing\" | \"finished\" | \"running\";\n\ntype StepTransitionEffects = {\n error?: { record: boolean; value: PipelineError };\n output?: { value: unknown };\n};\n\ntype PipelineFinalization<TResult> =\n | { finalized: false; value: undefined }\n | { finalized: true; value: TResult };\n\nfunction terminalRunStatus(errors: readonly PipelineError[]): PipelineRunStatus {\n if (errors.length === 0) return \"completed\";\n return isCancellationOnly(errors) ? \"cancelled\" : \"failed\";\n}\n\nfunction stepReportFromStatus(\n event: Exclude<PipelineStepStatus, { status: \"planned\" | \"running\" }>\n): PipelineStepReport {\n const base = {\n id: event.id,\n name: event.name,\n description: event.description,\n finishedAtMs: event.finishedAtMs,\n ...(event.outputSource ? { outputSource: event.outputSource } : {}),\n };\n switch (event.status) {\n case \"completed\":\n return {\n ...base,\n attemptId: event.attemptId,\n startedAtMs: event.startedAtMs,\n status: \"completed\",\n };\n case \"failed\":\n return {\n ...base,\n attemptId: event.attemptId,\n error: event.error,\n startedAtMs: event.startedAtMs,\n status: \"failed\",\n };\n case \"cancelled\": {\n const report: PipelineStepCancelledReport = {\n ...base,\n error: event.error,\n status: \"cancelled\",\n };\n if (event.attemptId) report.attemptId = event.attemptId;\n if (event.startedAtMs !== undefined) report.startedAtMs = event.startedAtMs;\n return report;\n }\n case \"skipped\": {\n const report: PipelineStepSkippedReport = {\n ...base,\n reason: event.reason,\n status: \"skipped\",\n };\n if (event.attemptId) report.attemptId = event.attemptId;\n if (event.startedAtMs !== undefined) report.startedAtMs = event.startedAtMs;\n if (event.dependencyId) report.dependencyId = event.dependencyId;\n if (event.message) report.message = event.message;\n return report;\n }\n }\n}\n\nexport class PipelineRunState<TResult> {\n readonly #currentStepStatuses = new Map<string, PipelineStepStatus[\"status\"]>();\n readonly #errors: PipelineError[] = [];\n readonly #runErrors = new Set<PipelineError>();\n readonly #outputs = new Map<string, unknown>();\n readonly #stepOrder = new Map<string, number>();\n readonly #reportsByStepId = new Map<string, PipelineStepReport>();\n #definitionIdentity: PipelineRun[\"definitionIdentity\"];\n #finalizationAttempted = false;\n #finalization: PipelineFinalization<TResult> = { finalized: false, value: undefined };\n #nextAttemptSequence = 0;\n #phase: RunPhase = \"created\";\n\n constructor(\n readonly pipelineId: string,\n readonly dryRun: boolean,\n readonly startedAtMs: number,\n readonly identity: { correlationId?: string; parentRunId?: string; runId: string },\n readonly now: () => number,\n readonly lifecycle: Pick<\n PipelineLifecycleObserver,\n | \"pipelineStart\"\n | \"stepStatus\"\n | \"finalizeStart\"\n | \"finalizeComplete\"\n | \"finalizeError\"\n | \"pipelineComplete\"\n | \"flush\"\n >\n ) {}\n\n get errors(): readonly PipelineError[] {\n return this.#errors;\n }\n\n get outputs(): ReadonlyMap<string, unknown> {\n return this.#outputs;\n }\n\n get reportsByStepId(): ReadonlyMap<string, PipelineStepReport> {\n return this.#reportsByStepId;\n }\n\n start(plan: PipelinePlan, targetIds: readonly string[]): void {\n this.#expectPhase(\"created\");\n this.#phase = \"running\";\n this.#definitionIdentity = plan.definition?.identity;\n plan.steps.forEach((step, index) => this.#stepOrder.set(step.id, index));\n this.lifecycle.pipelineStart(plan, targetIds);\n }\n\n planStep(step: PipelinePlanStep): void {\n this.#applyStepStatus({ pipelineId: this.pipelineId, status: \"planned\", step });\n }\n\n beginAttempt(\n step: PipelinePlanStep,\n startedAtMs = this.now(),\n outputSource?: \"override\" | \"cache\"\n ): PipelineStepAttempt {\n const attempt = {\n attemptId: `${this.identity.runId}:attempt:${(this.#nextAttemptSequence += 1).toString(36)}`,\n startedAtMs,\n ...(outputSource ? { outputSource } : {}),\n };\n this.#applyStepStatus({\n attemptId: attempt.attemptId,\n ...(attempt.outputSource ? { outputSource: attempt.outputSource } : {}),\n pipelineId: this.pipelineId,\n status: \"running\",\n step,\n });\n return attempt;\n }\n\n reportProgress(\n step: PipelinePlanStep,\n attempt: PipelineStepAttempt,\n progress: PipelineStepProgress\n ): void {\n this.#applyStepStatus({\n attemptId: attempt.attemptId,\n ...(attempt.outputSource ? { outputSource: attempt.outputSource } : {}),\n pipelineId: this.pipelineId,\n progress,\n status: \"running\",\n step,\n });\n }\n\n completeStep(step: PipelinePlanStep, attempt: PipelineStepAttempt, value: unknown): void {\n const report: PipelineStepCompleteReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: this.now(),\n status: \"completed\",\n };\n this.#applyStepStatus({ ...report, pipelineId: this.pipelineId, step }, { output: { value } });\n }\n\n skipStep(\n step: PipelinePlanStep,\n input: {\n attempt?: PipelineStepAttempt;\n dependencyId?: string;\n message?: string;\n output?: { value: unknown };\n reason: PipelineStepSkipReason;\n }\n ): void {\n const report: PipelineStepSkippedReport = {\n ...input.attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n finishedAtMs: this.now(),\n reason: input.reason,\n status: \"skipped\",\n };\n if (input.dependencyId) report.dependencyId = input.dependencyId;\n if (input.message) report.message = input.message;\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n input.output ? { output: input.output } : undefined\n );\n }\n\n failStep(step: PipelinePlanStep, attempt: PipelineStepAttempt, error: PipelineError): void {\n if (error.kind === \"cancellation\") {\n this.cancelStep(step, error, true, attempt);\n return;\n }\n const report: PipelineStepFailedReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n error,\n finishedAtMs: this.now(),\n status: \"failed\",\n };\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n { error: { record: true, value: error } }\n );\n }\n\n cancelStep(\n step: PipelinePlanStep,\n error: PipelineError,\n recordError: boolean,\n attempt?: PipelineStepAttempt\n ): void {\n const report: PipelineStepCancelledReport = {\n ...attempt,\n id: step.id,\n name: step.name,\n description: step.description,\n error,\n finishedAtMs: this.now(),\n status: \"cancelled\",\n };\n this.#applyStepStatus(\n { ...report, pipelineId: this.pipelineId, step },\n { error: { record: recordError, value: error } }\n );\n }\n\n recordRunErrors(errors: readonly PipelineError[]): void {\n this.#expectPhase(\"running\");\n for (const error of errors) this.#runErrors.add(error);\n this.#errors.push(...errors);\n }\n\n beginFinalization(): void {\n this.#expectPhase(\"running\");\n this.#expectAllStepsTerminal();\n if (this.#finalizationAttempted) throw new Error(\"Pipeline finalization already attempted\");\n this.#finalizationAttempted = true;\n this.#phase = \"finalizing\";\n this.lifecycle.finalizeStart();\n }\n\n completeFinalization(value: TResult, durationMs: number): void {\n this.#expectPhase(\"finalizing\");\n this.#finalization = { finalized: true, value };\n this.#phase = \"running\";\n this.lifecycle.finalizeComplete(durationMs, value);\n }\n\n failFinalization(error: PipelineError, durationMs: number): void {\n this.#expectPhase(\"finalizing\");\n this.#errors.push(error);\n this.#phase = \"running\";\n this.lifecycle.finalizeError(error, durationMs);\n }\n\n async finish(): Promise<PipelineRun<TResult>> {\n this.#expectPhase(\"running\");\n this.#expectAllStepsTerminal();\n this.#phase = \"finished\";\n const errorOrder = (error: PipelineError): number => {\n // A run-level diagnostic may identify a step without becoming a step failure.\n if (this.#runErrors.has(error)) return -1;\n if (error.phase === \"finalization\") return this.#stepOrder.size;\n return error.stepId === undefined ? -1 : (this.#stepOrder.get(error.stepId) ?? -1);\n };\n // Live observations retain event order; only the finished record is ordered by plan.\n const errors = [...this.#errors].sort((left, right) => errorOrder(left) - errorOrder(right));\n const steps = [...this.#reportsByStepId.values()].sort(\n (left, right) => this.#stepOrder.get(left.id)! - this.#stepOrder.get(right.id)!\n );\n const result: PipelineRun<TResult> = {\n pipelineId: this.pipelineId,\n dryRun: this.dryRun,\n errors,\n finishedAtMs: this.now(),\n runId: this.identity.runId,\n startedAtMs: this.startedAtMs,\n status: terminalRunStatus(this.#errors),\n steps,\n version: RUN_MODEL_VERSION,\n ...this.#finalization,\n };\n if (this.#definitionIdentity) result.definitionIdentity = this.#definitionIdentity;\n if (this.identity.correlationId !== undefined) {\n result.correlationId = this.identity.correlationId;\n }\n if (this.identity.parentRunId) result.parentRunId = this.identity.parentRunId;\n this.lifecycle.pipelineComplete(result);\n await this.lifecycle.flush();\n return result;\n }\n\n #applyStepStatus(event: PipelineStepStatus, effects: StepTransitionEffects = {}): void {\n this.#expectPhase(\"running\");\n const previous = this.#currentStepStatuses.get(event.step.id);\n const valid =\n (previous === undefined && event.status === \"planned\") ||\n (previous === \"planned\" &&\n (event.status === \"running\" ||\n event.status === \"skipped\" ||\n event.status === \"cancelled\")) ||\n (previous === \"running\" &&\n (event.status === \"running\" ||\n event.status === \"completed\" ||\n event.status === \"skipped\" ||\n event.status === \"cancelled\" ||\n event.status === \"failed\"));\n if (!valid) {\n throw new Error(\n `Invalid step status transition for ${event.step.id}: ${previous ?? \"unobserved\"} -> ${event.status}`\n );\n }\n\n this.#currentStepStatuses.set(event.step.id, event.status);\n if (event.status !== \"planned\" && event.status !== \"running\") {\n const report = stepReportFromStatus(event);\n this.#reportsByStepId.set(event.step.id, report);\n }\n if (effects.output) this.#outputs.set(event.step.id, effects.output.value);\n if (effects.error?.record) this.#errors.push(effects.error.value);\n this.lifecycle.stepStatus(event);\n }\n\n #expectPhase(expected: RunPhase): void {\n if (this.#phase !== expected) {\n throw new Error(\n `Invalid pipeline run transition: expected ${expected}, found ${this.#phase}`\n );\n }\n }\n\n #expectAllStepsTerminal(): void {\n for (const [stepId, status] of this.#currentStepStatuses) {\n if (status === \"planned\" || status === \"running\") {\n throw new Error(`Cannot finish pipeline run while step ${stepId} is ${status}`);\n }\n }\n }\n}\n"]}
|
|
@@ -10,6 +10,8 @@ export declare function evaluateStepSkip<TOptions extends object>(step: AnyStep<
|
|
|
10
10
|
export declare function validateStepOutput<TOptions extends object>(step: AnyStep<TOptions>, value: unknown, boundary: string): Promise<unknown>;
|
|
11
11
|
export declare function executeStepAttempt<TOptions extends object>(input: {
|
|
12
12
|
attemptId: string;
|
|
13
|
+
pipelineId: string;
|
|
14
|
+
onCacheHit?(): void;
|
|
13
15
|
context: PipelineExecutionContext<TOptions>;
|
|
14
16
|
dryRun: boolean;
|
|
15
17
|
inputs: Record<string, unknown>;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { STEP_CACHE } from "./pipeline-step-metadata.js";
|
|
2
|
+
import { executeWithStepCache } from "./pipeline-cache.js";
|
|
1
3
|
import { artifactRecordSchema } from "../tracing/artifact-metadata.js";
|
|
2
4
|
import { validateStandardSchema } from "./pipeline-validation.js";
|
|
3
5
|
function normalizeStepSkipDecision(decision) {
|
|
@@ -45,16 +47,29 @@ export async function executeStepAttempt(input) {
|
|
|
45
47
|
input.onProgress(progress);
|
|
46
48
|
},
|
|
47
49
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
input.dryRun && typeof step.dryRun === "function"
|
|
50
|
+
const run = async () => {
|
|
51
|
+
try {
|
|
52
|
+
return input.dryRun && typeof step.dryRun === "function"
|
|
52
53
|
? await step.dryRun(input.inputs, stepContext)
|
|
53
54
|
: await step.run(input.inputs, stepContext);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
acceptsReports = false;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
return executeWithStepCache({
|
|
61
|
+
cache: step[STEP_CACHE],
|
|
62
|
+
pipelineId: input.pipelineId,
|
|
63
|
+
stepId: step.id,
|
|
64
|
+
inputs: input.inputs,
|
|
65
|
+
context: input.context,
|
|
66
|
+
run,
|
|
67
|
+
onArtifact: (record) => input.onArtifact?.(record, false),
|
|
68
|
+
validate: (value) => validateStepOutput(step, value, input.outputBoundary),
|
|
69
|
+
onHit: () => {
|
|
70
|
+
acceptsReports = false;
|
|
71
|
+
input.onCacheHit?.();
|
|
72
|
+
},
|
|
73
|
+
});
|
|
59
74
|
}
|
|
60
75
|
//# sourceMappingURL=pipeline-step-executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-step-executor.js","sourceRoot":"","sources":["../../src/core/pipeline-step-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,iCAAiC,CAAC;AAS5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,SAAS,yBAAyB,CAAC,QAA0B;IAC3D,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAuB,EACvB,MAA+B,EAC/B,OAA2C;IAE3C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,yBAAyB,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAuB,EACvB,KAAc,EACd,QAAgB;IAEhB,OAAO,IAAI,CAAC,YAAY;QACtB,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC;QAC5D,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAA0B,
|
|
1
|
+
{"version":3,"file":"pipeline-step-executor.js","sourceRoot":"","sources":["../../src/core/pipeline-step-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { STEP_CACHE } from \"./pipeline-step-metadata.js\";\nimport { executeWithStepCache } from \"./pipeline-cache.js\";\nimport { artifactRecordSchema, type ArtifactRecord } from \"../tracing/artifact-metadata.js\";\nimport type { AnyStep } from \"./pipeline-steps.js\";\nimport type {\n PipelineExecutionContext,\n PipelineLogger,\n PipelineStepProgress,\n StepSkipDecision,\n} from \"./pipeline-types.js\";\nimport type { PipelineTraceAttributes } from \"../tracing/tracing-contracts.js\";\nimport { validateStandardSchema } from \"./pipeline-validation.js\";\n\nexport interface NormalizedStepSkipDecision {\n reason: string;\n value?: unknown;\n}\n\nfunction normalizeStepSkipDecision(decision: StepSkipDecision): NormalizedStepSkipDecision | null {\n if (decision == null || decision === false) return null;\n if (typeof decision === \"string\") {\n const reason = decision.trim();\n return reason.length > 0 ? { reason } : null;\n }\n if (typeof decision === \"object\" && typeof decision.reason === \"string\") {\n const reason = decision.reason.trim();\n if (reason.length === 0) return null;\n return { reason, value: decision.value };\n }\n return null;\n}\n\nexport async function evaluateStepSkip<TOptions extends object>(\n step: AnyStep<TOptions>,\n inputs: Record<string, unknown>,\n context: PipelineExecutionContext<TOptions>\n): Promise<NormalizedStepSkipDecision | null> {\n if (typeof step.skip !== \"function\") return null;\n return normalizeStepSkipDecision(await step.skip(inputs, context));\n}\n\nexport async function validateStepOutput<TOptions extends object>(\n step: AnyStep<TOptions>,\n value: unknown,\n boundary: string\n): Promise<unknown> {\n return step.outputSchema\n ? validateStandardSchema(step.outputSchema, value, boundary)\n : Promise.resolve(value);\n}\n\nexport async function executeStepAttempt<TOptions extends object>(input: {\n attemptId: string;\n pipelineId: string;\n onCacheHit?(): void;\n context: PipelineExecutionContext<TOptions>;\n dryRun: boolean;\n inputs: Record<string, unknown>;\n log: PipelineLogger;\n onArtifact?(record: ArtifactRecord, preview: boolean): void;\n onProgress(progress: PipelineStepProgress): void;\n onReportAttempt(attempt: number, attributes?: PipelineTraceAttributes): void;\n outputBoundary: string;\n step: AnyStep<TOptions>;\n}): Promise<unknown> {\n const { step } = input;\n let acceptsReports = true;\n const stepContext = {\n ...input.context,\n recordArtifact: (record: ArtifactRecord) => {\n if (!acceptsReports) return;\n const snapshot = artifactRecordSchema.decode(record, \"artifact record\");\n const preview =\n input.dryRun && (typeof step.dryRun === \"function\" || snapshot.operation === \"write\");\n input.onArtifact?.(snapshot, preview);\n },\n attemptId: input.attemptId,\n log: input.log,\n reportAttempt: input.onReportAttempt,\n reportProgress: (progress: PipelineStepProgress) => {\n if (acceptsReports) input.onProgress(progress);\n },\n };\n const run = async () => {\n try {\n return input.dryRun && typeof step.dryRun === \"function\"\n ? await step.dryRun(input.inputs, stepContext)\n : await step.run(input.inputs, stepContext);\n } finally {\n acceptsReports = false;\n }\n };\n return executeWithStepCache({\n cache: step[STEP_CACHE],\n pipelineId: input.pipelineId,\n stepId: step.id,\n inputs: input.inputs,\n context: input.context,\n run,\n onArtifact: (record) => input.onArtifact?.(record, false),\n validate: (value) => validateStepOutput(step, value, input.outputBoundary),\n onHit: () => {\n acceptsReports = false;\n input.onCacheHit?.();\n },\n });\n}\n"]}
|
|
@@ -2,3 +2,4 @@ export declare const PIPELINE_FINALIZE_STEP_ID = "__finalize__";
|
|
|
2
2
|
export declare const STEP_OPTIONS_SCHEMA: unique symbol;
|
|
3
3
|
export declare const STEP_NESTED_PIPELINE: unique symbol;
|
|
4
4
|
export declare const STEP_REMOTE: unique symbol;
|
|
5
|
+
export declare const STEP_CACHE: unique symbol;
|
|
@@ -2,4 +2,5 @@ export const PIPELINE_FINALIZE_STEP_ID = "__finalize__";
|
|
|
2
2
|
export const STEP_OPTIONS_SCHEMA = Symbol("tubeless.stepOptionsSchema");
|
|
3
3
|
export const STEP_NESTED_PIPELINE = Symbol("tubeless.stepNestedPipeline");
|
|
4
4
|
export const STEP_REMOTE = Symbol("tubeless.stepRemote");
|
|
5
|
+
export const STEP_CACHE = Symbol("tubeless.stepCache");
|
|
5
6
|
//# sourceMappingURL=pipeline-step-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-step-metadata.js","sourceRoot":"","sources":["../../src/core/pipeline-step-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,6BAA6B,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,qBAAqB,CAAC,CAAC","sourcesContent":["export const PIPELINE_FINALIZE_STEP_ID = \"__finalize__\";\n\nexport const STEP_OPTIONS_SCHEMA: unique symbol = Symbol(\"tubeless.stepOptionsSchema\");\nexport const STEP_NESTED_PIPELINE: unique symbol = Symbol(\"tubeless.stepNestedPipeline\");\nexport const STEP_REMOTE: unique symbol = Symbol(\"tubeless.stepRemote\");\n"]}
|
|
1
|
+
{"version":3,"file":"pipeline-step-metadata.js","sourceRoot":"","sources":["../../src/core/pipeline-step-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,6BAA6B,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,oBAAoB,CAAC,CAAC","sourcesContent":["export const PIPELINE_FINALIZE_STEP_ID = \"__finalize__\";\n\nexport const STEP_OPTIONS_SCHEMA: unique symbol = Symbol(\"tubeless.stepOptionsSchema\");\nexport const STEP_NESTED_PIPELINE: unique symbol = Symbol(\"tubeless.stepNestedPipeline\");\nexport const STEP_REMOTE: unique symbol = Symbol(\"tubeless.stepRemote\");\n\nexport const STEP_CACHE: unique symbol = Symbol(\"tubeless.stepCache\");\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { PipelineMetadata } from "../tracing/graph-metadata.js";
|
|
2
|
+
import type { CompiledStepCache, StepCache } from "./pipeline-cache.js";
|
|
1
3
|
import { type ArtifactLoader, type ArtifactSaver, type ArtifactResult } from "./pipeline-artifacts.js";
|
|
2
4
|
import { type IterationDecision, type IterationState } from "./iteration.js";
|
|
3
5
|
import type { ToMappedChildStepProgressOptions } from "./mapped-child-progress.js";
|
|
4
|
-
import { STEP_NESTED_PIPELINE, STEP_OPTIONS_SCHEMA, STEP_REMOTE } from "./pipeline-step-metadata.js";
|
|
6
|
+
import { STEP_CACHE, STEP_NESTED_PIPELINE, STEP_OPTIONS_SCHEMA, STEP_REMOTE } from "./pipeline-step-metadata.js";
|
|
5
7
|
import type { InferSchemaInput, InferSchemaOutput, Pipeline, PipelineExecutionContext, PipelinePlanStep, PipelineRun, PipelineRunControls, PipelineStepContext, RemoteStepAdapter, StandardSchemaV1, StepSkipDecision } from "./pipeline-types.js";
|
|
6
8
|
/**
|
|
7
9
|
* A step's dependencies are references to the dependency's own step object, not string ids
|
|
@@ -28,6 +30,7 @@ export interface AnyStep<TOptions extends object = object> {
|
|
|
28
30
|
/** Optional human-facing display name. Stable machine identity remains `id`. */
|
|
29
31
|
readonly name?: string;
|
|
30
32
|
readonly description?: string;
|
|
33
|
+
readonly metadata?: PipelineMetadata;
|
|
31
34
|
/**
|
|
32
35
|
* Dry-run policy. Omitted runs the normal handler, `"skip"` structurally
|
|
33
36
|
* skips it, and a handler substitutes for `run` while preserving its output.
|
|
@@ -35,6 +38,9 @@ export interface AnyStep<TOptions extends object = object> {
|
|
|
35
38
|
readonly dryRun?: "skip" | AnyStepDryRunHandler<TOptions>;
|
|
36
39
|
/** Optional Standard Schema for values published by this step. */
|
|
37
40
|
readonly outputSchema?: StandardSchemaV1;
|
|
41
|
+
/** Explicit output caching for ordinary deterministic steps only. */
|
|
42
|
+
readonly cache?: boolean | StepCache<Record<string, unknown>, TOptions>;
|
|
43
|
+
readonly [STEP_CACHE]?: CompiledStepCache<TOptions>;
|
|
38
44
|
/**
|
|
39
45
|
* Optional runtime skip. Return a non-empty reason (or `{ reason, value }`) to
|
|
40
46
|
* skip without calling `run`. Policy skips unlock dependents; structural skips
|
|
@@ -79,6 +85,7 @@ type ChildPipelineStepDefinitionBase<TParentOptions extends object, TDeps extend
|
|
|
79
85
|
skipAfterFailureOf?: readonly AnyStep<TParentOptions>[];
|
|
80
86
|
name?: string;
|
|
81
87
|
description?: string;
|
|
88
|
+
metadata?: PipelineMetadata;
|
|
82
89
|
dryRun?: "skip";
|
|
83
90
|
controls?: PipelineRunControlsOf<TChildPipeline> | ((inputs: RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, context: PipelineExecutionContext<TParentOptions>) => PipelineRunControlsOf<TChildPipeline>);
|
|
84
91
|
} & ([TParentOptions] extends [PipelineOptionsOf<NoInfer<TChildPipeline>>] ? {
|
|
@@ -101,6 +108,7 @@ type MappedChildPipelineStepDefinition<TParentOptions extends object, TDeps exte
|
|
|
101
108
|
skipAfterFailureOf?: readonly AnyStep<TParentOptions>[];
|
|
102
109
|
name?: string;
|
|
103
110
|
description?: string;
|
|
111
|
+
metadata?: PipelineMetadata;
|
|
104
112
|
dryRun?: "skip";
|
|
105
113
|
items(inputs: RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, context: PipelineExecutionContext<TParentOptions>): readonly TItem[] | Promise<readonly TItem[]>;
|
|
106
114
|
key(item: TItem, index: number): string;
|
|
@@ -127,8 +135,10 @@ type PlainStepFields<TOptions extends object, TDeps extends readonly AnyStep<TOp
|
|
|
127
135
|
skipAfterFailureOf?: readonly AnyStep<TOptions>[];
|
|
128
136
|
name?: string;
|
|
129
137
|
description?: string;
|
|
138
|
+
metadata?: PipelineMetadata;
|
|
130
139
|
dryRun?: StepDryRunPolicy<TOptions, TDeps, TOptionalDeps, TOut>;
|
|
131
140
|
outputSchema?: never;
|
|
141
|
+
cache?: boolean | StepCache<RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, TOptions>;
|
|
132
142
|
run(inputs: RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, context: PipelineStepContext<TOptions>): TOut | Promise<TOut>;
|
|
133
143
|
};
|
|
134
144
|
type SchemaStepFields<TOptions extends object, TDeps extends readonly AnyStep<TOptions>[], TOptionalDeps extends readonly AnyStep<TOptions>[], TSchema extends StandardSchemaV1> = Omit<PlainStepFields<TOptions, TDeps, TOptionalDeps, InferSchemaInput<TSchema>>, "outputSchema"> & {
|
|
@@ -143,6 +153,7 @@ type RemoteStepDefinitionBase<TParentOptions extends object, TDeps extends reado
|
|
|
143
153
|
skipAfterFailureOf?: readonly AnyStep<TParentOptions>[];
|
|
144
154
|
name?: string;
|
|
145
155
|
description?: string;
|
|
156
|
+
metadata?: PipelineMetadata;
|
|
146
157
|
dryRun?: StepDryRunPolicy<TParentOptions, TDeps, TOptionalDeps, InferSchemaInput<TSchema>>;
|
|
147
158
|
};
|
|
148
159
|
/** Step constructors scoped to one pipeline's domain option types. */
|
|
@@ -170,10 +181,12 @@ declare function createStepFactory<TOptions extends object, TInputOptions extend
|
|
|
170
181
|
skip?: never;
|
|
171
182
|
}): TOptionsSchema extends StandardSchemaV1<unknown, unknown> ? Step<TId, TOut, TOptions, TInputOptions, TOut, TOptionsSchema> : Step<TId, TOut, TOptions, TInputOptions, TOut, StandardSchemaV1<unknown, unknown> | undefined>;
|
|
172
183
|
};
|
|
173
|
-
loadArtifact: <TId extends string, const TDeps extends readonly AnyStep<TOptions>[] = [], const TOptionalDeps extends readonly AnyStep<TOptions>[] = [], TValue = unknown>(id: TId, definition: Omit<PlainStepFields<TOptions, TDeps, TOptionalDeps, ArtifactResult<TValue>>, "run"> & {
|
|
184
|
+
loadArtifact: <TId extends string, const TDeps extends readonly AnyStep<TOptions>[] = [], const TOptionalDeps extends readonly AnyStep<TOptions>[] = [], TValue = unknown>(id: TId, definition: Omit<PlainStepFields<TOptions, TDeps, TOptionalDeps, ArtifactResult<TValue>>, "run" | "cache"> & {
|
|
185
|
+
cache?: never;
|
|
174
186
|
load: ArtifactLoader<RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, TValue, TOptions>;
|
|
175
187
|
}) => TOptionsSchema extends StandardSchemaV1<unknown, unknown> ? Step<TId, TValue, TOptions, TInputOptions, TValue, TOptionsSchema> : Step<TId, TValue, TOptions, TInputOptions, TValue, StandardSchemaV1<unknown, unknown> | undefined>;
|
|
176
|
-
saveArtifact: <TId extends string, const TDeps extends readonly AnyStep<TOptions>[] = [], const TOptionalDeps extends readonly AnyStep<TOptions>[] = [], TValue = unknown>(id: TId, definition: Omit<PlainStepFields<TOptions, TDeps, TOptionalDeps, ArtifactResult<TValue>>, "run"> & {
|
|
188
|
+
saveArtifact: <TId extends string, const TDeps extends readonly AnyStep<TOptions>[] = [], const TOptionalDeps extends readonly AnyStep<TOptions>[] = [], TValue = unknown>(id: TId, definition: Omit<PlainStepFields<TOptions, TDeps, TOptionalDeps, ArtifactResult<TValue>>, "run" | "cache"> & {
|
|
189
|
+
cache?: never;
|
|
177
190
|
save: ArtifactSaver<RequiredInputs<TDeps> & OptionalInputs<TOptionalDeps>, TValue, TOptions>;
|
|
178
191
|
}) => TOptionsSchema extends StandardSchemaV1<unknown, unknown> ? Step<TId, TValue, TOptions, TInputOptions, TValue, TOptionsSchema> : Step<TId, TValue, TOptions, TInputOptions, TValue, StandardSchemaV1<unknown, unknown> | undefined>;
|
|
179
192
|
fromPipeline: {
|
|
@@ -224,6 +237,7 @@ declare function createStepFactory<TOptions extends object, TInputOptions extend
|
|
|
224
237
|
pipeline: TChild;
|
|
225
238
|
name?: string;
|
|
226
239
|
description?: string;
|
|
240
|
+
metadata?: PipelineMetadata;
|
|
227
241
|
dependsOn?: TDeps;
|
|
228
242
|
maxIterations: number;
|
|
229
243
|
dryRun?: "skip";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {} from "./pipeline-artifacts.js";
|
|
2
2
|
import { createMappedChildRunner, createSingleChildRunner } from "./child-execution.js";
|
|
3
3
|
import { createIterationRunner } from "./iteration.js";
|
|
4
|
-
import { STEP_NESTED_PIPELINE, STEP_OPTIONS_SCHEMA, STEP_REMOTE, } from "./pipeline-step-metadata.js";
|
|
4
|
+
import { STEP_CACHE, STEP_NESTED_PIPELINE, STEP_OPTIONS_SCHEMA, STEP_REMOTE, } from "./pipeline-step-metadata.js";
|
|
5
5
|
export function createSteps(optionsSchema) {
|
|
6
6
|
return createStepFactory(optionsSchema);
|
|
7
7
|
}
|
|
@@ -18,7 +18,9 @@ function createStepFactory(optionsSchema) {
|
|
|
18
18
|
}
|
|
19
19
|
/** Read an artifact as an ordinary step, publishing only its typed value. */
|
|
20
20
|
function loadArtifact(id, definition) {
|
|
21
|
-
const { load, dryRun, ...fields } = definition;
|
|
21
|
+
const { cache, load, dryRun, ...fields } = definition;
|
|
22
|
+
if (cache !== undefined)
|
|
23
|
+
throw new Error("Artifact helpers cannot configure caching");
|
|
22
24
|
const wrap = (handler) => async (inputs, context) => {
|
|
23
25
|
const loaded = await handler(inputs, context);
|
|
24
26
|
context.recordArtifact({ operation: "read", artifact: loaded.artifact });
|
|
@@ -32,7 +34,9 @@ function createStepFactory(optionsSchema) {
|
|
|
32
34
|
}
|
|
33
35
|
/** Write an artifact as an ordinary step. Dry runs skip unless a preview is supplied. */
|
|
34
36
|
function saveArtifact(id, definition) {
|
|
35
|
-
const { save, dryRun, ...fields } = definition;
|
|
37
|
+
const { cache, save, dryRun, ...fields } = definition;
|
|
38
|
+
if (cache !== undefined)
|
|
39
|
+
throw new Error("Artifact helpers cannot configure caching");
|
|
36
40
|
const wrap = (handler) => async (inputs, context) => {
|
|
37
41
|
const saved = await handler(inputs, context);
|
|
38
42
|
context.recordArtifact({ operation: "write", artifact: saved.artifact });
|
|
@@ -57,6 +61,7 @@ function createStepFactory(optionsSchema) {
|
|
|
57
61
|
skipAfterFailureOf: config.skipAfterFailureOf,
|
|
58
62
|
name: config.name,
|
|
59
63
|
description: config.description,
|
|
64
|
+
metadata: config.metadata,
|
|
60
65
|
dryRun: config.dryRun,
|
|
61
66
|
run: createSingleChildRunner(config),
|
|
62
67
|
};
|
|
@@ -80,6 +85,7 @@ function createStepFactory(optionsSchema) {
|
|
|
80
85
|
skipAfterFailureOf: config.skipAfterFailureOf,
|
|
81
86
|
name: config.name,
|
|
82
87
|
description: config.description,
|
|
88
|
+
metadata: config.metadata,
|
|
83
89
|
dryRun: config.dryRun,
|
|
84
90
|
outputSchema: config.outputSchema,
|
|
85
91
|
run: (inputs, context) => config.adapter.invoke(config.mapInput(inputs, context), context),
|
|
@@ -107,6 +113,7 @@ function createStepFactory(optionsSchema) {
|
|
|
107
113
|
skipAfterFailureOf: config.skipAfterFailureOf,
|
|
108
114
|
name: config.name,
|
|
109
115
|
description: config.description,
|
|
116
|
+
metadata: config.metadata,
|
|
110
117
|
dryRun: config.dryRun,
|
|
111
118
|
run: createMappedChildRunner(config),
|
|
112
119
|
};
|
|
@@ -143,6 +150,7 @@ function createStepFactory(optionsSchema) {
|
|
|
143
150
|
},
|
|
144
151
|
name: config.name,
|
|
145
152
|
description: config.description,
|
|
153
|
+
metadata: config.metadata,
|
|
146
154
|
dependsOn: config.dependsOn,
|
|
147
155
|
dryRun: config.dryRun,
|
|
148
156
|
run: createIterationRunner(config),
|