tubeless 0.2.2 → 0.2.3

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 (87) hide show
  1. package/README.md +5 -5
  2. package/dist/core/child-execution.js +8 -1
  3. package/dist/core/child-execution.js.map +1 -1
  4. package/dist/core/lifecycle.js +2 -0
  5. package/dist/core/lifecycle.js.map +1 -1
  6. package/dist/core/pipeline-execute.d.ts +2 -0
  7. package/dist/core/pipeline-execute.js +132 -395
  8. package/dist/core/pipeline-execute.js.map +1 -1
  9. package/dist/core/pipeline-plan.js +96 -34
  10. package/dist/core/pipeline-plan.js.map +1 -1
  11. package/dist/core/pipeline-run-state.d.ts +49 -0
  12. package/dist/core/pipeline-run-state.js +284 -0
  13. package/dist/core/pipeline-run-state.js.map +1 -0
  14. package/dist/core/pipeline-step-executor.d.ts +20 -0
  15. package/dist/core/pipeline-step-executor.js +52 -0
  16. package/dist/core/pipeline-step-executor.js.map +1 -0
  17. package/dist/core/pipeline-types.d.ts +11 -2
  18. package/dist/core/pipeline-types.js.map +1 -1
  19. package/dist/core/pipeline-validation.d.ts +6 -0
  20. package/dist/core/pipeline-validation.js +41 -0
  21. package/dist/core/pipeline-validation.js.map +1 -0
  22. package/dist/run-store/run-store-ndjson.js +2 -295
  23. package/dist/run-store/run-store-ndjson.js.map +1 -1
  24. package/dist/run-store/run-store-sqlite.js +91 -42
  25. package/dist/run-store/run-store-sqlite.js.map +1 -1
  26. package/dist/run-store/run-store.d.ts +3 -2
  27. package/dist/run-store/run-store.js +38 -195
  28. package/dist/run-store/run-store.js.map +1 -1
  29. package/dist/studio/run-store-ui-client-controller.d.ts +9 -0
  30. package/dist/studio/run-store-ui-client-controller.js +479 -0
  31. package/dist/studio/run-store-ui-client-controller.js.map +1 -0
  32. package/dist/studio/run-store-ui-client-form.d.ts +9 -0
  33. package/dist/studio/run-store-ui-client-form.js +44 -0
  34. package/dist/studio/run-store-ui-client-form.js.map +1 -0
  35. package/dist/studio/run-store-ui-client-model.d.ts +40 -0
  36. package/dist/studio/run-store-ui-client-model.js +211 -0
  37. package/dist/studio/run-store-ui-client-model.js.map +1 -0
  38. package/dist/studio/run-store-ui-client-source.js +1 -1
  39. package/dist/studio/run-store-ui-client-transport.d.ts +25 -0
  40. package/dist/studio/run-store-ui-client-transport.js +322 -0
  41. package/dist/studio/run-store-ui-client-transport.js.map +1 -0
  42. package/dist/studio/run-store-ui-client-views.d.ts +24 -0
  43. package/dist/studio/run-store-ui-client-views.js +676 -0
  44. package/dist/studio/run-store-ui-client-views.js.map +1 -0
  45. package/dist/studio/run-store-ui-client.d.ts +2 -14
  46. package/dist/studio/run-store-ui-client.js +7 -1360
  47. package/dist/studio/run-store-ui-client.js.map +1 -1
  48. package/dist/studio/run-store-ui-page.d.ts +1 -1
  49. package/dist/studio/run-store-ui.js +44 -25
  50. package/dist/studio/run-store-ui.js.map +1 -1
  51. package/dist/tracing/tracing-codec.d.ts +6 -0
  52. package/dist/tracing/tracing-codec.js +829 -0
  53. package/dist/tracing/tracing-codec.js.map +1 -0
  54. package/dist/tracing/tracing-constants.d.ts +4 -0
  55. package/dist/tracing/tracing-constants.js +5 -0
  56. package/dist/tracing/tracing-constants.js.map +1 -0
  57. package/dist/tracing/tracing-internal.js +116 -81
  58. package/dist/tracing/tracing-internal.js.map +1 -1
  59. package/dist/tracing/tracing-otel.js +19 -3
  60. package/dist/tracing/tracing-otel.js.map +1 -1
  61. package/dist/tracing/tracing.d.ts +149 -10
  62. package/dist/tracing/tracing.js.map +1 -1
  63. package/dist/workbench/workbench-history.js +8 -1
  64. package/dist/workbench/workbench-history.js.map +1 -1
  65. package/dist/workbench/workbench-ui.js +26 -6
  66. package/dist/workbench/workbench-ui.js.map +1 -1
  67. package/docs/README.md +21 -15
  68. package/docs/agent-guide.md +48 -35
  69. package/docs/agent-skills.md +59 -0
  70. package/docs/api-reference.md +28 -12
  71. package/docs/api-report.json +29 -13
  72. package/docs/child-pipeline-composition.md +142 -193
  73. package/docs/cli.md +83 -61
  74. package/docs/comparison.md +63 -62
  75. package/docs/concepts.md +210 -272
  76. package/docs/getting-started.md +59 -48
  77. package/docs/llms.txt +7 -4
  78. package/docs/recipes.md +21 -18
  79. package/docs/remote-step-composition.md +69 -74
  80. package/docs/studio.md +146 -71
  81. package/examples/catalog/pipelines/enrich.ts +2 -2
  82. package/examples/catalog/tubeless.project.ts +4 -2
  83. package/examples/host-embedding.ts +4 -5
  84. package/examples/remote-steps.ts +8 -5
  85. package/package.json +11 -10
  86. package/skills/tubeless/SKILL.md +83 -0
  87. package/skills/tubeless-make-pipeline/SKILL.md +126 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-execute.js","sourceRoot":"","sources":["../../src/core/pipeline-execute.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abortableSleep,\n isAbortError,\n throwIfAborted as throwIfSignalAborted,\n} from \"../utilities/abort.js\";\nimport { PipelineChildError } from \"./child-execution.js\";\nimport { brandTubelessError } from \"../utilities/tubeless-error.js\";\nimport { createPipelineLifecycleObserver } from \"./lifecycle.js\";\nimport { formatPipelineError } from \"./pipeline-diagnostics.js\";\nimport { createRunId, RUN_MODEL_VERSION } from \"./pipeline-ids.js\";\nimport {\n PIPELINE_FINALIZE_STEP_ID,\n compiledStepGraph,\n decideStepDisposition,\n planStepById,\n stepToPlanStep,\n type CompiledPipeline,\n} from \"./pipeline-plan.js\";\nimport type { StepsOptions } from \"./pipeline-plan.js\";\nimport type { AnyStep } from \"./pipeline-steps.js\";\nimport type {\n InferSchemaOutput,\n PipelineContext,\n PipelineError,\n PipelineErrorCause,\n PipelineExecutionContext,\n PipelineLogger,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunControls,\n PipelineRunStatus,\n PipelineRuntime,\n PipelineStepCancelledReport,\n PipelineStepCompleteReport,\n PipelineStepContext,\n PipelineStepFailedReport,\n PipelineStepProgress,\n PipelineStepReport,\n PipelineStepSkipReason,\n PipelineStepSkippedReport,\n PipelineStepStatus,\n PipelineValidationIssue,\n StandardSchemaV1,\n StandardSchemaV1Issue,\n StandardSchemaV1Result,\n StepSkipDecision,\n} from \"./pipeline-types.js\";\nimport { createPipelineTraceEmitter } from \"../tracing/tracing-internal.js\";\n\nfunction isCancellationOnly(errors: readonly PipelineError[]): boolean {\n return errors.length > 0 && errors.every(({ kind }) => kind === \"cancellation\");\n}\n\nfunction terminalRunStatus(errors: readonly PipelineError[]): PipelineRunStatus {\n if (errors.length === 0) return \"completed\";\n return isCancellationOnly(errors) ? \"cancelled\" : \"failed\";\n}\n\nconst PIPELINE_LOGGER_BASE = Symbol(\"pipelineLoggerBase\");\n\ntype TracedPipelineLogger = PipelineLogger & { [PIPELINE_LOGGER_BASE]?: PipelineLogger };\n\nfunction basePipelineLogger(log: PipelineLogger): PipelineLogger {\n // SAFETY: `TracedPipelineLogger` only adds the optional symbol-keyed base\n // property; reading it off any `PipelineLogger` is safe because the property\n // is absent unless a tracing wrapper installed it.\n return (log as TracedPipelineLogger)[PIPELINE_LOGGER_BASE] ?? log;\n}\n\nconst originalPipelineErrors = new WeakMap<PipelineError, unknown>();\n\nfunction defaultExecutionErrorMessage(result: PipelineRun<unknown>): string {\n const firstError = result.errors[0];\n const disposition = isCancellationOnly(result.errors) ? \"cancelled\" : \"failed\";\n return firstError\n ? `Pipeline ${result.pipelineId} ${disposition}: ${formatPipelineError(firstError)}`\n : `Pipeline ${result.pipelineId} ${disposition}`;\n}\n\nfunction firstOriginalPipelineError(errors: readonly PipelineError[]): unknown {\n for (const error of errors) {\n if (originalPipelineErrors.has(error)) return originalPipelineErrors.get(error);\n }\n return undefined;\n}\n\nexport class PipelineExecutionError extends Error {\n constructor(\n readonly result: PipelineRun<unknown>,\n message = defaultExecutionErrorMessage(result)\n ) {\n const cause = firstOriginalPipelineError(result.errors);\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"PipelineExecutionError\";\n brandTubelessError(this, \"pipeline-execution\");\n }\n}\n\nclass PipelineBoundaryValidationError extends Error {\n constructor(\n message: string,\n readonly issues: readonly PipelineValidationIssue[],\n cause?: unknown\n ) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"PipelineBoundaryValidationError\";\n }\n}\n\nfunction normalizeValidationPath(\n path: StandardSchemaV1Issue[\"path\"]\n): readonly (number | string)[] | undefined {\n if (!path || path.length === 0) return undefined;\n return path.map((segment) => {\n const key = typeof segment === \"object\" && segment !== null ? segment.key : segment;\n return typeof key === \"number\" || typeof key === \"string\" ? key : String(key);\n });\n}\n\nfunction renderValidationIssue(issue: PipelineValidationIssue): string {\n const location = issue.path?.map(String).join(\".\");\n return location ? `${location}: ${issue.message}` : issue.message;\n}\n\nasync function validateStandardSchema<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n value: unknown,\n boundary: string\n): Promise<InferSchemaOutput<TSchema>> {\n let result: StandardSchemaV1Result<InferSchemaOutput<TSchema>>;\n try {\n result = await schema[\"~standard\"].validate(value);\n } catch (error) {\n throw new PipelineBoundaryValidationError(\n `${boundary} schema (${schema[\"~standard\"].vendor}) threw while validating`,\n [],\n error\n );\n }\n if (result.issues) {\n const issues = result.issues.map((issue) => {\n const path = normalizeValidationPath(issue.path);\n const normalized: PipelineValidationIssue = { message: issue.message };\n if (path) normalized.path = path;\n return normalized;\n });\n throw new PipelineBoundaryValidationError(\n `${boundary} validation failed: ${issues.map(renderValidationIssue).join(\"; \")}`,\n issues\n );\n }\n return result.value;\n}\n\nconst MAX_PIPELINE_CAUSE_DEPTH = 8;\n\nfunction readErrorField(value: object, field: \"cause\" | \"code\" | \"message\" | \"name\"): unknown {\n try {\n // SAFETY: any object may be probed for an optional string-keyed field; a\n // getter that throws is caught below, so the cast only enables the lookup.\n return (value as Record<string, unknown>)[field];\n } catch {\n return undefined;\n }\n}\n\nfunction safeErrorMessage(value: unknown): string {\n try {\n return String(value);\n } catch {\n return \"Unknown thrown value\";\n }\n}\n\nfunction normalizePipelineCause(\n value: unknown,\n seen: WeakSet<object>,\n depth = 0\n): PipelineErrorCause {\n if (depth >= MAX_PIPELINE_CAUSE_DEPTH) {\n return { message: \"Cause chain truncated\" };\n }\n if (typeof value !== \"object\" || value === null) {\n return { message: safeErrorMessage(value) };\n }\n if (seen.has(value)) {\n return { message: \"Circular cause\" };\n }\n seen.add(value);\n\n const message = readErrorField(value, \"message\");\n const name = readErrorField(value, \"name\");\n const sourceCode = readErrorField(value, \"code\");\n const nested = readErrorField(value, \"cause\");\n const cause: PipelineErrorCause = {\n message: typeof message === \"string\" ? message : safeErrorMessage(value),\n };\n if (typeof name === \"string\") cause.name = name;\n if (typeof sourceCode === \"string\") cause.sourceCode = sourceCode;\n if (nested !== undefined) cause.cause = normalizePipelineCause(nested, seen, depth + 1);\n return cause;\n}\n\n// Fan-out snapshots bound every string as well as cause depth and item count.\nfunction fanOutCause(error: unknown): PipelineErrorCause {\n const cause = normalizePipelineCause(error, new WeakSet<object>());\n let current: PipelineErrorCause | undefined = cause;\n while (current) {\n current.message = current.message.slice(0, 1024);\n if (current.name) current.name = current.name.slice(0, 1024);\n if (current.sourceCode) current.sourceCode = current.sourceCode.slice(0, 1024);\n current = current.cause;\n }\n return cause;\n}\n\nfunction normalizedNestedCause(error: unknown): PipelineErrorCause | undefined {\n if (typeof error !== \"object\" || error === null) return undefined;\n const cause = readErrorField(error, \"cause\");\n if (cause === undefined) return undefined;\n const seen = new WeakSet<object>();\n seen.add(error);\n return normalizePipelineCause(cause, seen);\n}\n\nfunction toPipelineError(\n error: unknown,\n classification: Omit<PipelineError, \"cause\" | \"message\" | \"sourceCode\" | \"stack\">\n): PipelineError {\n const sourceCode =\n typeof error === \"object\" && error !== null ? readErrorField(error, \"code\") : undefined;\n const cause = normalizedNestedCause(error);\n const pipelineError: PipelineError = {\n ...classification,\n message: error instanceof Error ? error.message : safeErrorMessage(error),\n };\n if (error instanceof Error && error.stack) pipelineError.stack = error.stack;\n if (typeof sourceCode === \"string\") pipelineError.sourceCode = sourceCode;\n if (cause) pipelineError.cause = cause;\n if (error instanceof PipelineBoundaryValidationError) pipelineError.issues = error.issues;\n if (error instanceof PipelineChildError && error.fanOut) {\n const { failures, failureCount, schedulerError } = error.fanOut;\n pipelineError.fanOut = {\n failures: failures.map(({ error: itemError, key, index, cancelled }) => ({\n index,\n key: key.slice(0, 1024),\n keyTruncated: key.length > 1024,\n cancelled,\n error: fanOutCause(itemError),\n })),\n failureCount,\n omittedFailureCount: failureCount - failures.length,\n };\n if (schedulerError !== undefined)\n pipelineError.fanOut.schedulerError = fanOutCause(schedulerError);\n }\n originalPipelineErrors.set(pipelineError, error);\n return pipelineError;\n}\n\nexport function isPipelineCancellation(error: unknown, runtime: PipelineRuntime): boolean {\n if (isAbortError(error)) return true;\n if (runtime.signal?.aborted === true && error === runtime.signal.reason) return true;\n if (error instanceof PipelineChildError) return error.cancelled;\n return error instanceof PipelineExecutionError && isCancelledResult(error.result);\n}\n\nfunction isCancelledResult(result: PipelineRun<unknown>): boolean {\n return result.status === \"cancelled\";\n}\n\ntype PipelineRunIdentity = { parentRunId?: string; runId: string };\n\nfunction errorRunResult<TResult>(\n runtime: PipelineRuntime,\n pipelineId: string,\n dryRun: boolean,\n startedAt: number,\n errors: PipelineError[],\n identity: PipelineRunIdentity\n): PipelineRun<TResult> {\n const finishedAtMs = runtime.now();\n const result: PipelineRun<TResult> = {\n pipelineId,\n dryRun,\n errors,\n finalized: false,\n finishedAtMs,\n runId: identity.runId,\n startedAtMs: startedAt,\n status: terminalRunStatus(errors),\n steps: [],\n version: RUN_MODEL_VERSION,\n };\n if (identity.parentRunId) result.parentRunId = identity.parentRunId;\n return result;\n}\n\nfunction throwIfAborted(runtime: PipelineRuntime): void {\n throwIfSignalAborted(runtime.signal, \"Pipeline run\");\n}\n\nfunction recordSkip(\n step: { id: PropertyKey; name?: string; description?: string },\n stepId: string,\n reports: PipelineStepReport[],\n reportsByStepId: Map<string, PipelineStepReport>,\n reason: PipelineStepSkipReason,\n message: string | undefined,\n dependencyId: string | undefined,\n attemptId: string | undefined,\n startedAtMs: number | undefined,\n finishedAtMs: number\n): PipelineStepSkippedReport {\n const report: PipelineStepSkippedReport = {\n id: stepId,\n name: step.name,\n description: step.description,\n finishedAtMs,\n reason,\n status: \"skipped\",\n };\n if (attemptId) report.attemptId = attemptId;\n if (startedAtMs !== undefined) report.startedAtMs = startedAtMs;\n if (dependencyId) report.dependencyId = dependencyId;\n if (message) report.message = message;\n reports.push(report);\n reportsByStepId.set(stepId, report);\n return report;\n}\n\nfunction normalizeStepSkipDecision(\n decision: StepSkipDecision\n): { reason: string; value?: unknown } | 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 executePlannedRun<\n TSteps extends readonly AnyStep[],\n TResult,\n TTargets extends readonly TSteps[number][],\n TResultSchema extends StandardSchemaV1 | undefined,\n>(input: {\n compiled: CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>;\n controls: PipelineRunControls;\n domainOptions: object;\n plan: PipelinePlan;\n runtime: PipelineRuntime;\n}): Promise<\n PipelineRun<TResultSchema extends StandardSchemaV1 ? InferSchemaOutput<TResultSchema> : TResult>\n> {\n type TPipelineResult = TResultSchema extends StandardSchemaV1\n ? InferSchemaOutput<TResultSchema>\n : TResult;\n const { compiled, controls, runtime } = input;\n const optionsSchema = compiled.optionsSchema;\n const targetIds = compiled.targetIds;\n type TOptions = StepsOptions<TSteps>;\n // SAFETY: `domainOptions` is the user-supplied options object; if a schema\n // is present it is re-validated below before assignment to `pipelineOptions`.\n let pipelineOptions = input.domainOptions as TOptions;\n const startedAt = runtime.now();\n const runId = runtime.runId ?? createRunId(compiled.id);\n const parentRunId = runtime.parentRunId;\n const identity: PipelineRunIdentity = { runId };\n if (parentRunId) identity.parentRunId = parentRunId;\n const dryRun = controls.dryRun === true;\n const trace = createPipelineTraceEmitter(\n compiled.id,\n runtime.tracing,\n basePipelineLogger(runtime.log),\n {\n ...identity,\n itemKey: runtime.tracing?.itemKey,\n },\n runtime.now\n );\n const lifecycle = createPipelineLifecycleObserver(compiled.id, runtime, trace);\n const tracedLogger = (stepId?: string, attemptId?: string): PipelineLogger => {\n if (!trace) return runtime.log;\n const base = basePipelineLogger(runtime.log);\n const log: TracedPipelineLogger = {\n error: (message, ...params) => {\n lifecycle.log(\"error\", message, params, stepId, attemptId);\n base.error(message, ...params);\n },\n log: (message, ...params) => {\n lifecycle.log(\"log\", message, params, stepId, attemptId);\n base.log(message, ...params);\n },\n warn: (message, ...params) => {\n lifecycle.log(\"warn\", message, params, stepId, attemptId);\n base.warn(message, ...params);\n },\n };\n log[PIPELINE_LOGGER_BASE] = base;\n return log;\n };\n let nextAttemptSequence = 0;\n const beginAttempt = (stepId: string, startedAtMs = runtime.now()) => ({\n attemptId: `${runId}:attempt:${(nextAttemptSequence += 1).toString(36)}`,\n startedAtMs,\n stepId,\n });\n const currentStepStatuses = new Map<string, PipelineStepStatus[\"status\"]>();\n const publishStepStatus = (event: PipelineStepStatus, traceStatus = true): void => {\n const previous = 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 currentStepStatuses.set(event.step.id, event.status);\n lifecycle.stepStatus(event, traceStatus);\n };\n const publishStepReport = (step: PipelinePlanStep, report: PipelineStepReport): void => {\n switch (report.status) {\n case \"cancelled\":\n case \"failed\":\n case \"skipped\":\n case \"completed\":\n publishStepStatus({ ...report, pipelineId: compiled.id, step });\n }\n };\n const runPlan = input.plan;\n const plannedSteps = planStepById(runPlan);\n lifecycle.pipelineStart(runPlan, targetIds);\n if (!runPlan.ok) {\n const result = errorRunResult<TPipelineResult>(\n runtime,\n compiled.id,\n dryRun,\n startedAt,\n runPlan.errors,\n identity\n );\n lifecycle.pipelineComplete(result);\n await lifecycle.flush();\n return result;\n }\n if (optionsSchema) {\n try {\n const validated = await validateStandardSchema(\n optionsSchema,\n input.domainOptions,\n `Pipeline ${compiled.id} options`\n );\n if (typeof validated !== \"object\" || validated === null || Array.isArray(validated)) {\n throw new PipelineBoundaryValidationError(\n `Pipeline ${compiled.id} options schema returned a non-object value`,\n [{ message: \"Expected the validated options value to be an object\" }]\n );\n }\n // SAFETY: the schema validated the value against `TOptions` and the\n // object-shape check above passed, so the value is a `TOptions`.\n pipelineOptions = validated as TOptions;\n } catch (error) {\n const pipelineError = toPipelineError(error, {\n code: \"TUBELESS_OPTIONS_VALIDATION_FAILED\",\n kind: \"validation\",\n phase: \"execution\",\n });\n const result = errorRunResult<TPipelineResult>(\n runtime,\n compiled.id,\n dryRun,\n startedAt,\n [pipelineError],\n identity\n );\n lifecycle.pipelineComplete(result);\n await lifecycle.flush();\n return result;\n }\n }\n for (const step of runPlan.steps) {\n publishStepStatus({ pipelineId: compiled.id, status: \"planned\", step });\n }\n\n const outputs = new Map<string, unknown>();\n const reports: PipelineStepReport[] = [];\n const errors: PipelineError[] = [];\n const reportsByStepId = new Map<string, PipelineStepReport>();\n let completed = true;\n\n const executionContext: PipelineExecutionContext<TOptions> = {\n ...runtime,\n dryRun,\n log: tracedLogger(),\n options: pipelineOptions,\n runId,\n trace: trace?.context,\n };\n if (parentRunId) executionContext.parentRunId = parentRunId;\n\n const stepsById = new Map(compiled.orderedSteps.map((step) => [step.id, step]));\n // `runPlan.steps` is already topologically ordered. Rehydrate from the original step\n // objects so callers still get the typed `run` functions rather than plan metadata.\n // SAFETY: every planned step id originates from `compiled.orderedSteps`, so the\n // map lookup always finds the matching `AnyStep<TOptions>`.\n const orderedSteps = runPlan.steps.map((step) => stepsById.get(step.id) as AnyStep<TOptions>);\n\n const recordRemainingStates = (\n fromIndex: number,\n failedStepId?: string,\n cancellationError?: PipelineError\n ): void => {\n for (let index = fromIndex; index < orderedSteps.length; index++) {\n const step = orderedSteps[index]!;\n const plannedStep =\n plannedSteps.get(step.id) ??\n stepToPlanStep(step, true, undefined, undefined, compiledStepGraph(compiled, step));\n if (plannedStep.skipReason) {\n const dependencyId =\n plannedStep.skipReason === \"unmet-dependency\"\n ? plannedStep.dependencies.find((id) => plannedSteps.get(id)?.skipReason !== undefined)\n : undefined;\n const report = recordSkip(\n step,\n step.id,\n reports,\n reportsByStepId,\n plannedStep.skipReason,\n undefined,\n dependencyId,\n undefined,\n undefined,\n runtime.now()\n );\n publishStepReport(plannedStep, report);\n continue;\n }\n if (cancellationError) {\n const report: PipelineStepCancelledReport = {\n id: step.id,\n name: step.name,\n description: step.description,\n error: { ...cancellationError, stepId: step.id },\n finishedAtMs: runtime.now(),\n status: \"cancelled\",\n };\n reports.push(report);\n reportsByStepId.set(step.id, report);\n publishStepReport(plannedStep, report);\n continue;\n }\n const report = recordSkip(\n step,\n step.id,\n reports,\n reportsByStepId,\n \"fail-fast\",\n failedStepId\n ? `Not run because fail-fast stopped after ${failedStepId} failed.`\n : \"Not run because the pipeline was aborted before this step started.\",\n failedStepId,\n undefined,\n undefined,\n runtime.now()\n );\n publishStepReport(plannedStep, report);\n }\n };\n\n const cancelBeforeStepStart = (stepId: string, stepIndex: number): boolean => {\n try {\n throwIfAborted(runtime);\n } catch (error) {\n const pipelineError = toPipelineError(error, {\n code: \"TUBELESS_RUN_CANCELLED\",\n kind: \"cancellation\",\n phase: \"execution\",\n stepId,\n });\n errors.push(pipelineError);\n completed = false;\n recordRemainingStates(stepIndex, undefined, pipelineError);\n return true;\n }\n return false;\n };\n\n const recordStepExecutionFailure = (\n error: unknown,\n plannedStep: PipelinePlanStep,\n step: AnyStep<TOptions>,\n stepId: string,\n stepIndex: number,\n attempt: { attemptId: string; startedAtMs: number }\n ): boolean => {\n const cancelled = isPipelineCancellation(error, runtime);\n const childFailure =\n error instanceof PipelineExecutionError || error instanceof PipelineChildError;\n const validationFailure = error instanceof PipelineBoundaryValidationError;\n const pipelineError = toPipelineError(error, {\n code: cancelled\n ? \"TUBELESS_RUN_CANCELLED\"\n : validationFailure\n ? \"TUBELESS_STEP_OUTPUT_VALIDATION_FAILED\"\n : childFailure\n ? \"TUBELESS_CHILD_FAILED\"\n : \"TUBELESS_STEP_FAILED\",\n kind: cancelled\n ? \"cancellation\"\n : validationFailure\n ? \"validation\"\n : childFailure\n ? \"child\"\n : \"step\",\n phase: \"execution\",\n stepId,\n });\n errors.push(pipelineError);\n const finishedAtMs = runtime.now();\n const report: PipelineStepCancelledReport | PipelineStepFailedReport = cancelled\n ? {\n attemptId: attempt.attemptId,\n id: stepId,\n name: step.name,\n description: step.description,\n error: pipelineError,\n finishedAtMs,\n startedAtMs: attempt.startedAtMs,\n status: \"cancelled\",\n }\n : {\n attemptId: attempt.attemptId,\n id: stepId,\n name: step.name,\n description: step.description,\n error: pipelineError,\n finishedAtMs,\n startedAtMs: attempt.startedAtMs,\n status: \"failed\",\n };\n reports.push(report);\n reportsByStepId.set(stepId, report);\n publishStepReport(plannedStep, report);\n completed = false;\n if (!controls.continueOnError) {\n recordRemainingStates(\n stepIndex + 1,\n stepId,\n report.status === \"cancelled\" ? pipelineError : undefined\n );\n return true;\n }\n return false;\n };\n\n const recordPublishedStepValue = async (args: {\n attempt?: { attemptId: string; startedAtMs: number };\n kind: \"complete\" | \"policy-skip\";\n plannedStep: PipelinePlanStep;\n skipMessage?: string;\n step: AnyStep<TOptions>;\n stepId: string;\n stepIndex: number;\n value: unknown;\n }): Promise<boolean> => {\n let published = args.value;\n let attempt = args.attempt;\n if (args.step.outputSchema) {\n if (!attempt) {\n attempt = beginAttempt(args.stepId, runtime.now());\n publishStepStatus({\n attemptId: attempt.attemptId,\n pipelineId: compiled.id,\n status: \"running\",\n step: args.plannedStep,\n });\n }\n try {\n published = await validateStandardSchema(\n args.step.outputSchema,\n published,\n `Pipeline ${compiled.id} step ${args.stepId} output`\n );\n } catch (error) {\n return recordStepExecutionFailure(\n error,\n args.plannedStep,\n args.step,\n args.stepId,\n args.stepIndex,\n attempt\n );\n }\n }\n outputs.set(args.stepId, published);\n if (args.kind === \"complete\") {\n const completeAttempt = attempt!;\n const report: PipelineStepCompleteReport = {\n attemptId: completeAttempt.attemptId,\n id: args.stepId,\n name: args.step.name,\n description: args.step.description,\n finishedAtMs: runtime.now(),\n startedAtMs: completeAttempt.startedAtMs,\n status: \"completed\",\n };\n reports.push(report);\n reportsByStepId.set(args.stepId, report);\n publishStepReport(args.plannedStep, report);\n return false;\n }\n const report = recordSkip(\n args.step,\n args.stepId,\n reports,\n reportsByStepId,\n \"policy\",\n args.skipMessage,\n undefined,\n attempt?.attemptId,\n attempt?.startedAtMs,\n runtime.now()\n );\n publishStepReport(args.plannedStep, report);\n return false;\n };\n\n for (const [stepIndex, step] of orderedSteps.entries()) {\n const stepId = step.id;\n const graph = compiledStepGraph(compiled, step);\n const plannedStep =\n plannedSteps.get(stepId) ?? stepToPlanStep(step, true, undefined, undefined, graph);\n\n if (cancelBeforeStepStart(stepId, stepIndex)) {\n break;\n }\n\n const disposition = decideStepDisposition({\n dryRun,\n graph,\n planned: plannedStep,\n reportsByStepId,\n step,\n });\n if (disposition.kind === \"skip\") {\n const report = recordSkip(\n step,\n stepId,\n reports,\n reportsByStepId,\n disposition.reason,\n disposition.message,\n disposition.dependencyId,\n undefined,\n undefined,\n runtime.now()\n );\n publishStepReport(plannedStep, report);\n continue;\n }\n\n const inputEntries: Array<[string, unknown]> = [];\n for (const dep of graph.dependsOn) {\n inputEntries.push([dep.id, outputs.get(dep.id)]);\n }\n for (const dep of graph.optionalDependsOn) {\n if (outputs.has(dep.id)) {\n inputEntries.push([dep.id, outputs.get(dep.id)]);\n }\n }\n const inputs = Object.fromEntries(inputEntries);\n\n if (typeof step.skip === \"function\") {\n let skipDecision: ReturnType<typeof normalizeStepSkipDecision>;\n try {\n skipDecision = normalizeStepSkipDecision(\n await step.skip(inputs, { ...executionContext, log: tracedLogger(stepId) })\n );\n } catch (error) {\n const skipAttempt = beginAttempt(stepId, runtime.now());\n publishStepStatus({\n attemptId: skipAttempt.attemptId,\n pipelineId: compiled.id,\n status: \"running\",\n step: plannedStep,\n });\n if (recordStepExecutionFailure(error, plannedStep, step, stepId, stepIndex, skipAttempt)) {\n break;\n }\n continue;\n }\n if (cancelBeforeStepStart(stepId, stepIndex)) {\n break;\n }\n if (skipDecision) {\n if (\n await recordPublishedStepValue({\n kind: \"policy-skip\",\n plannedStep,\n skipMessage: skipDecision.reason,\n step,\n stepId,\n stepIndex,\n value: skipDecision.value,\n })\n ) {\n break;\n }\n continue;\n }\n }\n\n const stepStartedAt = runtime.now();\n const attempt = beginAttempt(stepId, stepStartedAt);\n publishStepStatus({\n attemptId: attempt.attemptId,\n pipelineId: compiled.id,\n status: \"running\",\n step: plannedStep,\n });\n try {\n let acceptsProgress = true;\n const publishProgress = (progress: PipelineStepProgress): void => {\n if (!acceptsProgress) return;\n publishStepStatus({\n attemptId: attempt.attemptId,\n pipelineId: compiled.id,\n progress,\n status: \"running\",\n step: plannedStep,\n });\n };\n const stepContext: PipelineStepContext<TOptions> = {\n ...executionContext,\n attemptId: attempt.attemptId,\n log: tracedLogger(stepId, attempt.attemptId),\n reportAttempt: (attempt, attributes) => {\n lifecycle.reportAttempt(stepId, attempt, attributes, stepContext.attemptId);\n },\n reportProgress: (progress) => {\n publishProgress(progress);\n },\n };\n let output: unknown;\n try {\n output =\n dryRun && typeof step.dryRun === \"function\"\n ? await step.dryRun(inputs, stepContext)\n : await step.run(inputs, stepContext);\n } finally {\n acceptsProgress = false;\n }\n if (\n await recordPublishedStepValue({\n attempt,\n kind: \"complete\",\n plannedStep,\n step,\n stepId,\n stepIndex,\n value: output,\n })\n ) {\n break;\n }\n } catch (error) {\n if (recordStepExecutionFailure(error, plannedStep, step, stepId, stepIndex, attempt)) {\n break;\n }\n }\n }\n\n let value: TPipelineResult | undefined;\n let finalized = false;\n if (completed || controls.continueOnError) {\n const finalizeStartedAt = runtime.now();\n lifecycle.finalizeStart();\n try {\n throwIfAborted(runtime);\n // SAFETY: `outputs` maps step ids to their produced values, which is\n // exactly the shape the finalizer's outputs parameter describes.\n const finalOutputs = Object.fromEntries(outputs) as Parameters<\n CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>[\"finalize\"]\n >[0];\n const finalizedValue = await compiled.finalize(finalOutputs, {\n ...executionContext,\n log: tracedLogger(PIPELINE_FINALIZE_STEP_ID),\n });\n // SAFETY: with a result schema the value is validated against\n // `TPipelineResult`; without one the finalizer's declared return type\n // is `TPipelineResult`, so the cast only restores that type.\n value = compiled.resultSchema\n ? ((await validateStandardSchema(\n compiled.resultSchema,\n finalizedValue,\n `Pipeline ${compiled.id} final result`\n )) as TPipelineResult)\n : (finalizedValue as TPipelineResult);\n finalized = true;\n lifecycle.finalizeComplete(runtime.now() - finalizeStartedAt, value);\n } catch (error) {\n const cancelled = isPipelineCancellation(error, runtime);\n const validationFailure = error instanceof PipelineBoundaryValidationError;\n const pipelineError = toPipelineError(error, {\n code: cancelled\n ? \"TUBELESS_FINALIZATION_CANCELLED\"\n : validationFailure\n ? \"TUBELESS_FINAL_RESULT_VALIDATION_FAILED\"\n : \"TUBELESS_FINALIZATION_FAILED\",\n kind: cancelled ? \"cancellation\" : validationFailure ? \"validation\" : \"finalization\",\n phase: \"finalization\",\n stepId: PIPELINE_FINALIZE_STEP_ID,\n });\n errors.push(pipelineError);\n lifecycle.finalizeError(pipelineError, runtime.now() - finalizeStartedAt);\n completed = false;\n }\n }\n\n const finishedAtMs = runtime.now();\n const result: PipelineRun<TPipelineResult> = {\n pipelineId: compiled.id,\n dryRun,\n errors,\n finalized,\n finishedAtMs,\n runId,\n startedAtMs: startedAt,\n status: terminalRunStatus(errors),\n steps: reports,\n value,\n version: RUN_MODEL_VERSION,\n };\n if (parentRunId) result.parentRunId = parentRunId;\n lifecycle.pipelineComplete(result);\n await lifecycle.flush();\n return result;\n}\n\nconst fallbackNow = (): number => Date.now();\n\nconst fallbackSleep = (durationMs: number, signal?: AbortSignal): Promise<void> =>\n abortableSleep(durationMs, signal, \"Pipeline sleep\");\n\nexport function defaultPipelineContext(): PipelineContext {\n return { cwd: process.cwd(), log: console, now: fallbackNow, sleep: fallbackSleep };\n}\n\nexport function resolvePipelineRuntime(context: Partial<PipelineContext> = {}): PipelineRuntime {\n const defaults = defaultPipelineContext();\n return {\n ...defaults,\n ...context,\n cwd: context.cwd ?? defaults.cwd,\n log: context.log ?? defaults.log,\n now: context.now ?? defaults.now ?? fallbackNow,\n sleep: context.sleep ?? defaults.sleep ?? fallbackSleep,\n };\n}\n"]}
1
+ {"version":3,"file":"pipeline-execute.js","sourceRoot":"","sources":["../../src/core/pipeline-execute.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abortableSleep,\n isAbortError,\n throwIfAborted as throwIfSignalAborted,\n} from \"../utilities/abort.js\";\nimport { PipelineChildError } from \"./child-execution.js\";\nimport { brandTubelessError } from \"../utilities/tubeless-error.js\";\nimport { createPipelineLifecycleObserver } from \"./lifecycle.js\";\nimport { formatPipelineError } from \"./pipeline-diagnostics.js\";\nimport { createRunId } from \"./pipeline-ids.js\";\nimport {\n PIPELINE_FINALIZE_STEP_ID,\n compiledStepGraph,\n decideStepDisposition,\n planStepById,\n stepToPlanStep,\n type CompiledPipeline,\n} from \"./pipeline-plan.js\";\nimport type { StepsOptions } from \"./pipeline-plan.js\";\nimport {\n PipelineRunState,\n isCancellationOnly,\n type PipelineStepAttempt,\n} from \"./pipeline-run-state.js\";\nimport type { AnyStep } from \"./pipeline-steps.js\";\nimport {\n evaluateStepSkip,\n executeStepAttempt,\n validateStepOutput,\n} from \"./pipeline-step-executor.js\";\nimport type {\n InferSchemaOutput,\n PipelineContext,\n PipelineError,\n PipelineErrorCause,\n PipelineExecutionContext,\n PipelineLogger,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunControls,\n PipelineRuntime,\n StandardSchemaV1,\n} from \"./pipeline-types.js\";\nimport { PipelineBoundaryValidationError, validateStandardSchema } from \"./pipeline-validation.js\";\nimport { createPipelineTraceEmitter } from \"../tracing/tracing-internal.js\";\n\nconst PIPELINE_RUN_ID_OBSERVER = Symbol.for(\"tubeless.pipeline.runIdObserver\");\n\ninterface ObservedPipelineRuntime {\n [PIPELINE_RUN_ID_OBSERVER]?: (runId: string) => void;\n}\n\n/** Observe an execution ID from an internal host without allowing it to be overridden. */\nexport function observePipelineRunId<TContext extends object>(\n context: TContext,\n observer: (runId: string) => void\n): TContext {\n // SAFETY: the internal observer is intentionally hidden from the returned\n // public type and can observe, but never choose, the generated run ID.\n return { ...context, [PIPELINE_RUN_ID_OBSERVER]: observer };\n}\n\nconst PIPELINE_LOGGER_BASE = Symbol(\"pipelineLoggerBase\");\n\ntype TracedPipelineLogger = PipelineLogger & { [PIPELINE_LOGGER_BASE]?: PipelineLogger };\n\nfunction basePipelineLogger(log: PipelineLogger): PipelineLogger {\n // SAFETY: `TracedPipelineLogger` only adds the optional symbol-keyed base\n // property; reading it off any `PipelineLogger` is safe because the property\n // is absent unless a tracing wrapper installed it.\n return (log as TracedPipelineLogger)[PIPELINE_LOGGER_BASE] ?? log;\n}\n\nconst originalPipelineErrors = new WeakMap<PipelineError, unknown>();\n\nfunction defaultExecutionErrorMessage(result: PipelineRun<unknown>): string {\n const firstError = result.errors[0];\n const disposition = isCancellationOnly(result.errors) ? \"cancelled\" : \"failed\";\n return firstError\n ? `Pipeline ${result.pipelineId} ${disposition}: ${formatPipelineError(firstError)}`\n : `Pipeline ${result.pipelineId} ${disposition}`;\n}\n\nfunction firstOriginalPipelineError(errors: readonly PipelineError[]): unknown {\n for (const error of errors) {\n if (originalPipelineErrors.has(error)) return originalPipelineErrors.get(error);\n }\n return undefined;\n}\n\nexport class PipelineExecutionError extends Error {\n constructor(\n readonly result: PipelineRun<unknown>,\n message = defaultExecutionErrorMessage(result)\n ) {\n const cause = firstOriginalPipelineError(result.errors);\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"PipelineExecutionError\";\n brandTubelessError(this, \"pipeline-execution\");\n }\n}\n\nconst MAX_PIPELINE_CAUSE_DEPTH = 8;\n\nfunction readErrorField(value: object, field: \"cause\" | \"code\" | \"message\" | \"name\"): unknown {\n try {\n // SAFETY: any object may be probed for an optional string-keyed field; a\n // getter that throws is caught below, so the cast only enables the lookup.\n return (value as Record<string, unknown>)[field];\n } catch {\n return undefined;\n }\n}\n\nfunction safeErrorMessage(value: unknown): string {\n try {\n return String(value);\n } catch {\n return \"Unknown thrown value\";\n }\n}\n\nfunction normalizePipelineCause(\n value: unknown,\n seen: WeakSet<object>,\n depth = 0\n): PipelineErrorCause {\n if (depth >= MAX_PIPELINE_CAUSE_DEPTH) {\n return { message: \"Cause chain truncated\" };\n }\n if (typeof value !== \"object\" || value === null) {\n return { message: safeErrorMessage(value) };\n }\n if (seen.has(value)) {\n return { message: \"Circular cause\" };\n }\n seen.add(value);\n\n const message = readErrorField(value, \"message\");\n const name = readErrorField(value, \"name\");\n const sourceCode = readErrorField(value, \"code\");\n const nested = readErrorField(value, \"cause\");\n const cause: PipelineErrorCause = {\n message: typeof message === \"string\" ? message : safeErrorMessage(value),\n };\n if (typeof name === \"string\") cause.name = name;\n if (typeof sourceCode === \"string\") cause.sourceCode = sourceCode;\n if (nested !== undefined) cause.cause = normalizePipelineCause(nested, seen, depth + 1);\n return cause;\n}\n\n// Fan-out snapshots bound every string as well as cause depth and item count.\nfunction fanOutCause(error: unknown): PipelineErrorCause {\n const cause = normalizePipelineCause(error, new WeakSet<object>());\n let current: PipelineErrorCause | undefined = cause;\n while (current) {\n current.message = current.message.slice(0, 1024);\n if (current.name) current.name = current.name.slice(0, 1024);\n if (current.sourceCode) current.sourceCode = current.sourceCode.slice(0, 1024);\n current = current.cause;\n }\n return cause;\n}\n\nfunction normalizedNestedCause(error: unknown): PipelineErrorCause | undefined {\n if (typeof error !== \"object\" || error === null) return undefined;\n const cause = readErrorField(error, \"cause\");\n if (cause === undefined) return undefined;\n const seen = new WeakSet<object>();\n seen.add(error);\n return normalizePipelineCause(cause, seen);\n}\n\nfunction toPipelineError(\n error: unknown,\n classification: Omit<PipelineError, \"cause\" | \"message\" | \"sourceCode\" | \"stack\">\n): PipelineError {\n const sourceCode =\n typeof error === \"object\" && error !== null ? readErrorField(error, \"code\") : undefined;\n const cause = normalizedNestedCause(error);\n const pipelineError: PipelineError = {\n ...classification,\n message: error instanceof Error ? error.message : safeErrorMessage(error),\n };\n if (error instanceof Error && error.stack) pipelineError.stack = error.stack;\n if (typeof sourceCode === \"string\") pipelineError.sourceCode = sourceCode;\n if (cause) pipelineError.cause = cause;\n if (error instanceof PipelineBoundaryValidationError) pipelineError.issues = error.issues;\n if (error instanceof PipelineChildError && error.fanOut) {\n const { failures, failureCount, schedulerError } = error.fanOut;\n pipelineError.fanOut = {\n failures: failures.map(({ error: itemError, key, index, cancelled }) => ({\n index,\n key: key.slice(0, 1024),\n keyTruncated: key.length > 1024,\n cancelled,\n error: fanOutCause(itemError),\n })),\n failureCount,\n omittedFailureCount: failureCount - failures.length,\n };\n if (schedulerError !== undefined)\n pipelineError.fanOut.schedulerError = fanOutCause(schedulerError);\n }\n originalPipelineErrors.set(pipelineError, error);\n return pipelineError;\n}\n\nexport function isPipelineCancellation(error: unknown, runtime: PipelineRuntime): boolean {\n if (isAbortError(error)) return true;\n if (runtime.signal?.aborted === true && error === runtime.signal.reason) return true;\n if (error instanceof PipelineChildError) return error.cancelled;\n return error instanceof PipelineExecutionError && isCancelledResult(error.result);\n}\n\nfunction isCancelledResult(result: PipelineRun<unknown>): boolean {\n return result.status === \"cancelled\";\n}\n\ntype PipelineRunIdentity = { correlationId?: string; parentRunId?: string; runId: string };\n\nfunction throwIfAborted(runtime: PipelineRuntime): void {\n throwIfSignalAborted(runtime.signal, \"Pipeline run\");\n}\n\nexport async function executePlannedRun<\n TSteps extends readonly AnyStep[],\n TResult,\n TTargets extends readonly TSteps[number][],\n TResultSchema extends StandardSchemaV1 | undefined,\n>(input: {\n compiled: CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>;\n controls: PipelineRunControls;\n domainOptions: object;\n plan: PipelinePlan;\n runtime: PipelineRuntime;\n}): Promise<\n PipelineRun<TResultSchema extends StandardSchemaV1 ? InferSchemaOutput<TResultSchema> : TResult>\n> {\n type TPipelineResult = TResultSchema extends StandardSchemaV1\n ? InferSchemaOutput<TResultSchema>\n : TResult;\n type TOptions = StepsOptions<TSteps>;\n const { compiled, controls, runtime } = input;\n const startedAtMs = runtime.now();\n const runId = createRunId(compiled.id);\n try {\n // SAFETY: only internal hosts attach this observation callback. A callback\n // failure must not change whether the pipeline execution itself can start.\n (runtime as PipelineRuntime & ObservedPipelineRuntime)[PIPELINE_RUN_ID_OBSERVER]?.(runId);\n } catch {\n // Ignore observation failures; execution identity remains package-owned.\n }\n const correlationId = runtime.correlationId ?? runtime.runId;\n const identity: PipelineRunIdentity = { runId };\n if (correlationId !== undefined) identity.correlationId = correlationId;\n if (runtime.parentRunId) identity.parentRunId = runtime.parentRunId;\n const dryRun = controls.dryRun === true;\n const trace = createPipelineTraceEmitter(\n compiled.id,\n runtime.tracing,\n basePipelineLogger(runtime.log),\n { ...identity, itemKey: runtime.tracing?.itemKey },\n runtime.now\n );\n const lifecycle = createPipelineLifecycleObserver(compiled.id, runtime, trace);\n const tracedLogger = (stepId?: string, attemptId?: string): PipelineLogger => {\n if (!trace) return runtime.log;\n const base = basePipelineLogger(runtime.log);\n const log: TracedPipelineLogger = {\n error: (message, ...params) => {\n lifecycle.log(\"error\", message, params, stepId, attemptId);\n base.error(message, ...params);\n },\n log: (message, ...params) => {\n lifecycle.log(\"log\", message, params, stepId, attemptId);\n base.log(message, ...params);\n },\n warn: (message, ...params) => {\n lifecycle.log(\"warn\", message, params, stepId, attemptId);\n base.warn(message, ...params);\n },\n };\n log[PIPELINE_LOGGER_BASE] = base;\n return log;\n };\n const state = new PipelineRunState<TPipelineResult>(\n compiled.id,\n dryRun,\n startedAtMs,\n identity,\n runtime.now,\n lifecycle\n );\n state.start(input.plan, compiled.targetIds);\n\n if (!input.plan.ok) {\n state.recordRunErrors(input.plan.errors);\n return state.finish();\n }\n\n // SAFETY: `domainOptions` is the user-supplied options object; if a schema\n // is present it is re-validated below before assignment to `pipelineOptions`.\n let pipelineOptions = input.domainOptions as TOptions;\n if (compiled.optionsSchema) {\n try {\n const validated = await validateStandardSchema(\n compiled.optionsSchema,\n input.domainOptions,\n `Pipeline ${compiled.id} options`\n );\n if (typeof validated !== \"object\" || validated === null || Array.isArray(validated)) {\n throw new PipelineBoundaryValidationError(\n `Pipeline ${compiled.id} options schema returned a non-object value`,\n [{ message: \"Expected the validated options value to be an object\" }]\n );\n }\n // SAFETY: the schema validated the value against `TOptions` and the\n // object-shape check above passed, so the value is a `TOptions`.\n pipelineOptions = validated as TOptions;\n } catch (error) {\n state.recordRunErrors([\n toPipelineError(error, {\n code: \"TUBELESS_OPTIONS_VALIDATION_FAILED\",\n kind: \"validation\",\n phase: \"execution\",\n }),\n ]);\n return state.finish();\n }\n }\n\n for (const step of input.plan.steps) state.planStep(step);\n\n const executionContext: PipelineExecutionContext<TOptions> = {\n ...runtime,\n dryRun,\n log: tracedLogger(),\n options: pipelineOptions,\n runId,\n trace: trace?.context,\n };\n if (correlationId !== undefined) executionContext.correlationId = correlationId;\n if (runtime.parentRunId) executionContext.parentRunId = runtime.parentRunId;\n\n const plannedSteps = planStepById(input.plan);\n const stepsById = new Map(compiled.orderedSteps.map((step) => [step.id, step]));\n // `input.plan.steps` is already topologically ordered. Rehydrate from the original step\n // objects so callers still get the typed handlers rather than plan metadata.\n // SAFETY: every planned step id originates from `compiled.orderedSteps`, so the\n // map lookup always finds the matching `AnyStep<TOptions>`.\n const orderedSteps = input.plan.steps.map((step) => stepsById.get(step.id) as AnyStep<TOptions>);\n const plannedStepFor = (step: AnyStep<TOptions>): PipelinePlanStep =>\n plannedSteps.get(step.id) ??\n stepToPlanStep(step, true, undefined, undefined, compiledStepGraph(compiled, step));\n\n const recordRemainingStates = (\n fromIndex: number,\n failedStepId?: string,\n cancellationError?: PipelineError\n ): void => {\n for (let index = fromIndex; index < orderedSteps.length; index++) {\n const step = orderedSteps[index]!;\n const plannedStep = plannedStepFor(step);\n if (plannedStep.skipReason) {\n const dependencyId =\n plannedStep.skipReason === \"unmet-dependency\"\n ? plannedStep.dependencies.find((id) => plannedSteps.get(id)?.skipReason !== undefined)\n : undefined;\n state.skipStep(plannedStep, {\n reason: plannedStep.skipReason,\n dependencyId,\n });\n } else if (cancellationError) {\n state.cancelStep(plannedStep, { ...cancellationError, stepId: step.id }, false);\n } else {\n state.skipStep(plannedStep, {\n reason: \"fail-fast\",\n message: failedStepId\n ? `Not run because fail-fast stopped after ${failedStepId} failed.`\n : \"Not run because the pipeline was aborted before this step started.\",\n dependencyId: failedStepId,\n });\n }\n }\n };\n\n const cancelBeforeStepStart = (stepId: string, stepIndex: number): boolean => {\n try {\n throwIfAborted(runtime);\n return false;\n } catch (error) {\n const pipelineError = toPipelineError(error, {\n code: \"TUBELESS_RUN_CANCELLED\",\n kind: \"cancellation\",\n phase: \"execution\",\n stepId,\n });\n state.recordRunErrors([pipelineError]);\n recordRemainingStates(stepIndex, undefined, pipelineError);\n return true;\n }\n };\n\n const recordStepExecutionFailure = (\n error: unknown,\n plannedStep: PipelinePlanStep,\n stepIndex: number,\n attempt: PipelineStepAttempt\n ): boolean => {\n const cancelled = isPipelineCancellation(error, runtime);\n const childFailure =\n error instanceof PipelineExecutionError || error instanceof PipelineChildError;\n const validationFailure = error instanceof PipelineBoundaryValidationError;\n const pipelineError = toPipelineError(error, {\n code: cancelled\n ? \"TUBELESS_RUN_CANCELLED\"\n : validationFailure\n ? \"TUBELESS_STEP_OUTPUT_VALIDATION_FAILED\"\n : childFailure\n ? \"TUBELESS_CHILD_FAILED\"\n : \"TUBELESS_STEP_FAILED\",\n kind: cancelled\n ? \"cancellation\"\n : validationFailure\n ? \"validation\"\n : childFailure\n ? \"child\"\n : \"step\",\n phase: \"execution\",\n stepId: plannedStep.id,\n });\n state.failStep(plannedStep, attempt, pipelineError);\n if (controls.continueOnError) return false;\n recordRemainingStates(stepIndex + 1, plannedStep.id, cancelled ? pipelineError : undefined);\n return true;\n };\n\n const recordPolicySkip = async (\n plannedStep: PipelinePlanStep,\n step: AnyStep<TOptions>,\n stepIndex: number,\n reason: string,\n value: unknown\n ): Promise<boolean> => {\n let attempt: PipelineStepAttempt | undefined;\n let published = value;\n if (step.outputSchema) {\n attempt = state.beginAttempt(plannedStep);\n try {\n published = await validateStepOutput(\n step,\n value,\n `Pipeline ${compiled.id} step ${step.id} output`\n );\n } catch (error) {\n return recordStepExecutionFailure(error, plannedStep, stepIndex, attempt);\n }\n }\n state.skipStep(plannedStep, {\n attempt,\n message: reason,\n output: { value: published },\n reason: \"policy\",\n });\n return false;\n };\n\n for (const [stepIndex, step] of orderedSteps.entries()) {\n const plannedStep = plannedStepFor(step);\n if (cancelBeforeStepStart(step.id, stepIndex)) break;\n\n const graph = compiledStepGraph(compiled, step);\n const disposition = decideStepDisposition({\n dryRun,\n graph,\n planned: plannedStep,\n reportsByStepId: state.reportsByStepId,\n step,\n });\n if (disposition.kind === \"skip\") {\n state.skipStep(plannedStep, disposition);\n continue;\n }\n\n const inputEntries: Array<[string, unknown]> = [];\n for (const dep of graph.dependsOn) inputEntries.push([dep.id, state.outputs.get(dep.id)]);\n for (const dep of graph.optionalDependsOn) {\n if (state.outputs.has(dep.id)) inputEntries.push([dep.id, state.outputs.get(dep.id)]);\n }\n const stepInputs = Object.fromEntries(inputEntries);\n\n if (typeof step.skip === \"function\") {\n let skipDecision;\n try {\n skipDecision = await evaluateStepSkip(step, stepInputs, {\n ...executionContext,\n log: tracedLogger(step.id),\n });\n } catch (error) {\n const attempt = state.beginAttempt(plannedStep);\n if (recordStepExecutionFailure(error, plannedStep, stepIndex, attempt)) break;\n continue;\n }\n if (cancelBeforeStepStart(step.id, stepIndex)) break;\n if (skipDecision) {\n if (\n await recordPolicySkip(\n plannedStep,\n step,\n stepIndex,\n skipDecision.reason,\n skipDecision.value\n )\n ) {\n break;\n }\n continue;\n }\n }\n\n const attempt = state.beginAttempt(plannedStep);\n try {\n const output = await executeStepAttempt({\n attemptId: attempt.attemptId,\n context: executionContext,\n dryRun,\n inputs: stepInputs,\n log: tracedLogger(step.id, attempt.attemptId),\n onProgress: (progress) => state.reportProgress(plannedStep, attempt, progress),\n onReportAttempt: (number, attributes) =>\n lifecycle.reportAttempt(step.id, number, attributes, attempt.attemptId),\n outputBoundary: `Pipeline ${compiled.id} step ${step.id} output`,\n step,\n });\n state.completeStep(plannedStep, attempt, output);\n } catch (error) {\n if (recordStepExecutionFailure(error, plannedStep, stepIndex, attempt)) break;\n }\n }\n\n if (state.errors.length === 0 || controls.continueOnError) {\n const finalizeStartedAt = runtime.now();\n state.beginFinalization();\n try {\n throwIfAborted(runtime);\n // SAFETY: `state.outputs` maps step ids to their produced values, which is\n // exactly the shape the finalizer's outputs parameter describes.\n const finalOutputs = Object.fromEntries(state.outputs) as Parameters<\n CompiledPipeline<TSteps, TResult, TTargets, TResultSchema>[\"finalize\"]\n >[0];\n const finalizedValue = await compiled.finalize(finalOutputs, {\n ...executionContext,\n log: tracedLogger(PIPELINE_FINALIZE_STEP_ID),\n });\n // SAFETY: with a result schema the value is validated against\n // `TPipelineResult`; without one the finalizer's declared return type\n // is `TPipelineResult`, so the cast only restores that type.\n const value = compiled.resultSchema\n ? ((await validateStandardSchema(\n compiled.resultSchema,\n finalizedValue,\n `Pipeline ${compiled.id} final result`\n )) as TPipelineResult)\n : (finalizedValue as TPipelineResult);\n state.completeFinalization(value, runtime.now() - finalizeStartedAt);\n } catch (error) {\n const cancelled = isPipelineCancellation(error, runtime);\n const validationFailure = error instanceof PipelineBoundaryValidationError;\n const pipelineError = toPipelineError(error, {\n code: cancelled\n ? \"TUBELESS_FINALIZATION_CANCELLED\"\n : validationFailure\n ? \"TUBELESS_FINAL_RESULT_VALIDATION_FAILED\"\n : \"TUBELESS_FINALIZATION_FAILED\",\n kind: cancelled ? \"cancellation\" : validationFailure ? \"validation\" : \"finalization\",\n phase: \"finalization\",\n stepId: PIPELINE_FINALIZE_STEP_ID,\n });\n state.failFinalization(pipelineError, runtime.now() - finalizeStartedAt);\n }\n }\n\n return state.finish();\n}\n\nconst fallbackNow = (): number => Date.now();\n\nconst fallbackSleep = (durationMs: number, signal?: AbortSignal): Promise<void> =>\n abortableSleep(durationMs, signal, \"Pipeline sleep\");\n\nexport function defaultPipelineContext(): PipelineContext {\n return { cwd: process.cwd(), log: console, now: fallbackNow, sleep: fallbackSleep };\n}\n\nexport function resolvePipelineRuntime(context: Partial<PipelineContext> = {}): PipelineRuntime {\n const defaults = defaultPipelineContext();\n return {\n ...defaults,\n ...context,\n cwd: context.cwd ?? defaults.cwd,\n log: context.log ?? defaults.log,\n now: context.now ?? defaults.now ?? fallbackNow,\n sleep: context.sleep ?? defaults.sleep ?? fallbackSleep,\n };\n}\n"]}
@@ -24,14 +24,58 @@ function liveStepGraph(step) {
24
24
  skipAfterFailureOf: step.skipAfterFailureOf ?? [],
25
25
  };
26
26
  }
27
- function freezeStepList(steps) {
28
- return Object.freeze([...(steps ?? [])]);
27
+ function compileStep(step) {
28
+ const nestedPipeline = step[STEP_NESTED_PIPELINE];
29
+ const remote = step[STEP_REMOTE];
30
+ const optionsSchema = step[STEP_OPTIONS_SCHEMA];
31
+ const name = step.name;
32
+ const description = step.description;
33
+ const dryRun = step.dryRun;
34
+ const outputSchema = step.outputSchema;
35
+ const skip = step.skip;
36
+ const compiled = {
37
+ id: step.id,
38
+ run: step.run.bind(step),
39
+ };
40
+ if (nestedPipeline !== undefined) {
41
+ Object.assign(compiled, {
42
+ [STEP_NESTED_PIPELINE]: Object.freeze({
43
+ ...nestedPipeline,
44
+ stepIds: Object.freeze([...nestedPipeline.stepIds]),
45
+ }),
46
+ });
47
+ }
48
+ if (remote !== undefined)
49
+ Object.assign(compiled, { [STEP_REMOTE]: Object.freeze({ ...remote }) });
50
+ if (optionsSchema !== undefined)
51
+ Object.assign(compiled, { [STEP_OPTIONS_SCHEMA]: optionsSchema });
52
+ if (name !== undefined)
53
+ Object.assign(compiled, { name });
54
+ if (description !== undefined)
55
+ Object.assign(compiled, { description });
56
+ if (dryRun !== undefined) {
57
+ Object.assign(compiled, {
58
+ dryRun: typeof dryRun === "function" ? dryRun.bind(step) : dryRun,
59
+ });
60
+ }
61
+ if (outputSchema !== undefined)
62
+ Object.assign(compiled, { outputSchema });
63
+ if (skip !== undefined)
64
+ Object.assign(compiled, { skip: skip.bind(step) });
65
+ return Object.freeze(compiled);
29
66
  }
30
- function snapshotCompiledStepGraph(step) {
67
+ function snapshotCompiledStepGraph(step, compiledByAuthorStep) {
68
+ const compileDependencies = (dependencies) => Object.freeze((dependencies ?? []).map((dependency) => {
69
+ const compiled = compiledByAuthorStep.get(dependency);
70
+ if (compiled === undefined) {
71
+ throw new Error(`Compiled pipeline graph is missing dependency ${dependency.id}`);
72
+ }
73
+ return compiled;
74
+ }));
31
75
  return Object.freeze({
32
- dependsOn: freezeStepList(step.dependsOn),
33
- optionalDependsOn: freezeStepList(step.optionalDependsOn),
34
- skipAfterFailureOf: freezeStepList(step.skipAfterFailureOf),
76
+ dependsOn: compileDependencies(step.dependsOn),
77
+ optionalDependsOn: compileDependencies(step.optionalDependsOn),
78
+ skipAfterFailureOf: compileDependencies(step.skipAfterFailureOf),
35
79
  });
36
80
  }
37
81
  export function compiledStepGraph(compiled, step) {
@@ -39,7 +83,7 @@ export function compiledStepGraph(compiled, step) {
39
83
  if (graph === undefined) {
40
84
  throw new Error(`Compiled pipeline graph is missing step ${step.id}`);
41
85
  }
42
- // SAFETY: compile stores each original step object as the map key.
86
+ // SAFETY: compile stores each descriptor as the map key.
43
87
  return graph;
44
88
  }
45
89
  function pipelineDiagnostic(code, phase, kind, message, fields = {}) {
@@ -365,10 +409,10 @@ function validatePipelineDefinition(definition) {
365
409
  if (missingReferences.length > 0) {
366
410
  errors.push(pipelineDiagnostic("TUBELESS_DEFINITION_DEPENDENCY_NOT_IN_STEPS", "definition", "definition", `Pipeline ${definition.id} references step(s) not included in its steps list: ${missingReferences.join(", ")}`));
367
411
  }
368
- // SAFETY: `requireOutputs` stamps the required step ids onto the finalizer
369
- // function under `REQUIRED_FINALIZER_OUTPUTS`; the intersection only widens
370
- // the function type to expose that optional property.
371
- const requiredFinalizerSteps = definition.finalize[REQUIRED_FINALIZER_OUTPUTS];
412
+ // SAFETY: `requireOutputs` stamps internal compilation metadata onto the
413
+ // finalizer; the intersection only exposes that optional property.
414
+ const requiredFinalizerMetadata = definition.finalize[REQUIRED_FINALIZER_OUTPUTS];
415
+ const requiredFinalizerSteps = requiredFinalizerMetadata?.steps;
372
416
  const missingFinalizerSteps = (requiredFinalizerSteps ?? []).filter((step) => !knownSteps.has(step));
373
417
  if (missingFinalizerSteps.length > 0) {
374
418
  errors.push(pipelineDiagnostic("TUBELESS_DEFINITION_FINALIZER_STEP_NOT_IN_STEPS", "definition", "definition", `Pipeline ${definition.id} requires finalizer output from step(s) not included in its steps list: ${missingFinalizerSteps.map(({ id }) => id).join(", ")}`));
@@ -545,32 +589,43 @@ export function compilePipeline(definition) {
545
589
  }
546
590
  // SAFETY: `steps` is `TSteps extends readonly AnyStep[]`; the cast restores
547
591
  // the `TOptions` generic that the tuple erased, without changing the values.
548
- const orderedSteps = topologicalSort(definition.steps);
549
- // Keep the author's step objects so class private accessors and prototype
550
- // `run`/`skip` keep working. Graph arrays live in compiled storage so frozen
551
- // or later-mutated caller-owned steps cannot change planning.
552
- const stepGraph = new Map(orderedSteps.map((step) => [step, snapshotCompiledStepGraph(step)]));
553
- // SAFETY: `requireOutputs` stamps the required step ids onto the finalizer
554
- // function under `REQUIRED_FINALIZER_OUTPUTS`; the intersection only widens
555
- // the function type to expose that optional property.
556
- const requiredFinalizerSteps = definition.finalize[REQUIRED_FINALIZER_OUTPUTS];
592
+ const orderedAuthorSteps = topologicalSort(definition.steps);
593
+ const compiledByAuthorStep = new Map(orderedAuthorSteps.map((step) => [step, compileStep(step)]));
594
+ const orderedSteps = orderedAuthorSteps.map((step) => compiledByAuthorStep.get(step));
595
+ const stepGraph = new Map(orderedAuthorSteps.map((step) => {
596
+ const compiled = compiledByAuthorStep.get(step);
597
+ return [compiled, snapshotCompiledStepGraph(step, compiledByAuthorStep)];
598
+ }));
599
+ // SAFETY: `requireOutputs` stamps internal compilation metadata onto the
600
+ // finalizer; the intersection only exposes that optional property.
601
+ const requiredFinalizerMetadata = definition.finalize[REQUIRED_FINALIZER_OUTPUTS];
602
+ const requiredFinalizerSteps = requiredFinalizerMetadata?.steps;
557
603
  // SAFETY: targets are a subset of `TSteps[number]`, each an `AnyStep<TOptions>`.
558
604
  const declaredTargets = (definition.targets ?? []);
605
+ const compiledTargets = declaredTargets.map((target) => compiledByAuthorStep.get(target));
606
+ const compiledRequiredFinalizerSteps = requiredFinalizerSteps?.map((step) => compiledByAuthorStep.get(step));
607
+ const compiledFinalize = requiredFinalizerMetadata
608
+ ? requiredFinalizerMetadata.compile(compiledRequiredFinalizerSteps.map((step) => step.id))
609
+ : (outputs, context) => definition.finalize(outputs, context);
559
610
  return Object.freeze({
560
- declaredTargets: Object.freeze([...declaredTargets]),
561
- // Invoke on the author's definition so method-style finalizers keep `this`.
562
- // SAFETY: the wrapper only forwards to `definition.finalize`.
563
- finalize: ((outputs, context) => definition.finalize(outputs, context)),
611
+ declaredTargets: Object.freeze(compiledTargets),
612
+ // Invoke ordinary finalizers on the author's definition so method-style
613
+ // implementations keep `this`. Required finalizers compile the same input
614
+ // and context contract with stable required ids.
615
+ // SAFETY: both branches preserve `definition.finalize`'s call signature.
616
+ finalize: compiledFinalize,
564
617
  id: definition.id,
565
- optionsSchema: definition.steps[0]?.[STEP_OPTIONS_SCHEMA],
618
+ optionsSchema: definition.steps.length === 0
619
+ ? undefined
620
+ : compiledByAuthorStep.get(definition.steps[0])?.[STEP_OPTIONS_SCHEMA],
566
621
  orderedSteps: Object.freeze([...orderedSteps]),
567
622
  stepGraph,
568
- requiredFinalizerSteps: requiredFinalizerSteps
569
- ? Object.freeze([...requiredFinalizerSteps])
623
+ requiredFinalizerSteps: compiledRequiredFinalizerSteps
624
+ ? Object.freeze(compiledRequiredFinalizerSteps)
570
625
  : undefined,
571
626
  resultSchema: definition.resultSchema,
572
- stepIds: Object.freeze(definition.steps.map((step) => step.id)),
573
- targetIds: Object.freeze((definition.targets ?? []).map((step) => step.id)),
627
+ stepIds: Object.freeze(definition.steps.map((step) => compiledByAuthorStep.get(step).id)),
628
+ targetIds: Object.freeze(compiledTargets.map((step) => step.id)),
574
629
  });
575
630
  }
576
631
  /**
@@ -580,19 +635,26 @@ export function compilePipeline(definition) {
580
635
  */
581
636
  export function requireOutputs(requiredSteps, finalize) {
582
637
  const uniqueRequiredSteps = [...new Set(requiredSteps)];
583
- const requiredFinalizer = (outputs, context) => {
584
- const missingStepIds = uniqueRequiredSteps
585
- .filter((step) => !Object.prototype.hasOwnProperty.call(outputs, step.id))
586
- .map((step) => step.id);
638
+ const invoke = (requiredStepIds, outputs, context) => {
639
+ const missingStepIds = requiredStepIds.filter((stepId) => !Object.prototype.hasOwnProperty.call(outputs, stepId));
587
640
  if (missingStepIds.length > 0) {
588
641
  throw new Error(`Required pipeline outputs missing: ${missingStepIds.join(", ")}`);
589
642
  }
590
643
  // SAFETY: every required step id was verified present above, so the partial
591
644
  // outputs contain all required keys and are a complete required-outputs map.
645
+ // oxlint-disable-next-line anti-slop/no-chained-type-assertions
592
646
  return finalize(outputs, context);
593
647
  };
648
+ const requiredFinalizer = (outputs, context) => invoke(uniqueRequiredSteps.map((step) => step.id), outputs, context);
649
+ const metadata = Object.freeze({
650
+ compile: (requiredStepIds) => {
651
+ const snapshot = Object.freeze([...requiredStepIds]);
652
+ return (outputs, context) => invoke(snapshot, outputs, context);
653
+ },
654
+ steps: Object.freeze([...uniqueRequiredSteps]),
655
+ });
594
656
  Object.defineProperty(requiredFinalizer, REQUIRED_FINALIZER_OUTPUTS, {
595
- value: uniqueRequiredSteps,
657
+ value: metadata,
596
658
  });
597
659
  return requiredFinalizer;
598
660
  }