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.
- package/README.md +5 -5
- package/dist/core/child-execution.js +8 -1
- package/dist/core/child-execution.js.map +1 -1
- package/dist/core/lifecycle.js +2 -0
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/pipeline-execute.d.ts +2 -0
- package/dist/core/pipeline-execute.js +132 -395
- package/dist/core/pipeline-execute.js.map +1 -1
- package/dist/core/pipeline-plan.js +96 -34
- package/dist/core/pipeline-plan.js.map +1 -1
- package/dist/core/pipeline-run-state.d.ts +49 -0
- package/dist/core/pipeline-run-state.js +284 -0
- package/dist/core/pipeline-run-state.js.map +1 -0
- package/dist/core/pipeline-step-executor.d.ts +20 -0
- package/dist/core/pipeline-step-executor.js +52 -0
- package/dist/core/pipeline-step-executor.js.map +1 -0
- package/dist/core/pipeline-types.d.ts +11 -2
- package/dist/core/pipeline-types.js.map +1 -1
- package/dist/core/pipeline-validation.d.ts +6 -0
- package/dist/core/pipeline-validation.js +41 -0
- package/dist/core/pipeline-validation.js.map +1 -0
- package/dist/run-store/run-store-ndjson.js +2 -295
- package/dist/run-store/run-store-ndjson.js.map +1 -1
- package/dist/run-store/run-store-sqlite.js +91 -42
- package/dist/run-store/run-store-sqlite.js.map +1 -1
- package/dist/run-store/run-store.d.ts +3 -2
- package/dist/run-store/run-store.js +38 -195
- package/dist/run-store/run-store.js.map +1 -1
- package/dist/studio/run-store-ui-client-controller.d.ts +9 -0
- package/dist/studio/run-store-ui-client-controller.js +479 -0
- package/dist/studio/run-store-ui-client-controller.js.map +1 -0
- package/dist/studio/run-store-ui-client-form.d.ts +9 -0
- package/dist/studio/run-store-ui-client-form.js +44 -0
- package/dist/studio/run-store-ui-client-form.js.map +1 -0
- package/dist/studio/run-store-ui-client-model.d.ts +40 -0
- package/dist/studio/run-store-ui-client-model.js +211 -0
- package/dist/studio/run-store-ui-client-model.js.map +1 -0
- package/dist/studio/run-store-ui-client-source.js +1 -1
- package/dist/studio/run-store-ui-client-transport.d.ts +25 -0
- package/dist/studio/run-store-ui-client-transport.js +322 -0
- package/dist/studio/run-store-ui-client-transport.js.map +1 -0
- package/dist/studio/run-store-ui-client-views.d.ts +24 -0
- package/dist/studio/run-store-ui-client-views.js +676 -0
- package/dist/studio/run-store-ui-client-views.js.map +1 -0
- package/dist/studio/run-store-ui-client.d.ts +2 -14
- package/dist/studio/run-store-ui-client.js +7 -1360
- package/dist/studio/run-store-ui-client.js.map +1 -1
- package/dist/studio/run-store-ui-page.d.ts +1 -1
- package/dist/studio/run-store-ui.js +44 -25
- package/dist/studio/run-store-ui.js.map +1 -1
- package/dist/tracing/tracing-codec.d.ts +6 -0
- package/dist/tracing/tracing-codec.js +829 -0
- package/dist/tracing/tracing-codec.js.map +1 -0
- package/dist/tracing/tracing-constants.d.ts +4 -0
- package/dist/tracing/tracing-constants.js +5 -0
- package/dist/tracing/tracing-constants.js.map +1 -0
- package/dist/tracing/tracing-internal.js +116 -81
- package/dist/tracing/tracing-internal.js.map +1 -1
- package/dist/tracing/tracing-otel.js +19 -3
- package/dist/tracing/tracing-otel.js.map +1 -1
- package/dist/tracing/tracing.d.ts +149 -10
- package/dist/tracing/tracing.js.map +1 -1
- package/dist/workbench/workbench-history.js +8 -1
- package/dist/workbench/workbench-history.js.map +1 -1
- package/dist/workbench/workbench-ui.js +26 -6
- package/dist/workbench/workbench-ui.js.map +1 -1
- package/docs/README.md +21 -15
- package/docs/agent-guide.md +48 -35
- package/docs/agent-skills.md +59 -0
- package/docs/api-reference.md +28 -12
- package/docs/api-report.json +29 -13
- package/docs/child-pipeline-composition.md +142 -193
- package/docs/cli.md +83 -61
- package/docs/comparison.md +63 -62
- package/docs/concepts.md +210 -272
- package/docs/getting-started.md +59 -48
- package/docs/llms.txt +7 -4
- package/docs/recipes.md +21 -18
- package/docs/remote-step-composition.md +69 -74
- package/docs/studio.md +146 -71
- package/examples/catalog/pipelines/enrich.ts +2 -2
- package/examples/catalog/tubeless.project.ts +4 -2
- package/examples/host-embedding.ts +4 -5
- package/examples/remote-steps.ts +8 -5
- package/package.json +11 -10
- package/skills/tubeless/SKILL.md +83 -0
- package/skills/tubeless-make-pipeline/SKILL.md +126 -0
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://
|
|
2
|
+
<a href="https://tubeless.io/">
|
|
3
3
|
<img src="docs/assets/logo.svg" width="72" height="72" alt="Tubeless">
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
Typed, observable data pipelines you import from TypeScript or run from a Bun
|
|
17
17
|
CLI. It is a library, not a hosted workflow engine or a Make/npm-scripts
|
|
18
|
-
replacement.
|
|
18
|
+
replacement. Tubeless is pre-1.0; its public API may change.
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
npm install tubeless
|
|
@@ -99,15 +99,15 @@ go after `--`. `history` lists recorded
|
|
|
99
99
|
| Export lifecycle telemetry | [Structured tracing](./examples/tracing.ts) |
|
|
100
100
|
| Persist and inspect local runs | [Local observability](./examples/local-observability.ts) |
|
|
101
101
|
|
|
102
|
-
The [recipe index](./docs/recipes.md) explains
|
|
102
|
+
Install the [agent skill pack](./docs/agent-skills.md) with `npx skills add chetmancini/tubeless` to convert existing code using `tubeless-make-pipeline`. The [recipe index](./docs/recipes.md) explains each pattern.
|
|
103
103
|
|
|
104
104
|
## Docs
|
|
105
105
|
|
|
106
|
-
[Website](https://
|
|
106
|
+
[Website](https://tubeless.io/) ·
|
|
107
107
|
[Getting started](./docs/getting-started.md) · [CLI](./docs/cli.md) ·
|
|
108
108
|
[Studio](./docs/studio.md) · [Concepts](./docs/concepts.md) ·
|
|
109
109
|
[Comparison](./docs/comparison.md) · [API](./docs/api-reference.md) ·
|
|
110
|
-
[Agents](./docs/agent-guide.md)
|
|
110
|
+
[Agents](./docs/agent-guide.md) · [Studio OpenAPI](https://tubeless.io/openapi.json)
|
|
111
111
|
|
|
112
112
|
## Contributing
|
|
113
113
|
|
|
@@ -40,6 +40,8 @@ function publicChildRuntime(context) {
|
|
|
40
40
|
now: context.now ?? Date.now,
|
|
41
41
|
sleep: context.sleep ?? (async () => undefined),
|
|
42
42
|
};
|
|
43
|
+
if (context.correlationId !== undefined)
|
|
44
|
+
runtime.correlationId = context.correlationId;
|
|
43
45
|
if (context.hooks)
|
|
44
46
|
runtime.hooks = context.hooks;
|
|
45
47
|
if (context.parentRunId)
|
|
@@ -61,12 +63,15 @@ async function failedPublicChildPlanRun(pipeline, plan, controls, context) {
|
|
|
61
63
|
errors: [...plan.errors],
|
|
62
64
|
finalized: false,
|
|
63
65
|
finishedAtMs: runtime.now(),
|
|
64
|
-
runId:
|
|
66
|
+
runId: createRunId(pipeline.id),
|
|
65
67
|
startedAtMs,
|
|
66
68
|
status: "failed",
|
|
67
69
|
steps: [],
|
|
68
70
|
version: RUN_MODEL_VERSION,
|
|
69
71
|
};
|
|
72
|
+
const correlationId = context.correlationId ?? context.runId;
|
|
73
|
+
if (correlationId !== undefined)
|
|
74
|
+
result.correlationId = correlationId;
|
|
70
75
|
if (context.parentRunId)
|
|
71
76
|
result.parentRunId = context.parentRunId;
|
|
72
77
|
await emitRejectedPlanLifecycle(pipeline.id, pipeline.targetIds, plan, runtime, result);
|
|
@@ -185,6 +190,7 @@ export function createSingleChildRunner(config, dependencies) {
|
|
|
185
190
|
return async (inputs, context) => {
|
|
186
191
|
const { controls, domainOptions } = childRunBags(config.mapOptions(inputs, context), context.dryRun);
|
|
187
192
|
const baseChildContext = {
|
|
193
|
+
correlationId: context.correlationId,
|
|
188
194
|
cwd: context.cwd,
|
|
189
195
|
log: context.log,
|
|
190
196
|
now: context.now,
|
|
@@ -364,6 +370,7 @@ export function createMappedChildRunner(config, dependencies) {
|
|
|
364
370
|
onStepFail: ({ step }) => markChildTerminal(key, step.id, `${step.name ?? step.id}:failed`),
|
|
365
371
|
};
|
|
366
372
|
const childResult = await runChildPipeline(config.pipeline, domainOptions, controls, {
|
|
373
|
+
correlationId: context.correlationId,
|
|
367
374
|
cwd: context.cwd,
|
|
368
375
|
log: context.log,
|
|
369
376
|
now: context.now,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-execution.js","sourceRoot":"","sources":["../../src/core/child-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { throwIfAborted } from \"../utilities/abort.js\";\nimport { emitRejectedPlanLifecycle } from \"./lifecycle.js\";\nimport { runConcurrentSettled } from \"../utilities/batch.js\";\nimport {\n toMappedChildStepProgress,\n type MappedChildProgressSnapshot,\n type ToMappedChildStepProgressOptions,\n} from \"./mapped-child-progress.js\";\nimport { createRunId, RUN_MODEL_VERSION } from \"./pipeline-ids.js\";\nimport { duplicateValues } from \"../utilities/collections.js\";\nimport { EXECUTE_COMPILED_RUN, isCompiledPipeline } from \"./pipeline-plan.js\";\nimport { createChildProgress } from \"./child-progress.js\";\nimport { hasVisibleStepProgress } from \"./progress.js\";\nimport type {\n Pipeline,\n PipelineContext,\n PipelineExecutionContext,\n PipelineHooks,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunControls,\n PipelineRunOptions,\n PipelineRuntime,\n PipelineStepContext,\n PipelineStepProgressDetail,\n} from \"./pipeline-types.js\";\nimport type { PipelineTracingOptions } from \"../tracing/tracing.js\";\n\nexport class PipelineChildError extends Error {\n constructor(\n message: string,\n readonly cancelled = false,\n cause?: unknown,\n readonly fanOut?: {\n failures: readonly { error: Error; key: string; index: number; cancelled: boolean }[];\n failureCount: number;\n schedulerError?: Error;\n }\n ) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"PipelineChildError\";\n }\n}\n\nconst LIVE_FAN_OUT_GROUP_LIMIT = 32;\n\ntype ChildPipeline = Pipeline<object, unknown, string, string>;\n\ntype CompiledChildExecute = (\n plan: PipelinePlan,\n options: PipelineRunOptions,\n controls: PipelineRunControls,\n context?: Partial<PipelineContext>\n) => Promise<PipelineRun<unknown>>;\n\ntype ExecutableChild = ChildPipeline & {\n [EXECUTE_COMPILED_RUN]?: CompiledChildExecute;\n};\n\nfunction compiledChildExecute(pipeline: ChildPipeline): CompiledChildExecute | undefined {\n if (!isCompiledPipeline(pipeline)) return undefined;\n // SAFETY: branded pipelines are the `definePipeline` object, which always\n // stamps `EXECUTE_COMPILED_RUN`. Wrappers that inherit the symbol are rejected\n // by the identity check above.\n return (pipeline as ExecutableChild)[EXECUTE_COMPILED_RUN];\n}\n\nfunction executeCompiledChild(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const execute = compiledChildExecute(pipeline);\n if (execute === undefined) {\n return pipeline.run(domainOptions, controls, context);\n }\n return execute(plan, domainOptions, controls, context);\n}\n\nfunction publicChildRuntime(context: PipelineContext): PipelineRuntime {\n const runtime: PipelineRuntime = {\n cwd: context.cwd,\n log: context.log,\n now: context.now ?? Date.now,\n sleep: context.sleep ?? (async () => undefined),\n };\n if (context.hooks) runtime.hooks = context.hooks;\n if (context.parentRunId) runtime.parentRunId = context.parentRunId;\n if (context.runId) runtime.runId = context.runId;\n if (context.signal) runtime.signal = context.signal;\n if (context.tracing) runtime.tracing = context.tracing;\n return runtime;\n}\n\nasync function failedPublicChildPlanRun(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const runtime = publicChildRuntime(context);\n const startedAtMs = runtime.now();\n const result: PipelineRun<unknown> = {\n pipelineId: pipeline.id,\n dryRun: controls.dryRun === true,\n errors: [...plan.errors],\n finalized: false,\n finishedAtMs: runtime.now(),\n runId: context.runId ?? createRunId(pipeline.id),\n startedAtMs,\n status: \"failed\",\n steps: [],\n version: RUN_MODEL_VERSION,\n };\n if (context.parentRunId) result.parentRunId = context.parentRunId;\n await emitRejectedPlanLifecycle(pipeline.id, pipeline.targetIds, plan, runtime, result);\n return result;\n}\n\nasync function rejectedChildPlanResult(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const execute = compiledChildExecute(pipeline);\n if (execute === undefined) {\n return failedPublicChildPlanRun(pipeline, plan, controls, context);\n }\n return execute(plan, domainOptions, controls, context);\n}\n\ntype ChildInputs = Record<string, unknown>;\n\ninterface ChildExecutionDependencies<TParentOptions extends object> {\n createExecutionError(result: PipelineRun<unknown>, message: string): Error;\n isCancellation(cause: unknown, context: PipelineExecutionContext<TParentOptions>): boolean;\n}\n\nexport interface SingleChildExecutionConfig<TParentOptions extends object> {\n pipeline: ChildPipeline;\n mapOptions(\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): PipelineRunOptions;\n mapResult?(\n value: unknown,\n result: PipelineRun<unknown>,\n context: PipelineStepContext<TParentOptions>\n ): unknown;\n}\n\nexport interface MappedChildExecutionConfig<TParentOptions extends object> {\n pipeline: ChildPipeline;\n items(\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): readonly unknown[] | Promise<readonly unknown[]>;\n key(item: unknown, index: number): string;\n concurrency?:\n | number\n | ((inputs: ChildInputs, context: PipelineExecutionContext<TParentOptions>) => number);\n progress?: ToMappedChildStepProgressOptions;\n mapOptions(\n item: unknown,\n index: number,\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): PipelineRunOptions;\n mapResult?(\n value: unknown,\n result: PipelineRun<unknown>,\n item: unknown,\n index: number,\n context: PipelineStepContext<TParentOptions>\n ): unknown;\n}\n\nfunction childTracingOptions(\n context: PipelineExecutionContext<object>,\n itemKey = context.trace?.itemKey\n): PipelineTracingOptions | undefined {\n return context.tracing ? { ...context.tracing, itemKey } : undefined;\n}\n\nconst CHILD_RUN_CONTROL_KEYS = [\"continueOnError\", \"dryRun\", \"stepIds\", \"targets\"] as const;\n\nfunction isChildRunControlKey(\n property: PropertyKey\n): property is (typeof CHILD_RUN_CONTROL_KEYS)[number] {\n return (\n typeof property === \"string\" &&\n // SAFETY: `includes` membership over the literal tuple guarantees the cast\n // target is exactly one of the declared run-control keys.\n CHILD_RUN_CONTROL_KEYS.includes(property as (typeof CHILD_RUN_CONTROL_KEYS)[number])\n );\n}\n\ninterface ChildRunBags {\n controls: PipelineRunControls;\n domainOptions: PipelineRunOptions;\n}\n\nfunction splitChildRunOptions(options: PipelineRunOptions): ChildRunBags {\n const controls: PipelineRunControls = {};\n let hasControls = false;\n for (const key of CHILD_RUN_CONTROL_KEYS) {\n if (!Object.prototype.hasOwnProperty.call(options, key)) continue;\n hasControls = true;\n Object.assign(controls, { [key]: options[key] });\n }\n if (!hasControls) {\n return { controls, domainOptions: options };\n }\n return { controls, domainOptions: createChildDomainOptionsView(options) };\n}\n\nfunction createChildDomainOptionsView(options: PipelineRunOptions): PipelineRunOptions {\n // SAFETY: proxy an empty facade so hiding non-configurable control keys on a\n // frozen mapOptions bag does not violate proxy invariants. Reads still use\n // `options` as the receiver so accessors and methods keep their original `this`.\n return new Proxy({} as PipelineRunOptions, {\n get(_target, property) {\n if (isChildRunControlKey(property)) return undefined;\n const value = readChildOptionProperty(options, property);\n return value instanceof Function ? value.bind(options) : value;\n },\n has(_target, property) {\n return !isChildRunControlKey(property) && property in options;\n },\n ownKeys() {\n return Reflect.ownKeys(options).filter((property) => !isChildRunControlKey(property));\n },\n getOwnPropertyDescriptor(_target, property) {\n if (isChildRunControlKey(property)) return undefined;\n const descriptor = Reflect.getOwnPropertyDescriptor(options, property);\n if (descriptor === undefined) return undefined;\n return { ...descriptor, configurable: true };\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(options);\n },\n set(_target, property, value) {\n if (isChildRunControlKey(property)) return true;\n return Reflect.set(options, property, value, options);\n },\n });\n}\n\nfunction readChildOptionProperty(options: PipelineRunOptions, property: PropertyKey): unknown {\n // SAFETY: child mapOptions is an untyped bag; this index reads the requested\n // key on that original object so accessors keep it as `this`.\n return options[property as keyof PipelineRunOptions];\n}\n\nfunction childRunBags(options: PipelineRunOptions, dryRun: boolean): ChildRunBags {\n const { controls, domainOptions } = splitChildRunOptions(options);\n return { controls: { ...controls, dryRun }, domainOptions };\n}\n\nfunction isConcurrencyFunction<TOptions extends object>(\n concurrency:\n | number\n | ((inputs: ChildInputs, context: PipelineExecutionContext<TOptions>) => number)\n | undefined\n): concurrency is (inputs: ChildInputs, context: PipelineExecutionContext<TOptions>) => number {\n return typeof concurrency === \"function\";\n}\n\nfunction firstChildFailure(result: PipelineRun<unknown>) {\n const firstFailedStep = result.steps.find(\n ({ status }) => status === \"failed\" || status === \"cancelled\"\n );\n const firstError =\n firstFailedStep && \"error\" in firstFailedStep ? firstFailedStep.error : result.errors[0];\n return {\n failureLocation: firstFailedStep?.id ?? firstError?.stepId ?? \"unknown step\",\n message: firstError?.message ?? \"unknown error\",\n };\n}\n\nasync function runChildPipeline(\n pipeline: ChildPipeline,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext,\n hooks: PipelineHooks,\n dependencies: ChildExecutionDependencies<object>,\n messagePrefix = \"\",\n plan: PipelinePlan\n): Promise<PipelineRun<unknown>> {\n if (!plan.ok) {\n const firstError = plan.errors[0];\n const result = await rejectedChildPlanResult(pipeline, plan, domainOptions, controls, {\n ...context,\n hooks,\n });\n throw dependencies.createExecutionError(\n result,\n `${messagePrefix}could not start: ${firstError?.message ?? \"invalid plan\"}`\n );\n }\n\n const result = await executeCompiledChild(pipeline, plan, domainOptions, controls, {\n ...context,\n hooks,\n });\n if (result.status !== \"completed\") {\n const { failureLocation, message } = firstChildFailure(result);\n throw dependencies.createExecutionError(\n result,\n `${messagePrefix}failed at ${failureLocation}: ${message}`\n );\n }\n return result;\n}\n\nfunction hasProgressObserver(context: PipelineContext): boolean {\n const hooks = Array.isArray(context.hooks) ? context.hooks : [context.hooks];\n return (\n Boolean(context.tracing) || hooks.some((hook) => hook?.onStepProgress || hook?.onStepStatus)\n );\n}\n\nexport function createSingleChildRunner<TParentOptions extends object>(\n config: SingleChildExecutionConfig<TParentOptions>,\n dependencies: ChildExecutionDependencies<TParentOptions>\n): (inputs: ChildInputs, context: PipelineStepContext<TParentOptions>) => Promise<unknown> {\n return async (inputs, context) => {\n const { controls, domainOptions } = childRunBags(\n config.mapOptions(inputs, context),\n context.dryRun\n );\n const baseChildContext: PipelineContext = {\n cwd: context.cwd,\n log: context.log,\n now: context.now,\n parentRunId: context.runId,\n signal: context.signal,\n sleep: context.sleep,\n tracing: childTracingOptions(context),\n };\n // Plan once for progress totals and execution. Invalid plans fail before child.run.\n const childPlan = config.pipeline.plan(controls);\n const selectedStepCount = childPlan.ok\n ? childPlan.steps.filter((step) => step.selected).length\n : 0;\n const childProgress = hasProgressObserver(context) ? createChildProgress(childPlan) : undefined;\n const terminalSteps = new Set<string>();\n const report = (step: PipelinePlanStep, message: string, terminal = false): void => {\n if (!childProgress) return;\n if (terminal) terminalSteps.add(step.id);\n context.reportProgress({\n details: childProgress.details(),\n completed: terminalSteps.size,\n total: Math.max(1, selectedStepCount),\n message: `${config.pipeline.id}/${step.name ?? step.id}: ${message}`,\n });\n };\n const childHooks: PipelineHooks = {\n onStepStatus: childProgress?.update,\n onStepStart: ({ step }) => report(step, \"started\"),\n onStepProgress: ({ progress, step }) => {\n if (!hasVisibleStepProgress(progress)) return;\n report(step, progress.message ?? `${progress.completed} completed`);\n },\n onStepComplete: ({ step }) => report(step, \"complete\", true),\n onStepSkip: ({ reason, step }) => report(step, `skipped: ${reason}`, reason !== \"filtered\"),\n onStepCancel: ({ error, step }) => report(step, `cancelled: ${error.message}`, true),\n onStepFail: ({ error, step }) => report(step, `failed: ${error.message}`, true),\n };\n const childResult = await runChildPipeline(\n config.pipeline,\n domainOptions,\n controls,\n baseChildContext,\n childProgress ? childHooks : {},\n dependencies,\n `Child pipeline ${config.pipeline.id} `,\n childPlan\n );\n\n return config.mapResult\n ? config.mapResult(childResult.value, childResult, context)\n : childResult.value;\n };\n}\n\nexport function createMappedChildRunner<TParentOptions extends object>(\n config: MappedChildExecutionConfig<TParentOptions>,\n dependencies: ChildExecutionDependencies<TParentOptions>\n): (inputs: ChildInputs, context: PipelineStepContext<TParentOptions>) => Promise<unknown[]> {\n return async (inputs, context) => {\n const items = [...(await config.items(inputs, context))];\n const keys = items.map((item, index) => config.key(item, index));\n const duplicateKeys = duplicateValues(keys);\n if (duplicateKeys.length > 0) {\n throw new PipelineChildError(\n `Mapped child pipeline ${config.pipeline.id} received duplicate item keys: ${duplicateKeys.join(\", \")}`\n );\n }\n const concurrency = Math.max(\n 1,\n isConcurrencyFunction(config.concurrency)\n ? config.concurrency(inputs, context)\n : (config.concurrency ?? 1)\n );\n type Outcome =\n | { key: string; ok: true; value: unknown }\n | { error: Error; key: string; index: number; ok: false };\n\n const active = new Map<string, string>();\n const failedKeys = new Set<string>();\n const itemIndexes = new Map(keys.map((key, index) => [key, index]));\n const observesProgress = hasProgressObserver(context);\n const itemRows = new Map<string, PipelineStepProgressDetail>(\n keys.map((id) => [id, { id, status: \"pending\" }])\n );\n const itemProgress = new Map<string, ReturnType<typeof createChildProgress>>();\n const childTerminalSteps = new Map<string, Set<string>>();\n let finishedItems = 0;\n let failedItems = 0;\n let stepsPerItem = 0;\n let plannedChildSteps = 0;\n let plannedItems = 0;\n let terminalChildSteps = 0;\n\n const publishProgress = (spotlight?: string, final = false): void => {\n if (!observesProgress) return;\n const snapshot: MappedChildProgressSnapshot = {\n active,\n concurrency,\n failedItems,\n finishedItems,\n itemCount: items.length,\n plannedChildSteps,\n plannedItems,\n stepsPerItem,\n terminalChildSteps,\n spotlight,\n };\n // Materialize a bounded live window; expand the default final snapshot once.\n // Active and failed sets avoid scanning or sorting the full fan-out per event.\n const limit =\n Math.max(0, Math.floor(config.progress?.detailLimit ?? LIVE_FAN_OUT_GROUP_LIMIT)) || 0;\n let visibleKeys: readonly string[];\n if (final && config.progress?.detailLimit === undefined) {\n visibleKeys = keys;\n } else {\n const visible = new Set<string>();\n for (const candidates of [active.keys(), failedKeys.keys(), keys.values()]) {\n for (const key of candidates) {\n if (visible.size >= limit) break;\n visible.add(key);\n }\n }\n visibleKeys = [...visible].sort(\n (left, right) => itemIndexes.get(left)! - itemIndexes.get(right)!\n );\n }\n const details = visibleKeys.flatMap((key) => [\n { ...itemRows.get(key)! },\n ...(itemProgress.get(key)?.details() ?? []).map((detail) => ({\n ...detail,\n depth: (detail.depth ?? 0) + 1,\n })),\n ]);\n if (visibleKeys.length < keys.length) {\n details.push({ id: `+${keys.length - visibleKeys.length} more`, status: \"pending\" });\n }\n context.reportProgress({ ...toMappedChildStepProgress(snapshot, config.progress), details });\n };\n const markChildTerminal = (itemKey: string, stepId: string, label: string): void => {\n let seen = childTerminalSteps.get(itemKey);\n if (!seen) {\n seen = new Set();\n childTerminalSteps.set(itemKey, seen);\n }\n if (!seen.has(stepId)) {\n seen.add(stepId);\n terminalChildSteps += 1;\n }\n active.set(itemKey, label);\n publishProgress();\n };\n\n if (items.length === 0) {\n publishProgress();\n return [];\n }\n publishProgress();\n\n const settled = await runConcurrentSettled(\n items,\n { concurrency, signal: context.signal },\n async (item, itemIndex): Promise<Outcome> => {\n const key = keys[itemIndex]!;\n active.set(key, \"starting\");\n itemRows.set(key, { id: key, status: \"running\" });\n publishProgress();\n try {\n throwIfAborted(context.signal, `Mapped child pipeline ${config.pipeline.id}`);\n const { controls, domainOptions } = childRunBags(\n config.mapOptions(item, itemIndex, inputs, context),\n context.dryRun\n );\n // Plan once per mapped-options bag for progress and execution.\n const childPlan = config.pipeline.plan(controls);\n if (childPlan.ok) {\n const plannedSteps = childPlan.steps.filter((step) => step.selected).length;\n plannedChildSteps += plannedSteps;\n plannedItems += 1;\n if (plannedSteps > stepsPerItem) stepsPerItem = plannedSteps;\n }\n\n const childProgress = observesProgress ? createChildProgress(childPlan) : undefined;\n if (childProgress) itemProgress.set(key, childProgress);\n const childHooks: PipelineHooks = {\n onStepStatus: childProgress?.update,\n onStepStart: ({ step }) => {\n active.set(key, step.name ?? step.id);\n publishProgress();\n },\n onStepProgress: ({ progress, step }) => {\n if (!hasVisibleStepProgress(progress)) return;\n const detail =\n progress.message ??\n (progress.total !== undefined\n ? `${progress.completed}/${progress.total}`\n : `${progress.completed}`);\n active.set(key, `${step.name ?? step.id}:${detail}`);\n publishProgress();\n },\n onStepComplete: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:complete`),\n onStepSkip: ({ reason, step }) => {\n if (reason === \"filtered\") return;\n markChildTerminal(key, step.id, `${step.name ?? step.id}:skipped:${reason}`);\n },\n onStepCancel: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:cancelled`),\n onStepFail: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:failed`),\n };\n const childResult = await runChildPipeline(\n config.pipeline,\n domainOptions,\n controls,\n {\n cwd: context.cwd,\n log: context.log,\n now: context.now,\n parentRunId: context.runId,\n signal: context.signal,\n sleep: context.sleep,\n tracing: childTracingOptions(context, key),\n },\n observesProgress ? childHooks : {},\n dependencies,\n \"\",\n childPlan\n );\n\n const seen = childTerminalSteps.get(key) ?? new Set<string>();\n if (childPlan.ok) {\n for (const planStep of childPlan.steps) {\n if (!planStep.selected || seen.has(planStep.id)) continue;\n seen.add(planStep.id);\n terminalChildSteps += 1;\n }\n }\n childTerminalSteps.set(key, seen);\n\n const value = config.mapResult\n ? config.mapResult(childResult.value, childResult, item, itemIndex, context)\n : childResult.value;\n active.delete(key);\n itemRows.set(key, { id: key, status: \"completed\" });\n finishedItems += 1;\n publishProgress(`${key}: completed`);\n return { key, ok: true, value };\n } catch (error) {\n const cause = error instanceof Error ? error : new Error(String(error));\n active.delete(key);\n itemRows.set(key, {\n id: key,\n status: dependencies.isCancellation(cause, context) ? \"cancelled\" : \"failed\",\n label: cause.message,\n });\n failedKeys.add(key);\n failedItems += 1;\n publishProgress(`${key}: failed`);\n return { error: cause, key, index: itemIndex, ok: false };\n }\n }\n );\n\n if (config.progress?.detailLimit === undefined && keys.length > LIVE_FAN_OUT_GROUP_LIMIT) {\n publishProgress(undefined, true);\n }\n const outcomes = settled.results.filter((outcome): outcome is Outcome => outcome !== undefined);\n const schedulerFailure =\n settled.failure === undefined\n ? undefined\n : settled.failure instanceof Error\n ? settled.failure\n : new Error(String(settled.failure));\n\n const failures = outcomes.filter(\n (outcome): outcome is Extract<Outcome, { ok: false }> => !outcome.ok\n );\n if (failures.length > 0 || schedulerFailure !== undefined) {\n const details = failures.map(({ error, key }) => `${key}: ${error.message}`).join(\"; \");\n const cancelled =\n failures.every(({ error }) => dependencies.isCancellation(error, context)) &&\n (schedulerFailure === undefined || dependencies.isCancellation(schedulerFailure, context));\n const primaryError = cancelled\n ? (failures[0]?.error ?? schedulerFailure)\n : (failures.find(({ error }) => !dependencies.isCancellation(error, context))?.error ??\n failures[0]?.error ??\n schedulerFailure);\n const message =\n failures.length > 0\n ? `Mapped child pipeline ${config.pipeline.id} failed for ${failures.length} item(s): ${details}`\n : `Mapped child pipeline ${config.pipeline.id} failed: ${primaryError?.message ?? \"aborted\"}`;\n throw new PipelineChildError(message, cancelled, primaryError, {\n failures: failures.slice(0, 32).map(({ error, key, index }) => ({\n error,\n key,\n index,\n cancelled: dependencies.isCancellation(error, context),\n })),\n failureCount: failures.length,\n schedulerError: schedulerFailure,\n });\n }\n // SAFETY: when failures.length === 0 every outcome was produced by the\n // success branch (return { key, ok: true, value }), so each outcome is\n // necessarily `{ ok: true }`; the assertion narrows the union accordingly.\n return outcomes.map((outcome) => (outcome as Extract<Outcome, { ok: true }>).value);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"child-execution.js","sourceRoot":"","sources":["../../src/core/child-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { throwIfAborted } from \"../utilities/abort.js\";\nimport { emitRejectedPlanLifecycle } from \"./lifecycle.js\";\nimport { runConcurrentSettled } from \"../utilities/batch.js\";\nimport {\n toMappedChildStepProgress,\n type MappedChildProgressSnapshot,\n type ToMappedChildStepProgressOptions,\n} from \"./mapped-child-progress.js\";\nimport { createRunId, RUN_MODEL_VERSION } from \"./pipeline-ids.js\";\nimport { duplicateValues } from \"../utilities/collections.js\";\nimport { EXECUTE_COMPILED_RUN, isCompiledPipeline } from \"./pipeline-plan.js\";\nimport { createChildProgress } from \"./child-progress.js\";\nimport { hasVisibleStepProgress } from \"./progress.js\";\nimport type {\n Pipeline,\n PipelineContext,\n PipelineExecutionContext,\n PipelineHooks,\n PipelinePlan,\n PipelinePlanStep,\n PipelineRun,\n PipelineRunControls,\n PipelineRunOptions,\n PipelineRuntime,\n PipelineStepContext,\n PipelineStepProgressDetail,\n} from \"./pipeline-types.js\";\nimport type { PipelineTracingOptions } from \"../tracing/tracing.js\";\n\nexport class PipelineChildError extends Error {\n constructor(\n message: string,\n readonly cancelled = false,\n cause?: unknown,\n readonly fanOut?: {\n failures: readonly { error: Error; key: string; index: number; cancelled: boolean }[];\n failureCount: number;\n schedulerError?: Error;\n }\n ) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"PipelineChildError\";\n }\n}\n\nconst LIVE_FAN_OUT_GROUP_LIMIT = 32;\n\ntype ChildPipeline = Pipeline<object, unknown, string, string>;\n\ntype CompiledChildExecute = (\n plan: PipelinePlan,\n options: PipelineRunOptions,\n controls: PipelineRunControls,\n context?: Partial<PipelineContext>\n) => Promise<PipelineRun<unknown>>;\n\ntype ExecutableChild = ChildPipeline & {\n [EXECUTE_COMPILED_RUN]?: CompiledChildExecute;\n};\n\nfunction compiledChildExecute(pipeline: ChildPipeline): CompiledChildExecute | undefined {\n if (!isCompiledPipeline(pipeline)) return undefined;\n // SAFETY: branded pipelines are the `definePipeline` object, which always\n // stamps `EXECUTE_COMPILED_RUN`. Wrappers that inherit the symbol are rejected\n // by the identity check above.\n return (pipeline as ExecutableChild)[EXECUTE_COMPILED_RUN];\n}\n\nfunction executeCompiledChild(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const execute = compiledChildExecute(pipeline);\n if (execute === undefined) {\n return pipeline.run(domainOptions, controls, context);\n }\n return execute(plan, domainOptions, controls, context);\n}\n\nfunction publicChildRuntime(context: PipelineContext): PipelineRuntime {\n const runtime: PipelineRuntime = {\n cwd: context.cwd,\n log: context.log,\n now: context.now ?? Date.now,\n sleep: context.sleep ?? (async () => undefined),\n };\n if (context.correlationId !== undefined) runtime.correlationId = context.correlationId;\n if (context.hooks) runtime.hooks = context.hooks;\n if (context.parentRunId) runtime.parentRunId = context.parentRunId;\n if (context.runId) runtime.runId = context.runId;\n if (context.signal) runtime.signal = context.signal;\n if (context.tracing) runtime.tracing = context.tracing;\n return runtime;\n}\n\nasync function failedPublicChildPlanRun(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const runtime = publicChildRuntime(context);\n const startedAtMs = runtime.now();\n const result: PipelineRun<unknown> = {\n pipelineId: pipeline.id,\n dryRun: controls.dryRun === true,\n errors: [...plan.errors],\n finalized: false,\n finishedAtMs: runtime.now(),\n runId: createRunId(pipeline.id),\n startedAtMs,\n status: \"failed\",\n steps: [],\n version: RUN_MODEL_VERSION,\n };\n const correlationId = context.correlationId ?? context.runId;\n if (correlationId !== undefined) result.correlationId = correlationId;\n if (context.parentRunId) result.parentRunId = context.parentRunId;\n await emitRejectedPlanLifecycle(pipeline.id, pipeline.targetIds, plan, runtime, result);\n return result;\n}\n\nasync function rejectedChildPlanResult(\n pipeline: ChildPipeline,\n plan: PipelinePlan,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext\n): Promise<PipelineRun<unknown>> {\n const execute = compiledChildExecute(pipeline);\n if (execute === undefined) {\n return failedPublicChildPlanRun(pipeline, plan, controls, context);\n }\n return execute(plan, domainOptions, controls, context);\n}\n\ntype ChildInputs = Record<string, unknown>;\n\ninterface ChildExecutionDependencies<TParentOptions extends object> {\n createExecutionError(result: PipelineRun<unknown>, message: string): Error;\n isCancellation(cause: unknown, context: PipelineExecutionContext<TParentOptions>): boolean;\n}\n\nexport interface SingleChildExecutionConfig<TParentOptions extends object> {\n pipeline: ChildPipeline;\n mapOptions(\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): PipelineRunOptions;\n mapResult?(\n value: unknown,\n result: PipelineRun<unknown>,\n context: PipelineStepContext<TParentOptions>\n ): unknown;\n}\n\nexport interface MappedChildExecutionConfig<TParentOptions extends object> {\n pipeline: ChildPipeline;\n items(\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): readonly unknown[] | Promise<readonly unknown[]>;\n key(item: unknown, index: number): string;\n concurrency?:\n | number\n | ((inputs: ChildInputs, context: PipelineExecutionContext<TParentOptions>) => number);\n progress?: ToMappedChildStepProgressOptions;\n mapOptions(\n item: unknown,\n index: number,\n inputs: ChildInputs,\n context: PipelineExecutionContext<TParentOptions>\n ): PipelineRunOptions;\n mapResult?(\n value: unknown,\n result: PipelineRun<unknown>,\n item: unknown,\n index: number,\n context: PipelineStepContext<TParentOptions>\n ): unknown;\n}\n\nfunction childTracingOptions(\n context: PipelineExecutionContext<object>,\n itemKey = context.trace?.itemKey\n): PipelineTracingOptions | undefined {\n return context.tracing ? { ...context.tracing, itemKey } : undefined;\n}\n\nconst CHILD_RUN_CONTROL_KEYS = [\"continueOnError\", \"dryRun\", \"stepIds\", \"targets\"] as const;\n\nfunction isChildRunControlKey(\n property: PropertyKey\n): property is (typeof CHILD_RUN_CONTROL_KEYS)[number] {\n return (\n typeof property === \"string\" &&\n // SAFETY: `includes` membership over the literal tuple guarantees the cast\n // target is exactly one of the declared run-control keys.\n CHILD_RUN_CONTROL_KEYS.includes(property as (typeof CHILD_RUN_CONTROL_KEYS)[number])\n );\n}\n\ninterface ChildRunBags {\n controls: PipelineRunControls;\n domainOptions: PipelineRunOptions;\n}\n\nfunction splitChildRunOptions(options: PipelineRunOptions): ChildRunBags {\n const controls: PipelineRunControls = {};\n let hasControls = false;\n for (const key of CHILD_RUN_CONTROL_KEYS) {\n if (!Object.prototype.hasOwnProperty.call(options, key)) continue;\n hasControls = true;\n Object.assign(controls, { [key]: options[key] });\n }\n if (!hasControls) {\n return { controls, domainOptions: options };\n }\n return { controls, domainOptions: createChildDomainOptionsView(options) };\n}\n\nfunction createChildDomainOptionsView(options: PipelineRunOptions): PipelineRunOptions {\n // SAFETY: proxy an empty facade so hiding non-configurable control keys on a\n // frozen mapOptions bag does not violate proxy invariants. Reads still use\n // `options` as the receiver so accessors and methods keep their original `this`.\n return new Proxy({} as PipelineRunOptions, {\n get(_target, property) {\n if (isChildRunControlKey(property)) return undefined;\n const value = readChildOptionProperty(options, property);\n return value instanceof Function ? value.bind(options) : value;\n },\n has(_target, property) {\n return !isChildRunControlKey(property) && property in options;\n },\n ownKeys() {\n return Reflect.ownKeys(options).filter((property) => !isChildRunControlKey(property));\n },\n getOwnPropertyDescriptor(_target, property) {\n if (isChildRunControlKey(property)) return undefined;\n const descriptor = Reflect.getOwnPropertyDescriptor(options, property);\n if (descriptor === undefined) return undefined;\n return { ...descriptor, configurable: true };\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(options);\n },\n set(_target, property, value) {\n if (isChildRunControlKey(property)) return true;\n return Reflect.set(options, property, value, options);\n },\n });\n}\n\nfunction readChildOptionProperty(options: PipelineRunOptions, property: PropertyKey): unknown {\n // SAFETY: child mapOptions is an untyped bag; this index reads the requested\n // key on that original object so accessors keep it as `this`.\n return options[property as keyof PipelineRunOptions];\n}\n\nfunction childRunBags(options: PipelineRunOptions, dryRun: boolean): ChildRunBags {\n const { controls, domainOptions } = splitChildRunOptions(options);\n return { controls: { ...controls, dryRun }, domainOptions };\n}\n\nfunction isConcurrencyFunction<TOptions extends object>(\n concurrency:\n | number\n | ((inputs: ChildInputs, context: PipelineExecutionContext<TOptions>) => number)\n | undefined\n): concurrency is (inputs: ChildInputs, context: PipelineExecutionContext<TOptions>) => number {\n return typeof concurrency === \"function\";\n}\n\nfunction firstChildFailure(result: PipelineRun<unknown>) {\n const firstFailedStep = result.steps.find(\n ({ status }) => status === \"failed\" || status === \"cancelled\"\n );\n const firstError =\n firstFailedStep && \"error\" in firstFailedStep ? firstFailedStep.error : result.errors[0];\n return {\n failureLocation: firstFailedStep?.id ?? firstError?.stepId ?? \"unknown step\",\n message: firstError?.message ?? \"unknown error\",\n };\n}\n\nasync function runChildPipeline(\n pipeline: ChildPipeline,\n domainOptions: PipelineRunOptions,\n controls: PipelineRunControls,\n context: PipelineContext,\n hooks: PipelineHooks,\n dependencies: ChildExecutionDependencies<object>,\n messagePrefix = \"\",\n plan: PipelinePlan\n): Promise<PipelineRun<unknown>> {\n if (!plan.ok) {\n const firstError = plan.errors[0];\n const result = await rejectedChildPlanResult(pipeline, plan, domainOptions, controls, {\n ...context,\n hooks,\n });\n throw dependencies.createExecutionError(\n result,\n `${messagePrefix}could not start: ${firstError?.message ?? \"invalid plan\"}`\n );\n }\n\n const result = await executeCompiledChild(pipeline, plan, domainOptions, controls, {\n ...context,\n hooks,\n });\n if (result.status !== \"completed\") {\n const { failureLocation, message } = firstChildFailure(result);\n throw dependencies.createExecutionError(\n result,\n `${messagePrefix}failed at ${failureLocation}: ${message}`\n );\n }\n return result;\n}\n\nfunction hasProgressObserver(context: PipelineContext): boolean {\n const hooks = Array.isArray(context.hooks) ? context.hooks : [context.hooks];\n return (\n Boolean(context.tracing) || hooks.some((hook) => hook?.onStepProgress || hook?.onStepStatus)\n );\n}\n\nexport function createSingleChildRunner<TParentOptions extends object>(\n config: SingleChildExecutionConfig<TParentOptions>,\n dependencies: ChildExecutionDependencies<TParentOptions>\n): (inputs: ChildInputs, context: PipelineStepContext<TParentOptions>) => Promise<unknown> {\n return async (inputs, context) => {\n const { controls, domainOptions } = childRunBags(\n config.mapOptions(inputs, context),\n context.dryRun\n );\n const baseChildContext: PipelineContext = {\n correlationId: context.correlationId,\n cwd: context.cwd,\n log: context.log,\n now: context.now,\n parentRunId: context.runId,\n signal: context.signal,\n sleep: context.sleep,\n tracing: childTracingOptions(context),\n };\n // Plan once for progress totals and execution. Invalid plans fail before child.run.\n const childPlan = config.pipeline.plan(controls);\n const selectedStepCount = childPlan.ok\n ? childPlan.steps.filter((step) => step.selected).length\n : 0;\n const childProgress = hasProgressObserver(context) ? createChildProgress(childPlan) : undefined;\n const terminalSteps = new Set<string>();\n const report = (step: PipelinePlanStep, message: string, terminal = false): void => {\n if (!childProgress) return;\n if (terminal) terminalSteps.add(step.id);\n context.reportProgress({\n details: childProgress.details(),\n completed: terminalSteps.size,\n total: Math.max(1, selectedStepCount),\n message: `${config.pipeline.id}/${step.name ?? step.id}: ${message}`,\n });\n };\n const childHooks: PipelineHooks = {\n onStepStatus: childProgress?.update,\n onStepStart: ({ step }) => report(step, \"started\"),\n onStepProgress: ({ progress, step }) => {\n if (!hasVisibleStepProgress(progress)) return;\n report(step, progress.message ?? `${progress.completed} completed`);\n },\n onStepComplete: ({ step }) => report(step, \"complete\", true),\n onStepSkip: ({ reason, step }) => report(step, `skipped: ${reason}`, reason !== \"filtered\"),\n onStepCancel: ({ error, step }) => report(step, `cancelled: ${error.message}`, true),\n onStepFail: ({ error, step }) => report(step, `failed: ${error.message}`, true),\n };\n const childResult = await runChildPipeline(\n config.pipeline,\n domainOptions,\n controls,\n baseChildContext,\n childProgress ? childHooks : {},\n dependencies,\n `Child pipeline ${config.pipeline.id} `,\n childPlan\n );\n\n return config.mapResult\n ? config.mapResult(childResult.value, childResult, context)\n : childResult.value;\n };\n}\n\nexport function createMappedChildRunner<TParentOptions extends object>(\n config: MappedChildExecutionConfig<TParentOptions>,\n dependencies: ChildExecutionDependencies<TParentOptions>\n): (inputs: ChildInputs, context: PipelineStepContext<TParentOptions>) => Promise<unknown[]> {\n return async (inputs, context) => {\n const items = [...(await config.items(inputs, context))];\n const keys = items.map((item, index) => config.key(item, index));\n const duplicateKeys = duplicateValues(keys);\n if (duplicateKeys.length > 0) {\n throw new PipelineChildError(\n `Mapped child pipeline ${config.pipeline.id} received duplicate item keys: ${duplicateKeys.join(\", \")}`\n );\n }\n const concurrency = Math.max(\n 1,\n isConcurrencyFunction(config.concurrency)\n ? config.concurrency(inputs, context)\n : (config.concurrency ?? 1)\n );\n type Outcome =\n | { key: string; ok: true; value: unknown }\n | { error: Error; key: string; index: number; ok: false };\n\n const active = new Map<string, string>();\n const failedKeys = new Set<string>();\n const itemIndexes = new Map(keys.map((key, index) => [key, index]));\n const observesProgress = hasProgressObserver(context);\n const itemRows = new Map<string, PipelineStepProgressDetail>(\n keys.map((id) => [id, { id, status: \"pending\" }])\n );\n const itemProgress = new Map<string, ReturnType<typeof createChildProgress>>();\n const childTerminalSteps = new Map<string, Set<string>>();\n let finishedItems = 0;\n let failedItems = 0;\n let stepsPerItem = 0;\n let plannedChildSteps = 0;\n let plannedItems = 0;\n let terminalChildSteps = 0;\n\n const publishProgress = (spotlight?: string, final = false): void => {\n if (!observesProgress) return;\n const snapshot: MappedChildProgressSnapshot = {\n active,\n concurrency,\n failedItems,\n finishedItems,\n itemCount: items.length,\n plannedChildSteps,\n plannedItems,\n stepsPerItem,\n terminalChildSteps,\n spotlight,\n };\n // Materialize a bounded live window; expand the default final snapshot once.\n // Active and failed sets avoid scanning or sorting the full fan-out per event.\n const limit =\n Math.max(0, Math.floor(config.progress?.detailLimit ?? LIVE_FAN_OUT_GROUP_LIMIT)) || 0;\n let visibleKeys: readonly string[];\n if (final && config.progress?.detailLimit === undefined) {\n visibleKeys = keys;\n } else {\n const visible = new Set<string>();\n for (const candidates of [active.keys(), failedKeys.keys(), keys.values()]) {\n for (const key of candidates) {\n if (visible.size >= limit) break;\n visible.add(key);\n }\n }\n visibleKeys = [...visible].sort(\n (left, right) => itemIndexes.get(left)! - itemIndexes.get(right)!\n );\n }\n const details = visibleKeys.flatMap((key) => [\n { ...itemRows.get(key)! },\n ...(itemProgress.get(key)?.details() ?? []).map((detail) => ({\n ...detail,\n depth: (detail.depth ?? 0) + 1,\n })),\n ]);\n if (visibleKeys.length < keys.length) {\n details.push({ id: `+${keys.length - visibleKeys.length} more`, status: \"pending\" });\n }\n context.reportProgress({ ...toMappedChildStepProgress(snapshot, config.progress), details });\n };\n const markChildTerminal = (itemKey: string, stepId: string, label: string): void => {\n let seen = childTerminalSteps.get(itemKey);\n if (!seen) {\n seen = new Set();\n childTerminalSteps.set(itemKey, seen);\n }\n if (!seen.has(stepId)) {\n seen.add(stepId);\n terminalChildSteps += 1;\n }\n active.set(itemKey, label);\n publishProgress();\n };\n\n if (items.length === 0) {\n publishProgress();\n return [];\n }\n publishProgress();\n\n const settled = await runConcurrentSettled(\n items,\n { concurrency, signal: context.signal },\n async (item, itemIndex): Promise<Outcome> => {\n const key = keys[itemIndex]!;\n active.set(key, \"starting\");\n itemRows.set(key, { id: key, status: \"running\" });\n publishProgress();\n try {\n throwIfAborted(context.signal, `Mapped child pipeline ${config.pipeline.id}`);\n const { controls, domainOptions } = childRunBags(\n config.mapOptions(item, itemIndex, inputs, context),\n context.dryRun\n );\n // Plan once per mapped-options bag for progress and execution.\n const childPlan = config.pipeline.plan(controls);\n if (childPlan.ok) {\n const plannedSteps = childPlan.steps.filter((step) => step.selected).length;\n plannedChildSteps += plannedSteps;\n plannedItems += 1;\n if (plannedSteps > stepsPerItem) stepsPerItem = plannedSteps;\n }\n\n const childProgress = observesProgress ? createChildProgress(childPlan) : undefined;\n if (childProgress) itemProgress.set(key, childProgress);\n const childHooks: PipelineHooks = {\n onStepStatus: childProgress?.update,\n onStepStart: ({ step }) => {\n active.set(key, step.name ?? step.id);\n publishProgress();\n },\n onStepProgress: ({ progress, step }) => {\n if (!hasVisibleStepProgress(progress)) return;\n const detail =\n progress.message ??\n (progress.total !== undefined\n ? `${progress.completed}/${progress.total}`\n : `${progress.completed}`);\n active.set(key, `${step.name ?? step.id}:${detail}`);\n publishProgress();\n },\n onStepComplete: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:complete`),\n onStepSkip: ({ reason, step }) => {\n if (reason === \"filtered\") return;\n markChildTerminal(key, step.id, `${step.name ?? step.id}:skipped:${reason}`);\n },\n onStepCancel: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:cancelled`),\n onStepFail: ({ step }) =>\n markChildTerminal(key, step.id, `${step.name ?? step.id}:failed`),\n };\n const childResult = await runChildPipeline(\n config.pipeline,\n domainOptions,\n controls,\n {\n correlationId: context.correlationId,\n cwd: context.cwd,\n log: context.log,\n now: context.now,\n parentRunId: context.runId,\n signal: context.signal,\n sleep: context.sleep,\n tracing: childTracingOptions(context, key),\n },\n observesProgress ? childHooks : {},\n dependencies,\n \"\",\n childPlan\n );\n\n const seen = childTerminalSteps.get(key) ?? new Set<string>();\n if (childPlan.ok) {\n for (const planStep of childPlan.steps) {\n if (!planStep.selected || seen.has(planStep.id)) continue;\n seen.add(planStep.id);\n terminalChildSteps += 1;\n }\n }\n childTerminalSteps.set(key, seen);\n\n const value = config.mapResult\n ? config.mapResult(childResult.value, childResult, item, itemIndex, context)\n : childResult.value;\n active.delete(key);\n itemRows.set(key, { id: key, status: \"completed\" });\n finishedItems += 1;\n publishProgress(`${key}: completed`);\n return { key, ok: true, value };\n } catch (error) {\n const cause = error instanceof Error ? error : new Error(String(error));\n active.delete(key);\n itemRows.set(key, {\n id: key,\n status: dependencies.isCancellation(cause, context) ? \"cancelled\" : \"failed\",\n label: cause.message,\n });\n failedKeys.add(key);\n failedItems += 1;\n publishProgress(`${key}: failed`);\n return { error: cause, key, index: itemIndex, ok: false };\n }\n }\n );\n\n if (config.progress?.detailLimit === undefined && keys.length > LIVE_FAN_OUT_GROUP_LIMIT) {\n publishProgress(undefined, true);\n }\n const outcomes = settled.results.filter((outcome): outcome is Outcome => outcome !== undefined);\n const schedulerFailure =\n settled.failure === undefined\n ? undefined\n : settled.failure instanceof Error\n ? settled.failure\n : new Error(String(settled.failure));\n\n const failures = outcomes.filter(\n (outcome): outcome is Extract<Outcome, { ok: false }> => !outcome.ok\n );\n if (failures.length > 0 || schedulerFailure !== undefined) {\n const details = failures.map(({ error, key }) => `${key}: ${error.message}`).join(\"; \");\n const cancelled =\n failures.every(({ error }) => dependencies.isCancellation(error, context)) &&\n (schedulerFailure === undefined || dependencies.isCancellation(schedulerFailure, context));\n const primaryError = cancelled\n ? (failures[0]?.error ?? schedulerFailure)\n : (failures.find(({ error }) => !dependencies.isCancellation(error, context))?.error ??\n failures[0]?.error ??\n schedulerFailure);\n const message =\n failures.length > 0\n ? `Mapped child pipeline ${config.pipeline.id} failed for ${failures.length} item(s): ${details}`\n : `Mapped child pipeline ${config.pipeline.id} failed: ${primaryError?.message ?? \"aborted\"}`;\n throw new PipelineChildError(message, cancelled, primaryError, {\n failures: failures.slice(0, 32).map(({ error, key, index }) => ({\n error,\n key,\n index,\n cancelled: dependencies.isCancellation(error, context),\n })),\n failureCount: failures.length,\n schedulerError: schedulerFailure,\n });\n }\n // SAFETY: when failures.length === 0 every outcome was produced by the\n // success branch (return { key, ok: true, value }), so each outcome is\n // necessarily `{ ok: true }`; the assertion narrows the union accordingly.\n return outcomes.map((outcome) => (outcome as Extract<Outcome, { ok: true }>).value);\n };\n}\n"]}
|
package/dist/core/lifecycle.js
CHANGED
|
@@ -78,6 +78,8 @@ export function createPipelineLifecycleObserver(pipelineId, runtime, trace) {
|
|
|
78
78
|
/** Same start/complete projection executePlannedRun uses for an invalid plan. */
|
|
79
79
|
export async function emitRejectedPlanLifecycle(pipelineId, targetIds, plan, runtime, result) {
|
|
80
80
|
const identity = { runId: result.runId };
|
|
81
|
+
if (result.correlationId !== undefined)
|
|
82
|
+
identity.correlationId = result.correlationId;
|
|
81
83
|
if (result.parentRunId)
|
|
82
84
|
identity.parentRunId = result.parentRunId;
|
|
83
85
|
if (runtime.tracing?.itemKey)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,0BAA0B,GAE3B,MAAM,gCAAgC,CAAC;AA2BxC,SAAS,QAAQ,CAAC,OAAwB,EAAE,IAAoC;IAC9E,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CACd,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAAkB,EAClB,OAAwB,EACxB,KAAuC;IAEvC,OAAO;QACL,aAAa,CAAC,IAAI,EAAE,SAAS;YAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;YAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,SAAS;oBACZ,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;wBAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC/E,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,KAAK,CAAC,WAAW,EAAE,CAAC;4BAClB,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,MAAM,EAAE,SAAS;4BACjB,IAAI,EAAE,KAAK,CAAC,IAAI;yBACjB,CAAC,CACH,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,WAAW;oBACd,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,QAAQ;oBACX,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,MAAM;gBACR,KAAK,SAAS;oBACZ,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,MAAM;gBACR,KAAK,WAAW;oBACd,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5D,MAAM;YACV,CAAC;YACD,IAAI,WAAW;gBAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CACxD,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC;QAC9D,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CACjD,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;QACvD,aAAa;YACX,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACtE,KAAK,EAAE,aAAa,EAAE,CAAC;QACzB,CAAC;QACD,gBAAgB,CAAC,UAAU,EAAE,KAAK;YAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5F,KAAK,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QACD,aAAa,CAAC,KAAK,EAAE,UAAU;YAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACzF,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QACD,gBAAgB,CAAC,MAAM;YACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAkB,EAClB,SAA4B,EAC5B,IAAkB,EAClB,OAAwB,EACxB,MAA4B;IAE5B,MAAM,QAAQ,GAAyB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,MAAM,CAAC,WAAW;QAAE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAClE,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;IACzE,MAAM,SAAS,GAAG,+BAA+B,CAC/C,UAAU,EACV,OAAO,EACP,0BAA0B,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAC5F,CAAC;IACF,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["import type {\n PipelineError,\n PipelineHooks,\n PipelinePlan,\n PipelineRun,\n PipelineRuntime,\n PipelineStepStatus,\n} from \"./pipeline-types.js\";\nimport {\n createPipelineTraceEmitter,\n type PipelineTraceEmitter,\n} from \"../tracing/tracing-internal.js\";\nimport type { PipelineTraceAttributes, PipelineTraceContext } from \"../tracing/tracing.js\";\n\n/** Internal canonical lifecycle stream. Hooks and tracing are projections of it. */\nexport interface PipelineLifecycleObserver {\n finalizeComplete(durationMs: number, value: unknown): void;\n finalizeError(error: PipelineError, durationMs: number): void;\n finalizeStart(): void;\n flush(): Promise<void>;\n log(\n level: \"error\" | \"log\" | \"warn\",\n message: unknown,\n params?: readonly unknown[],\n stepId?: string,\n attemptId?: string\n ): void;\n pipelineComplete(result: PipelineRun<unknown>): void;\n pipelineStart(plan: PipelinePlan, targetIds: readonly string[]): void;\n reportAttempt(\n stepId: string,\n attempt: number,\n attributes?: PipelineTraceAttributes,\n attemptId?: string\n ): void;\n stepStatus(event: PipelineStepStatus, trace?: boolean): void;\n}\n\nfunction emitHook(runtime: PipelineRuntime, emit: (hooks: PipelineHooks) => void): void {\n if (!runtime.hooks) return;\n const hookSets = Array.isArray(runtime.hooks) ? runtime.hooks : [runtime.hooks];\n for (const hooks of hookSets) {\n try {\n emit(hooks);\n } catch (error) {\n runtime.log.warn(\n `Pipeline hook failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n}\n\nexport function createPipelineLifecycleObserver(\n pipelineId: string,\n runtime: PipelineRuntime,\n trace: PipelineTraceEmitter | undefined\n): PipelineLifecycleObserver {\n return {\n pipelineStart(plan, targetIds) {\n emitHook(runtime, (hooks) => hooks.onPipelineStart?.(plan));\n trace?.pipelineStart(plan, targetIds);\n },\n stepStatus(event, traceStatus = true) {\n emitHook(runtime, (hooks) => hooks.onStepStatus?.(event));\n switch (event.status) {\n case \"planned\":\n emitHook(runtime, (hooks) => hooks.onStepPlan?.(event));\n break;\n case \"running\":\n if (event.progress) {\n const progress = event.progress;\n emitHook(runtime, (hooks) => hooks.onStepProgress?.({ ...event, progress }));\n } else {\n emitHook(runtime, (hooks) =>\n hooks.onStepStart?.({\n attemptId: event.attemptId,\n pipelineId: event.pipelineId,\n status: \"running\",\n step: event.step,\n })\n );\n }\n break;\n case \"cancelled\":\n emitHook(runtime, (hooks) => hooks.onStepCancel?.(event));\n break;\n case \"failed\":\n emitHook(runtime, (hooks) => hooks.onStepFail?.(event));\n break;\n case \"skipped\":\n emitHook(runtime, (hooks) => hooks.onStepSkip?.(event));\n break;\n case \"completed\":\n emitHook(runtime, (hooks) => hooks.onStepComplete?.(event));\n break;\n }\n if (traceStatus) trace?.stepStatus(event);\n },\n reportAttempt: (stepId, attempt, attributes, attemptId) =>\n trace?.reportAttempt(stepId, attempt, attributes, attemptId),\n log: (level, message, params, stepId, attemptId) =>\n trace?.log(level, message, params, stepId, attemptId),\n finalizeStart() {\n emitHook(runtime, (hooks) => hooks.onFinalizeStart?.({ pipelineId }));\n trace?.finalizeStart();\n },\n finalizeComplete(durationMs, value) {\n emitHook(runtime, (hooks) => hooks.onFinalizeComplete?.({ durationMs, pipelineId, value }));\n trace?.finalizeComplete(durationMs);\n },\n finalizeError(error, durationMs) {\n emitHook(runtime, (hooks) => hooks.onFinalizeError?.({ durationMs, error, pipelineId }));\n trace?.finalizeError(error, durationMs);\n },\n pipelineComplete(result) {\n emitHook(runtime, (hooks) => hooks.onPipelineComplete?.(result));\n trace?.pipelineComplete(result);\n },\n flush: () => trace?.flush() ?? Promise.resolve(),\n };\n}\n\n/** Same start/complete projection executePlannedRun uses for an invalid plan. */\nexport async function emitRejectedPlanLifecycle(\n pipelineId: string,\n targetIds: readonly string[],\n plan: PipelinePlan,\n runtime: PipelineRuntime,\n result: PipelineRun<unknown>\n): Promise<void> {\n const identity: PipelineTraceContext = { runId: result.runId };\n if (result.parentRunId) identity.parentRunId = result.parentRunId;\n if (runtime.tracing?.itemKey) identity.itemKey = runtime.tracing.itemKey;\n const lifecycle = createPipelineLifecycleObserver(\n pipelineId,\n runtime,\n createPipelineTraceEmitter(pipelineId, runtime.tracing, runtime.log, identity, runtime.now)\n );\n lifecycle.pipelineStart(plan, targetIds);\n lifecycle.pipelineComplete(result);\n await lifecycle.flush();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n PipelineError,\n PipelineHooks,\n PipelinePlan,\n PipelineRun,\n PipelineRuntime,\n PipelineStepStatus,\n} from \"./pipeline-types.js\";\nimport {\n createPipelineTraceEmitter,\n type PipelineTraceEmitter,\n} from \"../tracing/tracing-internal.js\";\nimport type { PipelineTraceAttributes, PipelineTraceContext } from \"../tracing/tracing.js\";\n\n/** Internal canonical lifecycle stream. Hooks and tracing are projections of it. */\nexport interface PipelineLifecycleObserver {\n finalizeComplete(durationMs: number, value: unknown): void;\n finalizeError(error: PipelineError, durationMs: number): void;\n finalizeStart(): void;\n flush(): Promise<void>;\n log(\n level: \"error\" | \"log\" | \"warn\",\n message: unknown,\n params?: readonly unknown[],\n stepId?: string,\n attemptId?: string\n ): void;\n pipelineComplete(result: PipelineRun<unknown>): void;\n pipelineStart(plan: PipelinePlan, targetIds: readonly string[]): void;\n reportAttempt(\n stepId: string,\n attempt: number,\n attributes?: PipelineTraceAttributes,\n attemptId?: string\n ): void;\n stepStatus(event: PipelineStepStatus, trace?: boolean): void;\n}\n\nfunction emitHook(runtime: PipelineRuntime, emit: (hooks: PipelineHooks) => void): void {\n if (!runtime.hooks) return;\n const hookSets = Array.isArray(runtime.hooks) ? runtime.hooks : [runtime.hooks];\n for (const hooks of hookSets) {\n try {\n emit(hooks);\n } catch (error) {\n runtime.log.warn(\n `Pipeline hook failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n}\n\nexport function createPipelineLifecycleObserver(\n pipelineId: string,\n runtime: PipelineRuntime,\n trace: PipelineTraceEmitter | undefined\n): PipelineLifecycleObserver {\n return {\n pipelineStart(plan, targetIds) {\n emitHook(runtime, (hooks) => hooks.onPipelineStart?.(plan));\n trace?.pipelineStart(plan, targetIds);\n },\n stepStatus(event, traceStatus = true) {\n emitHook(runtime, (hooks) => hooks.onStepStatus?.(event));\n switch (event.status) {\n case \"planned\":\n emitHook(runtime, (hooks) => hooks.onStepPlan?.(event));\n break;\n case \"running\":\n if (event.progress) {\n const progress = event.progress;\n emitHook(runtime, (hooks) => hooks.onStepProgress?.({ ...event, progress }));\n } else {\n emitHook(runtime, (hooks) =>\n hooks.onStepStart?.({\n attemptId: event.attemptId,\n pipelineId: event.pipelineId,\n status: \"running\",\n step: event.step,\n })\n );\n }\n break;\n case \"cancelled\":\n emitHook(runtime, (hooks) => hooks.onStepCancel?.(event));\n break;\n case \"failed\":\n emitHook(runtime, (hooks) => hooks.onStepFail?.(event));\n break;\n case \"skipped\":\n emitHook(runtime, (hooks) => hooks.onStepSkip?.(event));\n break;\n case \"completed\":\n emitHook(runtime, (hooks) => hooks.onStepComplete?.(event));\n break;\n }\n if (traceStatus) trace?.stepStatus(event);\n },\n reportAttempt: (stepId, attempt, attributes, attemptId) =>\n trace?.reportAttempt(stepId, attempt, attributes, attemptId),\n log: (level, message, params, stepId, attemptId) =>\n trace?.log(level, message, params, stepId, attemptId),\n finalizeStart() {\n emitHook(runtime, (hooks) => hooks.onFinalizeStart?.({ pipelineId }));\n trace?.finalizeStart();\n },\n finalizeComplete(durationMs, value) {\n emitHook(runtime, (hooks) => hooks.onFinalizeComplete?.({ durationMs, pipelineId, value }));\n trace?.finalizeComplete(durationMs);\n },\n finalizeError(error, durationMs) {\n emitHook(runtime, (hooks) => hooks.onFinalizeError?.({ durationMs, error, pipelineId }));\n trace?.finalizeError(error, durationMs);\n },\n pipelineComplete(result) {\n emitHook(runtime, (hooks) => hooks.onPipelineComplete?.(result));\n trace?.pipelineComplete(result);\n },\n flush: () => trace?.flush() ?? Promise.resolve(),\n };\n}\n\n/** Same start/complete projection executePlannedRun uses for an invalid plan. */\nexport async function emitRejectedPlanLifecycle(\n pipelineId: string,\n targetIds: readonly string[],\n plan: PipelinePlan,\n runtime: PipelineRuntime,\n result: PipelineRun<unknown>\n): Promise<void> {\n const identity: PipelineTraceContext = { runId: result.runId };\n if (result.correlationId !== undefined) identity.correlationId = result.correlationId;\n if (result.parentRunId) identity.parentRunId = result.parentRunId;\n if (runtime.tracing?.itemKey) identity.itemKey = runtime.tracing.itemKey;\n const lifecycle = createPipelineLifecycleObserver(\n pipelineId,\n runtime,\n createPipelineTraceEmitter(pipelineId, runtime.tracing, runtime.log, identity, runtime.now)\n );\n lifecycle.pipelineStart(plan, targetIds);\n lifecycle.pipelineComplete(result);\n await lifecycle.flush();\n}\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type CompiledPipeline } from "./pipeline-plan.js";
|
|
2
2
|
import type { AnyStep } from "./pipeline-steps.js";
|
|
3
3
|
import type { InferSchemaOutput, PipelineContext, PipelinePlan, PipelineRun, PipelineRunControls, PipelineRuntime, StandardSchemaV1 } from "./pipeline-types.js";
|
|
4
|
+
/** Observe an execution ID from an internal host without allowing it to be overridden. */
|
|
5
|
+
export declare function observePipelineRunId<TContext extends object>(context: TContext, observer: (runId: string) => void): TContext;
|
|
4
6
|
export declare class PipelineExecutionError extends Error {
|
|
5
7
|
readonly result: PipelineRun<unknown>;
|
|
6
8
|
constructor(result: PipelineRun<unknown>, message?: string);
|