tubeless 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/dist/abort.d.ts +12 -0
  4. package/dist/abort.d.ts.map +1 -0
  5. package/dist/abort.js +49 -0
  6. package/dist/abort.js.map +1 -0
  7. package/dist/batch.d.ts +22 -0
  8. package/dist/batch.d.ts.map +1 -0
  9. package/dist/batch.js +73 -0
  10. package/dist/batch.js.map +1 -0
  11. package/dist/checkpoint.d.ts +33 -0
  12. package/dist/checkpoint.d.ts.map +1 -0
  13. package/dist/checkpoint.js +71 -0
  14. package/dist/checkpoint.js.map +1 -0
  15. package/dist/child-execution.d.ts +30 -0
  16. package/dist/child-execution.d.ts.map +1 -0
  17. package/dist/child-execution.js +270 -0
  18. package/dist/child-execution.js.map +1 -0
  19. package/dist/cli-command.d.ts +29 -0
  20. package/dist/cli-command.d.ts.map +1 -0
  21. package/dist/cli-command.js +314 -0
  22. package/dist/cli-command.js.map +1 -0
  23. package/dist/cli-parser.d.ts +28 -0
  24. package/dist/cli-parser.d.ts.map +1 -0
  25. package/dist/cli-parser.js +557 -0
  26. package/dist/cli-parser.js.map +1 -0
  27. package/dist/cli-pipeline-command.d.ts +84 -0
  28. package/dist/cli-pipeline-command.d.ts.map +1 -0
  29. package/dist/cli-pipeline-command.js +185 -0
  30. package/dist/cli-pipeline-command.js.map +1 -0
  31. package/dist/cli-types.d.ts +220 -0
  32. package/dist/cli-types.d.ts.map +1 -0
  33. package/dist/cli-types.js +19 -0
  34. package/dist/cli-types.js.map +1 -0
  35. package/dist/cli.d.ts +6 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +6 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/env.d.ts +2 -0
  40. package/dist/env.d.ts.map +1 -0
  41. package/dist/env.js +8 -0
  42. package/dist/env.js.map +1 -0
  43. package/dist/file-utils.d.ts +4 -0
  44. package/dist/file-utils.d.ts.map +1 -0
  45. package/dist/file-utils.js +35 -0
  46. package/dist/file-utils.js.map +1 -0
  47. package/dist/interactive-reporter.d.ts +38 -0
  48. package/dist/interactive-reporter.d.ts.map +1 -0
  49. package/dist/interactive-reporter.js +308 -0
  50. package/dist/interactive-reporter.js.map +1 -0
  51. package/dist/lifecycle.d.ts +17 -0
  52. package/dist/lifecycle.d.ts.map +1 -0
  53. package/dist/lifecycle.js +77 -0
  54. package/dist/lifecycle.js.map +1 -0
  55. package/dist/live-ticker.d.ts +21 -0
  56. package/dist/live-ticker.d.ts.map +1 -0
  57. package/dist/live-ticker.js +377 -0
  58. package/dist/live-ticker.js.map +1 -0
  59. package/dist/mapped-child-progress.d.ts +109 -0
  60. package/dist/mapped-child-progress.d.ts.map +1 -0
  61. package/dist/mapped-child-progress.js +133 -0
  62. package/dist/mapped-child-progress.js.map +1 -0
  63. package/dist/node.d.ts +5 -0
  64. package/dist/node.d.ts.map +1 -0
  65. package/dist/node.js +5 -0
  66. package/dist/node.js.map +1 -0
  67. package/dist/paths.d.ts +9 -0
  68. package/dist/paths.d.ts.map +1 -0
  69. package/dist/paths.js +19 -0
  70. package/dist/paths.js.map +1 -0
  71. package/dist/pipeline-command-marker.d.ts +5 -0
  72. package/dist/pipeline-command-marker.d.ts.map +1 -0
  73. package/dist/pipeline-command-marker.js +21 -0
  74. package/dist/pipeline-command-marker.js.map +1 -0
  75. package/dist/pipeline-diagnostics.d.ts +4 -0
  76. package/dist/pipeline-diagnostics.d.ts.map +1 -0
  77. package/dist/pipeline-diagnostics.js +17 -0
  78. package/dist/pipeline-diagnostics.js.map +1 -0
  79. package/dist/pipeline-module.d.ts +62 -0
  80. package/dist/pipeline-module.d.ts.map +1 -0
  81. package/dist/pipeline-module.js +157 -0
  82. package/dist/pipeline-module.js.map +1 -0
  83. package/dist/pipeline.d.ts +606 -0
  84. package/dist/pipeline.d.ts.map +1 -0
  85. package/dist/pipeline.js +1444 -0
  86. package/dist/pipeline.js.map +1 -0
  87. package/dist/progress.d.ts +4 -0
  88. package/dist/progress.d.ts.map +1 -0
  89. package/dist/progress.js +8 -0
  90. package/dist/progress.js.map +1 -0
  91. package/dist/prompt-select.d.ts +81 -0
  92. package/dist/prompt-select.d.ts.map +1 -0
  93. package/dist/prompt-select.js +197 -0
  94. package/dist/prompt-select.js.map +1 -0
  95. package/dist/rate-limit.d.ts +7 -0
  96. package/dist/rate-limit.d.ts.map +1 -0
  97. package/dist/rate-limit.js +23 -0
  98. package/dist/rate-limit.js.map +1 -0
  99. package/dist/render.d.ts +21 -0
  100. package/dist/render.d.ts.map +1 -0
  101. package/dist/render.js +60 -0
  102. package/dist/render.js.map +1 -0
  103. package/dist/reporter-entry.d.ts +3 -0
  104. package/dist/reporter-entry.d.ts.map +1 -0
  105. package/dist/reporter-entry.js +3 -0
  106. package/dist/reporter-entry.js.map +1 -0
  107. package/dist/reporter.d.ts +50 -0
  108. package/dist/reporter.d.ts.map +1 -0
  109. package/dist/reporter.js +167 -0
  110. package/dist/reporter.js.map +1 -0
  111. package/dist/retry.d.ts +28 -0
  112. package/dist/retry.d.ts.map +1 -0
  113. package/dist/retry.js +59 -0
  114. package/dist/retry.js.map +1 -0
  115. package/dist/run-store-sqlite.d.ts +12 -0
  116. package/dist/run-store-sqlite.d.ts.map +1 -0
  117. package/dist/run-store-sqlite.js +187 -0
  118. package/dist/run-store-sqlite.js.map +1 -0
  119. package/dist/run-store-ui-http.d.ts +5 -0
  120. package/dist/run-store-ui-http.d.ts.map +1 -0
  121. package/dist/run-store-ui-http.js +19 -0
  122. package/dist/run-store-ui-http.js.map +1 -0
  123. package/dist/run-store-ui-page.d.ts +2 -0
  124. package/dist/run-store-ui-page.d.ts.map +1 -0
  125. package/dist/run-store-ui-page.js +759 -0
  126. package/dist/run-store-ui-page.js.map +1 -0
  127. package/dist/run-store-ui-protocol.d.ts +28 -0
  128. package/dist/run-store-ui-protocol.d.ts.map +1 -0
  129. package/dist/run-store-ui-protocol.js +84 -0
  130. package/dist/run-store-ui-protocol.js.map +1 -0
  131. package/dist/run-store-ui-state.d.ts +21 -0
  132. package/dist/run-store-ui-state.d.ts.map +1 -0
  133. package/dist/run-store-ui-state.js +65 -0
  134. package/dist/run-store-ui-state.js.map +1 -0
  135. package/dist/run-store-ui.d.ts +25 -0
  136. package/dist/run-store-ui.d.ts.map +1 -0
  137. package/dist/run-store-ui.js +217 -0
  138. package/dist/run-store-ui.js.map +1 -0
  139. package/dist/run-store.d.ts +109 -0
  140. package/dist/run-store.d.ts.map +1 -0
  141. package/dist/run-store.js +345 -0
  142. package/dist/run-store.js.map +1 -0
  143. package/dist/testing.d.ts +40 -0
  144. package/dist/testing.d.ts.map +1 -0
  145. package/dist/testing.js +83 -0
  146. package/dist/testing.js.map +1 -0
  147. package/dist/tracing-internal.d.ts +21 -0
  148. package/dist/tracing-internal.d.ts.map +1 -0
  149. package/dist/tracing-internal.js +206 -0
  150. package/dist/tracing-internal.js.map +1 -0
  151. package/dist/tracing-json.d.ts +12 -0
  152. package/dist/tracing-json.d.ts.map +1 -0
  153. package/dist/tracing-json.js +8 -0
  154. package/dist/tracing-json.js.map +1 -0
  155. package/dist/tracing-otel.d.ts +36 -0
  156. package/dist/tracing-otel.d.ts.map +1 -0
  157. package/dist/tracing-otel.js +60 -0
  158. package/dist/tracing-otel.js.map +1 -0
  159. package/dist/tracing.d.ts +48 -0
  160. package/dist/tracing.d.ts.map +1 -0
  161. package/dist/tracing.js +2 -0
  162. package/dist/tracing.js.map +1 -0
  163. package/dist/workbench-bin.d.ts +3 -0
  164. package/dist/workbench-bin.d.ts.map +1 -0
  165. package/dist/workbench-bin.js +8 -0
  166. package/dist/workbench-bin.js.map +1 -0
  167. package/dist/workbench-graph.d.ts +3 -0
  168. package/dist/workbench-graph.d.ts.map +1 -0
  169. package/dist/workbench-graph.js +64 -0
  170. package/dist/workbench-graph.js.map +1 -0
  171. package/dist/workbench-inspect.d.ts +3 -0
  172. package/dist/workbench-inspect.d.ts.map +1 -0
  173. package/dist/workbench-inspect.js +65 -0
  174. package/dist/workbench-inspect.js.map +1 -0
  175. package/dist/workbench-plan.d.ts +3 -0
  176. package/dist/workbench-plan.d.ts.map +1 -0
  177. package/dist/workbench-plan.js +72 -0
  178. package/dist/workbench-plan.js.map +1 -0
  179. package/dist/workbench-run.d.ts +13 -0
  180. package/dist/workbench-run.d.ts.map +1 -0
  181. package/dist/workbench-run.js +115 -0
  182. package/dist/workbench-run.js.map +1 -0
  183. package/dist/workbench-shared.d.ts +67 -0
  184. package/dist/workbench-shared.d.ts.map +1 -0
  185. package/dist/workbench-shared.js +163 -0
  186. package/dist/workbench-shared.js.map +1 -0
  187. package/dist/workbench-studio.d.ts +26 -0
  188. package/dist/workbench-studio.d.ts.map +1 -0
  189. package/dist/workbench-studio.js +57 -0
  190. package/dist/workbench-studio.js.map +1 -0
  191. package/dist/workbench-ui.d.ts +3 -0
  192. package/dist/workbench-ui.d.ts.map +1 -0
  193. package/dist/workbench-ui.js +262 -0
  194. package/dist/workbench-ui.js.map +1 -0
  195. package/dist/workbench.d.ts +5 -0
  196. package/dist/workbench.d.ts.map +1 -0
  197. package/dist/workbench.js +43 -0
  198. package/dist/workbench.js.map +1 -0
  199. package/docs/README.md +31 -0
  200. package/docs/agent-guide.md +168 -0
  201. package/docs/api-reference.md +269 -0
  202. package/docs/api-report.json +298 -0
  203. package/docs/child-pipeline-composition.md +185 -0
  204. package/docs/cli.md +118 -0
  205. package/docs/concepts.md +502 -0
  206. package/docs/getting-started.md +162 -0
  207. package/docs/llms.txt +62 -0
  208. package/docs/recipes.md +51 -0
  209. package/docs/studio.md +86 -0
  210. package/examples/best-effort.ts +42 -0
  211. package/examples/cancellation-and-testing.ts +45 -0
  212. package/examples/child-pipeline.ts +51 -0
  213. package/examples/cli-job.ts +86 -0
  214. package/examples/conditional-step.ts +41 -0
  215. package/examples/fan-out-progress.ts +53 -0
  216. package/examples/local-observability.ts +80 -0
  217. package/examples/publish-with-gates.ts +56 -0
  218. package/examples/rendering.ts +34 -0
  219. package/examples/resumable-enrichment.ts +75 -0
  220. package/examples/tracing.ts +35 -0
  221. package/examples/tsconfig.json +15 -0
  222. package/examples/typed-import.ts +54 -0
  223. package/examples/validated-boundaries.ts +75 -0
  224. package/package.json +156 -0
@@ -0,0 +1,206 @@
1
+ function compactAttributes(attributes = {}) {
2
+ return Object.fromEntries(Object.entries(attributes).filter((entry) => entry[1] !== undefined));
3
+ }
4
+ function toTraceError(error) {
5
+ if (!error)
6
+ return undefined;
7
+ const traceError = {
8
+ code: error.code,
9
+ kind: error.kind,
10
+ message: error.message,
11
+ phase: error.phase,
12
+ stack: error.stack,
13
+ };
14
+ if (error.cause)
15
+ traceError.cause = error.cause;
16
+ if (error.issues)
17
+ traceError.issues = error.issues;
18
+ if (error.sourceCode)
19
+ traceError.sourceCode = error.sourceCode;
20
+ return traceError;
21
+ }
22
+ function elapsedMs(record) {
23
+ return record.startedAtMs === undefined ? undefined : record.finishedAtMs - record.startedAtMs;
24
+ }
25
+ function formatLogValue(value) {
26
+ try {
27
+ if (typeof value === "string")
28
+ return value;
29
+ if (value instanceof Error)
30
+ return value.message;
31
+ return JSON.stringify(value) ?? String(value);
32
+ }
33
+ catch {
34
+ try {
35
+ return String(value);
36
+ }
37
+ catch {
38
+ return "[unserializable]";
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Creates a serializing, failure-isolated trace emitter for one pipeline run.
44
+ * The executor owns this lifecycle; callers configure it via `context.tracing`.
45
+ */
46
+ export function createPipelineTraceEmitter(pipelineId, options, log, identity, now) {
47
+ if (!options)
48
+ return undefined;
49
+ const context = identity;
50
+ let queue = Promise.resolve();
51
+ const emit = (name, fields) => {
52
+ const event = {
53
+ ...context,
54
+ ...fields,
55
+ attributes: compactAttributes(fields.attributes),
56
+ name,
57
+ timestampMs: now(),
58
+ version: 1,
59
+ };
60
+ queue = queue
61
+ .then(() => options.exporter.export(event))
62
+ .catch((error) => {
63
+ log.warn(`Pipeline trace exporter failed: ${error instanceof Error ? error.message : String(error)}`);
64
+ });
65
+ };
66
+ return {
67
+ context,
68
+ pipelineStart: (plan, targetIds = []) => emit("pipeline.started", {
69
+ attributes: {
70
+ dry_run: plan.dryRun,
71
+ plan_ok: plan.ok,
72
+ step_count: plan.steps.length,
73
+ target_ids: JSON.stringify(targetIds),
74
+ },
75
+ pipelineId,
76
+ }),
77
+ log: (level, message, params = [], stepId, attemptId) => {
78
+ const fields = {
79
+ attributes: {
80
+ level,
81
+ message: [message, ...params].map(formatLogValue).join(" "),
82
+ },
83
+ pipelineId,
84
+ };
85
+ if (attemptId)
86
+ fields.attemptId = attemptId;
87
+ if (stepId)
88
+ fields.stepId = stepId;
89
+ emit("pipeline.log", fields);
90
+ },
91
+ pipelineComplete: (result) => emit("pipeline.completed", {
92
+ attributes: {
93
+ dry_run: result.dryRun,
94
+ error_count: result.errors.length,
95
+ finalized: result.finalized,
96
+ status: result.status,
97
+ step_count: result.steps.length,
98
+ },
99
+ durationMs: elapsedMs(result),
100
+ error: toTraceError(result.errors[0]),
101
+ pipelineId,
102
+ }),
103
+ stepStatus: (event) => {
104
+ if (event.status === "planned") {
105
+ emit("step.planned", {
106
+ attributes: {
107
+ dependencies: JSON.stringify(event.step.dependencies),
108
+ description: event.step.description,
109
+ dry_run: event.step.dryRun,
110
+ name: event.step.name,
111
+ optional_dependencies: JSON.stringify(event.step.optionalDependencies),
112
+ runtime_skip_possible: event.step.runtimeSkipPossible,
113
+ selected: event.step.selected,
114
+ selection_reasons: JSON.stringify(event.step.selectionReasons),
115
+ skip_after_failure_of: JSON.stringify(event.step.skipAfterFailureOf),
116
+ },
117
+ pipelineId,
118
+ stepId: event.step.id,
119
+ });
120
+ return;
121
+ }
122
+ if (event.status === "running") {
123
+ emit("step.running", {
124
+ attributes: event.progress
125
+ ? {
126
+ completed: event.progress.completed,
127
+ message: event.progress.message,
128
+ total: event.progress.total,
129
+ }
130
+ : {},
131
+ attemptId: event.attemptId,
132
+ pipelineId,
133
+ stepId: event.step.id,
134
+ });
135
+ return;
136
+ }
137
+ if (event.status === "complete") {
138
+ const fields = {
139
+ attributes: { status: event.status },
140
+ durationMs: elapsedMs(event),
141
+ pipelineId,
142
+ stepId: event.id,
143
+ };
144
+ if (event.attemptId)
145
+ fields.attemptId = event.attemptId;
146
+ emit("step.complete", fields);
147
+ return;
148
+ }
149
+ if (event.status === "skipped") {
150
+ const fields = {
151
+ attributes: {
152
+ dependency_id: event.dependencyId,
153
+ message: event.message,
154
+ reason: event.reason,
155
+ status: event.status,
156
+ },
157
+ durationMs: elapsedMs(event),
158
+ pipelineId,
159
+ stepId: event.id,
160
+ };
161
+ if (event.attemptId)
162
+ fields.attemptId = event.attemptId;
163
+ emit("step.skipped", fields);
164
+ return;
165
+ }
166
+ const fields = {
167
+ attributes: { status: event.status },
168
+ durationMs: elapsedMs(event),
169
+ error: toTraceError(event.error),
170
+ pipelineId,
171
+ stepId: event.id,
172
+ };
173
+ if (event.attemptId)
174
+ fields.attemptId = event.attemptId;
175
+ emit(event.status === "cancelled" ? "step.cancelled" : "step.failed", fields);
176
+ },
177
+ reportAttempt: (stepId, attempt, attributes = {}, attemptId) => {
178
+ const fields = {
179
+ attributes: { ...attributes, attempt },
180
+ pipelineId,
181
+ stepId,
182
+ };
183
+ if (attemptId)
184
+ fields.attemptId = attemptId;
185
+ emit("step.attempted", fields);
186
+ },
187
+ finalizeStart: () => emit("pipeline.finalize.started", { attributes: {}, pipelineId }),
188
+ finalizeComplete: (durationMs) => emit("pipeline.finalize.completed", { attributes: {}, durationMs, pipelineId }),
189
+ finalizeError: (error, durationMs) => emit("pipeline.finalize.failed", {
190
+ attributes: {},
191
+ durationMs,
192
+ error: toTraceError(error),
193
+ pipelineId,
194
+ }),
195
+ flush: async () => {
196
+ await queue;
197
+ try {
198
+ await options.exporter.flush?.();
199
+ }
200
+ catch (error) {
201
+ log.warn(`Pipeline trace exporter flush failed: ${error instanceof Error ? error.message : String(error)}`);
202
+ }
203
+ },
204
+ };
205
+ }
206
+ //# sourceMappingURL=tracing-internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-internal.js","sourceRoot":"","sources":["../src/tracing-internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PipelineLogger } from "./pipeline.js";
2
+ import type { PipelineTraceExporter } from "./tracing.js";
3
+ /** Configuration for the dependency-free JSON trace exporter. */
4
+ export interface JsonTraceExporterOptions {
5
+ /** Pipeline-compatible logger. Mutually exclusive with `write`. */
6
+ log?: Pick<PipelineLogger, "log">;
7
+ /** Receives one JSON object per line. Defaults to `console.log`. */
8
+ write?: (line: string) => void;
9
+ }
10
+ /** Create a newline-delimited JSON trace exporter for logs and local tooling. */
11
+ export declare function createJsonTraceExporter(options?: JsonTraceExporterOptions): PipelineTraceExporter;
12
+ //# sourceMappingURL=tracing-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-json.d.ts","sourceRoot":"","sources":["../src/tracing-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAsB,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE9E,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAClC,oEAAoE;IACpE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,qBAAqB,CAMvB"}
@@ -0,0 +1,8 @@
1
+ /** Create a newline-delimited JSON trace exporter for logs and local tooling. */
2
+ export function createJsonTraceExporter(options = {}) {
3
+ const write = options.write ?? (options.log ? (line) => options.log?.log(line) : console.log);
4
+ return {
5
+ export: (event) => write(JSON.stringify(event)),
6
+ };
7
+ }
8
+ //# sourceMappingURL=tracing-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-json.js","sourceRoot":"","sources":["../src/tracing-json.ts"],"names":[],"mappings":"AAWA,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CACrC,OAAO,GAA6B,EAAE;IAEtC,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1F,OAAO;QACL,MAAM,EAAE,CAAC,KAAyB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { PipelineTraceAttributeValue, PipelineTraceEvent, PipelineTraceExporter } from "./tracing.js";
2
+ /** Minimal structural span contract accepted by the OpenTelemetry adapter. */
3
+ export interface OpenTelemetryLikeSpan {
4
+ addEvent(name: string, attributes?: Readonly<Record<string, PipelineTraceAttributeValue>>, timestampMs?: number): void;
5
+ end(timestampMs?: number): void;
6
+ recordException?(exception: {
7
+ message: string;
8
+ name: string;
9
+ stack?: string;
10
+ }): void;
11
+ setAttribute?(name: string, value: PipelineTraceAttributeValue): void;
12
+ setStatus?(status: {
13
+ code: number;
14
+ message?: string;
15
+ }): void;
16
+ }
17
+ /** Minimal structural tracer contract accepted by the OpenTelemetry adapter. */
18
+ export interface OpenTelemetryLikeTracer {
19
+ startSpan(name: string, options?: {
20
+ attributes?: Readonly<Record<string, PipelineTraceAttributeValue>>;
21
+ startTime?: number;
22
+ }): OpenTelemetryLikeSpan;
23
+ }
24
+ /** Configuration for adapting pipeline events to application-owned spans. */
25
+ export interface OpenTelemetryTraceExporterOptions {
26
+ /** A tracer compatible with `@opentelemetry/api`'s `Tracer` shape. */
27
+ tracer: OpenTelemetryLikeTracer;
28
+ /** Customize the span name for a pipeline run. */
29
+ spanName?(event: PipelineTraceEvent): string;
30
+ }
31
+ /**
32
+ * Adapt structured events to OpenTelemetry without importing an OpenTelemetry
33
+ * package. Pass a real tracer from `@opentelemetry/api` at the application edge.
34
+ */
35
+ export declare function createOpenTelemetryTraceExporter(options: OpenTelemetryTraceExporterOptions): PipelineTraceExporter;
36
+ //# sourceMappingURL=tracing-otel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-otel.d.ts","sourceRoot":"","sources":["../src/tracing-otel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAMtB,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAAC;IACR,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,CAAC,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACtE,SAAS,CAAC,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9D;AAED,gFAAgF;AAChF,MAAM,WAAW,uBAAuB;IACtC,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACnE,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,qBAAqB,CAAC;CAC1B;AAED,6EAA6E;AAC7E,MAAM,WAAW,iCAAiC;IAChD,sEAAsE;IACtE,MAAM,EAAE,uBAAuB,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAAC;CAC9C;AAoBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,iCAAiC,GACzC,qBAAqB,CAiCvB"}
@@ -0,0 +1,60 @@
1
+ // `SpanStatusCode.ERROR` from `@opentelemetry/api`. Keep the adapter
2
+ // dependency-free while using the exact numeric value the API expects.
3
+ const OPEN_TELEMETRY_ERROR_STATUS_CODE = 2;
4
+ function attributesFor(event) {
5
+ const attributes = new Map();
6
+ for (const [key, value] of Object.entries(event.attributes)) {
7
+ if (value !== undefined)
8
+ attributes.set(key, value);
9
+ }
10
+ attributes.set("pipeline.id", event.pipelineId);
11
+ attributes.set("pipeline.item_key", event.itemKey ?? "");
12
+ attributes.set("pipeline.parent_run_id", event.parentRunId ?? "");
13
+ attributes.set("pipeline.run_id", event.runId);
14
+ attributes.set("pipeline.trace_version", event.version);
15
+ if (event.attemptId)
16
+ attributes.set("pipeline.attempt_id", event.attemptId);
17
+ if (event.stepId)
18
+ attributes.set("pipeline.step_id", event.stepId);
19
+ if (event.durationMs !== undefined)
20
+ attributes.set("pipeline.duration_ms", event.durationMs);
21
+ if (event.error?.code)
22
+ attributes.set("error.code", event.error.code);
23
+ if (event.error)
24
+ attributes.set("error.message", event.error.message);
25
+ return Object.fromEntries(attributes);
26
+ }
27
+ /**
28
+ * Adapt structured events to OpenTelemetry without importing an OpenTelemetry
29
+ * package. Pass a real tracer from `@opentelemetry/api` at the application edge.
30
+ */
31
+ export function createOpenTelemetryTraceExporter(options) {
32
+ const spans = new Map();
33
+ return {
34
+ export: (event) => {
35
+ let span = spans.get(event.runId);
36
+ if (!span) {
37
+ span = options.tracer.startSpan(options.spanName?.(event) ?? `pipeline ${event.pipelineId}`, {
38
+ attributes: attributesFor(event),
39
+ startTime: event.timestampMs,
40
+ });
41
+ spans.set(event.runId, span);
42
+ }
43
+ const attributes = attributesFor(event);
44
+ span.addEvent(event.name, attributes, event.timestampMs);
45
+ if (event.error) {
46
+ span.recordException?.({
47
+ message: event.error.message,
48
+ name: "PipelineTraceError",
49
+ stack: event.error.stack,
50
+ });
51
+ span.setStatus?.({ code: OPEN_TELEMETRY_ERROR_STATUS_CODE, message: event.error.message });
52
+ }
53
+ if (event.name === "pipeline.completed") {
54
+ span.end(event.timestampMs);
55
+ spans.delete(event.runId);
56
+ }
57
+ },
58
+ };
59
+ }
60
+ //# sourceMappingURL=tracing-otel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-otel.js","sourceRoot":"","sources":["../src/tracing-otel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { PipelineValidationIssue } from "./pipeline.js";
2
+ /** Values that can be safely carried in a structured trace attribute. */
3
+ export type PipelineTraceAttributeValue = boolean | number | string;
4
+ /** Additional, serializable data attached to a trace event. */
5
+ export type PipelineTraceAttributes = Readonly<Record<string, PipelineTraceAttributeValue | undefined>>;
6
+ /** Stable identities propagated through a traced parent/child pipeline tree. */
7
+ export interface PipelineTraceContext {
8
+ itemKey?: string;
9
+ parentRunId?: string;
10
+ runId: string;
11
+ }
12
+ /** Structured error attributes emitted without retaining the original error object. */
13
+ export interface PipelineTraceError {
14
+ cause?: import("./pipeline.js").PipelineErrorCause;
15
+ code: import("./pipeline.js").PipelineErrorCode;
16
+ kind: import("./pipeline.js").PipelineErrorKind;
17
+ message: string;
18
+ phase: import("./pipeline.js").PipelineErrorPhase;
19
+ issues?: readonly PipelineValidationIssue[];
20
+ sourceCode?: string;
21
+ stack?: string;
22
+ }
23
+ /** Stable lifecycle names emitted by the pipeline executor. */
24
+ export type PipelineTraceEventName = "pipeline.completed" | "pipeline.log" | "pipeline.started" | "pipeline.finalize.completed" | "pipeline.finalize.failed" | "pipeline.finalize.started" | "step.attempted" | "step.cancelled" | "step.failed" | "step.planned" | "step.running" | "step.skipped" | "step.complete";
25
+ /** A versioned lifecycle record suitable for JSON logs and telemetry adapters. */
26
+ export interface PipelineTraceEvent extends PipelineTraceContext {
27
+ attributes: PipelineTraceAttributes;
28
+ /** Stable public step-attempt identity when the event belongs to an execution attempt. */
29
+ attemptId?: string;
30
+ durationMs?: number;
31
+ error?: PipelineTraceError;
32
+ name: PipelineTraceEventName;
33
+ pipelineId: string;
34
+ stepId?: string;
35
+ timestampMs: number;
36
+ version: 1;
37
+ }
38
+ /** Asynchronous boundary for trace destinations. */
39
+ export interface PipelineTraceExporter {
40
+ export(event: PipelineTraceEvent): void | Promise<void>;
41
+ flush?(): void | Promise<void>;
42
+ }
43
+ /** Configuration supplied through `PipelineContext.tracing`. */
44
+ export interface PipelineTracingOptions {
45
+ exporter: PipelineTraceExporter;
46
+ itemKey?: string;
47
+ }
48
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,yEAAyE;AACzE,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE,+DAA+D;AAC/D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAC5C,MAAM,CAAC,MAAM,EAAE,2BAA2B,GAAG,SAAS,CAAC,CACxD,CAAC;AAEF,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uFAAuF;AACvF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,OAAO,eAAe,EAAE,kBAAkB,CAAC;IACnD,IAAI,EAAE,OAAO,eAAe,EAAE,iBAAiB,CAAC;IAChD,IAAI,EAAE,OAAO,eAAe,EAAE,iBAAiB,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,eAAe,EAAE,kBAAkB,CAAC;IAClD,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,MAAM,sBAAsB,GAC9B,oBAAoB,GACpB,cAAc,GACd,kBAAkB,GAClB,6BAA6B,GAC7B,0BAA0B,GAC1B,2BAA2B,GAC3B,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,cAAc,GACd,cAAc,GACd,eAAe,CAAC;AAEpB,kFAAkF;AAClF,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,UAAU,EAAE,uBAAuB,CAAC;IACpC,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=workbench-bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-bin.d.ts","sourceRoot":"","sources":["../src/workbench-bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bun
2
+ import { runWorkbenchCli } from "./workbench.js";
3
+ process.exitCode = await runWorkbenchCli(process.argv.slice(2), {
4
+ cwd: process.cwd(),
5
+ stderr: process.stderr,
6
+ stdout: process.stdout,
7
+ });
8
+ //# sourceMappingURL=workbench-bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-bin.js","sourceRoot":"","sources":["../src/workbench-bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC9D,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type WorkbenchCliIo } from "./workbench-shared.js";
2
+ export declare function runGraph(argv: readonly string[], io: WorkbenchCliIo): Promise<number>;
3
+ //# sourceMappingURL=workbench-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-graph.d.ts","sourceRoot":"","sources":["../src/workbench-graph.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAqC/B,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC3F"}
@@ -0,0 +1,64 @@
1
+ import { parseArgs } from "node:util";
2
+ import { errorMessage, loadPipeline, TUBELESS_WORKBENCH_EXIT_CODE, writeUsageError, } from "./workbench-shared.js";
3
+ const MERMAID_DIRECTIONS = ["BT", "LR", "RL", "TB", "TD"];
4
+ function isMermaidDirection(value) {
5
+ // SAFETY: MERMAID_DIRECTIONS is a const tuple of exactly the PipelineMermaidDirection
6
+ // union members, so membership implies the value is a valid direction.
7
+ return MERMAID_DIRECTIONS.includes(value);
8
+ }
9
+ const GRAPH_USAGE = `Usage: tubeless graph [options] <pipeline-file>
10
+
11
+ Generate Mermaid flowchart source from an exported tubeless pipeline.
12
+
13
+ Options:
14
+ -e, --export <name> Select a pipeline export when the file has more than one
15
+ -d, --direction <value> Flowchart direction: BT, LR, RL, TB, or TD (default: TD)
16
+ --descriptions Include step descriptions in node labels
17
+ --markdown Wrap the result in a fenced Mermaid Markdown block
18
+ -h, --help Show this help
19
+ `;
20
+ function parseGraphArgs(argv) {
21
+ return parseArgs({
22
+ args: [...argv],
23
+ allowPositionals: true,
24
+ options: {
25
+ descriptions: { type: "boolean" },
26
+ direction: { type: "string", short: "d" },
27
+ export: { type: "string", short: "e" },
28
+ help: { type: "boolean", short: "h" },
29
+ markdown: { type: "boolean" },
30
+ },
31
+ strict: true,
32
+ });
33
+ }
34
+ export async function runGraph(argv, io) {
35
+ let parsed;
36
+ try {
37
+ parsed = parseGraphArgs(argv);
38
+ }
39
+ catch (error) {
40
+ return writeUsageError(io, errorMessage(error), GRAPH_USAGE);
41
+ }
42
+ if (parsed.values.help) {
43
+ io.stdout.write(GRAPH_USAGE);
44
+ return TUBELESS_WORKBENCH_EXIT_CODE.success;
45
+ }
46
+ if (parsed.positionals.length !== 1) {
47
+ return writeUsageError(io, "Pass exactly one pipeline file.", GRAPH_USAGE);
48
+ }
49
+ const direction = parsed.values.direction ?? "TD";
50
+ if (!isMermaidDirection(direction)) {
51
+ return writeUsageError(io, `Invalid direction ${JSON.stringify(direction)}.`, GRAPH_USAGE);
52
+ }
53
+ const loaded = await loadPipeline(parsed.positionals[0], parsed.values.export, io);
54
+ if ("exitCode" in loaded)
55
+ return loaded.exitCode;
56
+ const source = loaded.pipeline.toMermaid({
57
+ direction,
58
+ includeDescriptions: parsed.values.descriptions,
59
+ });
60
+ const terminatedSource = `${source.replace(/\n+$/, "")}\n`;
61
+ io.stdout.write(parsed.values.markdown ? `\`\`\`mermaid\n${terminatedSource}\`\`\`\n` : terminatedSource);
62
+ return TUBELESS_WORKBENCH_EXIT_CODE.success;
63
+ }
64
+ //# sourceMappingURL=workbench-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-graph.js","sourceRoot":"","sources":["../src/workbench-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type WorkbenchCliIo } from "./workbench-shared.js";
2
+ export declare function runInspect(argv: readonly string[], io: WorkbenchCliIo): Promise<number>;
3
+ //# sourceMappingURL=workbench-inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-inspect.d.ts","sourceRoot":"","sources":["../src/workbench-inspect.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AA6B/B,wBAAsB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA8C7F"}
@@ -0,0 +1,65 @@
1
+ import { parseArgs } from "node:util";
2
+ import { renderPipelinePlan } from "./render.js";
3
+ import { errorMessage, loadPipeline, TUBELESS_WORKBENCH_EXIT_CODE, writeUsageError, } from "./workbench-shared.js";
4
+ const INSPECT_USAGE = `Usage: tubeless inspect [options] <pipeline-file>
5
+
6
+ Show pipeline identity plus the default structural plan.
7
+
8
+ Options:
9
+ -e, --export <name> Select a pipeline export when the file has more than one
10
+ --json Emit identity and the default plan as JSON
11
+ -h, --help Show this help
12
+ `;
13
+ function list(values) {
14
+ return values.length > 0 ? values.join(", ") : "none";
15
+ }
16
+ function parseInspectArgs(argv) {
17
+ return parseArgs({
18
+ args: [...argv],
19
+ allowPositionals: true,
20
+ options: {
21
+ export: { type: "string", short: "e" },
22
+ help: { type: "boolean", short: "h" },
23
+ json: { type: "boolean" },
24
+ },
25
+ strict: true,
26
+ });
27
+ }
28
+ export async function runInspect(argv, io) {
29
+ let parsed;
30
+ try {
31
+ parsed = parseInspectArgs(argv);
32
+ }
33
+ catch (error) {
34
+ return writeUsageError(io, errorMessage(error), INSPECT_USAGE);
35
+ }
36
+ if (parsed.values.help) {
37
+ io.stdout.write(INSPECT_USAGE);
38
+ return TUBELESS_WORKBENCH_EXIT_CODE.success;
39
+ }
40
+ if (parsed.positionals.length !== 1) {
41
+ return writeUsageError(io, "Pass exactly one pipeline file.", INSPECT_USAGE);
42
+ }
43
+ const loaded = await loadPipeline(parsed.positionals[0], parsed.values.export, io);
44
+ if ("exitCode" in loaded)
45
+ return loaded.exitCode;
46
+ const plan = loaded.pipeline.plan({});
47
+ if (parsed.values.json) {
48
+ io.stdout.write(`${JSON.stringify({
49
+ pipelineId: loaded.pipeline.id,
50
+ targetIds: [...loaded.pipeline.targetIds],
51
+ stepIds: [...loaded.pipeline.stepIds],
52
+ plan,
53
+ }, null, 2)}\n`);
54
+ return TUBELESS_WORKBENCH_EXIT_CODE.success;
55
+ }
56
+ io.stdout.write([
57
+ `Pipeline ${loaded.pipeline.id}`,
58
+ `Targets: ${list(loaded.pipeline.targetIds)}`,
59
+ `Exact steps: ${list(loaded.pipeline.stepIds)}`,
60
+ renderPipelinePlan(plan, { explain: false }),
61
+ "",
62
+ ].join("\n"));
63
+ return TUBELESS_WORKBENCH_EXIT_CODE.success;
64
+ }
65
+ //# sourceMappingURL=workbench-inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-inspect.js","sourceRoot":"","sources":["../src/workbench-inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type WorkbenchCliIo } from "./workbench-shared.js";
2
+ export declare function runPlan(argv: readonly string[], io: WorkbenchCliIo): Promise<number>;
3
+ //# sourceMappingURL=workbench-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-plan.d.ts","sourceRoot":"","sources":["../src/workbench-plan.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAiC/B,wBAAsB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC1F"}