@anvia/core 0.26.0 → 1.0.0-rc.1

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 (135) hide show
  1. package/README.md +21 -11
  2. package/dist/agent/index.d.ts +26 -68
  3. package/dist/agent/index.js +20 -17
  4. package/dist/agent-DGYY_onS.d.ts +145 -0
  5. package/dist/audio-generation/index.d.ts +12 -14
  6. package/dist/audio-generation/index.js +5 -39
  7. package/dist/audio-generation/index.js.map +1 -1
  8. package/dist/{chunk-MRQLEK2B.js → chunk-5XKDW36Z.js} +30 -7
  9. package/dist/chunk-5XKDW36Z.js.map +1 -0
  10. package/dist/chunk-6WGGTJE6.js +139 -0
  11. package/dist/chunk-6WGGTJE6.js.map +1 -0
  12. package/dist/chunk-A3UBYTJT.js +157 -0
  13. package/dist/chunk-A3UBYTJT.js.map +1 -0
  14. package/dist/{chunk-NCPN4SJR.js → chunk-DMPUP4R3.js} +10 -10
  15. package/dist/chunk-DMPUP4R3.js.map +1 -0
  16. package/dist/{chunk-MNWK2USR.js → chunk-DZ3CKYTH.js} +29 -5
  17. package/dist/chunk-DZ3CKYTH.js.map +1 -0
  18. package/dist/{chunk-CWUJUSOS.js → chunk-FNQB2JEH.js} +1 -1
  19. package/dist/chunk-FNQB2JEH.js.map +1 -0
  20. package/dist/chunk-I6G7BC42.js +41 -0
  21. package/dist/chunk-I6G7BC42.js.map +1 -0
  22. package/dist/{chunk-BALBBVI3.js → chunk-IL3ZSNJI.js} +2720 -1704
  23. package/dist/chunk-IL3ZSNJI.js.map +1 -0
  24. package/dist/chunk-J6GNQART.js +122 -0
  25. package/dist/chunk-J6GNQART.js.map +1 -0
  26. package/dist/{chunk-MC3CCKEB.js → chunk-M3IOWB4Y.js} +124 -65
  27. package/dist/chunk-M3IOWB4Y.js.map +1 -0
  28. package/dist/chunk-QY5GZ7HR.js +39 -0
  29. package/dist/chunk-QY5GZ7HR.js.map +1 -0
  30. package/dist/{chunk-MELYDKWQ.js → chunk-R2LJSQUW.js} +190 -20
  31. package/dist/chunk-R2LJSQUW.js.map +1 -0
  32. package/dist/{chunk-WQKHFADH.js → chunk-RFDVKCIE.js} +3 -3
  33. package/dist/chunk-RFDVKCIE.js.map +1 -0
  34. package/dist/chunk-RMUBRRSK.js +34 -0
  35. package/dist/chunk-RMUBRRSK.js.map +1 -0
  36. package/dist/{chunk-I6XOQ4LK.js → chunk-RXKHOYEH.js} +1 -1
  37. package/dist/chunk-RXKHOYEH.js.map +1 -0
  38. package/dist/chunk-XDRSPSR7.js +38 -0
  39. package/dist/chunk-XDRSPSR7.js.map +1 -0
  40. package/dist/completion/index.d.ts +5 -36
  41. package/dist/completion/index.js +4 -5
  42. package/dist/dynamic-tools-i9woysFa.d.ts +33 -0
  43. package/dist/embeddings/index.d.ts +2 -2
  44. package/dist/embeddings/index.js +1 -2
  45. package/dist/{errors-2moLDuuN.d.ts → errors-CYKUcU89.d.ts} +2 -2
  46. package/dist/evals/index.d.ts +22 -15
  47. package/dist/evals/index.js +57 -35
  48. package/dist/evals/index.js.map +1 -1
  49. package/dist/extractor/index.d.ts +23 -35
  50. package/dist/extractor/index.js +7 -21
  51. package/dist/guardrails/index.d.ts +2 -2
  52. package/dist/guardrails/index.js +1 -1
  53. package/dist/image-generation/index.d.ts +12 -14
  54. package/dist/image-generation/index.js +5 -39
  55. package/dist/image-generation/index.js.map +1 -1
  56. package/dist/index-DxB74ybJ.d.ts +349 -0
  57. package/dist/index.d.ts +20 -17
  58. package/dist/index.js +31 -36
  59. package/dist/internal/agent.d.ts +152 -9
  60. package/dist/internal/agent.js +22 -17
  61. package/dist/{json-BVPssigK.d.ts → json-Zo7K3xmt.d.ts} +12 -11
  62. package/dist/loaders/index.d.ts +5 -10
  63. package/dist/loaders/index.js.map +1 -1
  64. package/dist/mcp/index.d.ts +4 -4
  65. package/dist/mcp/index.js.map +1 -1
  66. package/dist/memory/index.d.ts +4 -4
  67. package/dist/memory/index.js +6 -7
  68. package/dist/middleware-KynLg_RW.d.ts +56 -0
  69. package/dist/observability/index.d.ts +6 -3
  70. package/dist/observability/index.js.map +1 -1
  71. package/dist/pipeline/index.d.ts +40 -47
  72. package/dist/pipeline/index.js +99 -99
  73. package/dist/pipeline/index.js.map +1 -1
  74. package/dist/retry-D3Ruy-ba.d.ts +15 -0
  75. package/dist/skills/index.d.ts +4 -4
  76. package/dist/skills/index.js +5 -6
  77. package/dist/streaming/index.js +37 -3
  78. package/dist/streaming/index.js.map +1 -1
  79. package/dist/{think-tool-DfCMuO8e.d.ts → think-tool-DZqZj2LV.d.ts} +5 -5
  80. package/dist/tool/index.d.ts +8 -6
  81. package/dist/tool/index.js +12 -15
  82. package/dist/tool-C_8GudXn.d.ts +49 -0
  83. package/dist/transcription/index.d.ts +14 -16
  84. package/dist/transcription/index.js +5 -57
  85. package/dist/transcription/index.js.map +1 -1
  86. package/dist/type-utils-CtHVDRn_.d.ts +6 -0
  87. package/dist/{types-G12i56s2.d.ts → types-B3A4YxaA.d.ts} +1 -1
  88. package/dist/{types-BrLbKnEz.d.ts → types-BBEGKB9m.d.ts} +1 -1
  89. package/dist/{types-O-abTIin.d.ts → types-DT3nEemY.d.ts} +3 -3
  90. package/dist/{types-04LqWrmy.d.ts → types-DhQfwiZn.d.ts} +1 -1
  91. package/dist/{types-JJCxRnaZ.d.ts → types-DulRCYdB.d.ts} +2 -2
  92. package/dist/{types-BCTRUGex.d.ts → types-p55Jc-sr.d.ts} +1 -1
  93. package/dist/ui/index.d.ts +1 -1
  94. package/dist/ui/index.js +1 -1
  95. package/dist/vector-store/index.d.ts +5 -5
  96. package/dist/vector-store/index.js +4 -4
  97. package/package.json +2 -10
  98. package/dist/agent-x3YTyv5i.d.ts +0 -222
  99. package/dist/chunk-2ODTMRHP.js +0 -54
  100. package/dist/chunk-2ODTMRHP.js.map +0 -1
  101. package/dist/chunk-BALBBVI3.js.map +0 -1
  102. package/dist/chunk-CWUJUSOS.js.map +0 -1
  103. package/dist/chunk-DALYP4PX.js +0 -225
  104. package/dist/chunk-DALYP4PX.js.map +0 -1
  105. package/dist/chunk-HYUYZEAJ.js +0 -223
  106. package/dist/chunk-HYUYZEAJ.js.map +0 -1
  107. package/dist/chunk-I6XOQ4LK.js.map +0 -1
  108. package/dist/chunk-JI5YZWNT.js +0 -220
  109. package/dist/chunk-JI5YZWNT.js.map +0 -1
  110. package/dist/chunk-MC3CCKEB.js.map +0 -1
  111. package/dist/chunk-MELYDKWQ.js.map +0 -1
  112. package/dist/chunk-MNWK2USR.js.map +0 -1
  113. package/dist/chunk-MRQLEK2B.js.map +0 -1
  114. package/dist/chunk-NCPN4SJR.js.map +0 -1
  115. package/dist/chunk-OIMLU4SF.js +0 -20
  116. package/dist/chunk-OIMLU4SF.js.map +0 -1
  117. package/dist/chunk-Q25IWLBT.js +0 -138
  118. package/dist/chunk-Q25IWLBT.js.map +0 -1
  119. package/dist/chunk-UQX6EXWG.js +0 -33
  120. package/dist/chunk-UQX6EXWG.js.map +0 -1
  121. package/dist/chunk-WQKHFADH.js.map +0 -1
  122. package/dist/chunk-XUUY2L2D.js +0 -42
  123. package/dist/chunk-XUUY2L2D.js.map +0 -1
  124. package/dist/chunk-YLMDBQO4.js +0 -141
  125. package/dist/chunk-YLMDBQO4.js.map +0 -1
  126. package/dist/hooks/index.d.ts +0 -12
  127. package/dist/hooks/index.js +0 -17
  128. package/dist/hooks/index.js.map +0 -1
  129. package/dist/index-BxSbmOMr.d.ts +0 -257
  130. package/dist/middleware-Dp3d_pxi.d.ts +0 -90
  131. package/dist/request/index.d.ts +0 -28
  132. package/dist/request/index.js +0 -25
  133. package/dist/request/index.js.map +0 -1
  134. package/dist/tool-Cohdv5GC.d.ts +0 -65
  135. package/dist/types-D9JpeAPF.d.ts +0 -114
@@ -1,12 +1,25 @@
1
+ import {
2
+ cancelAgentApproval
3
+ } from "../chunk-IL3ZSNJI.js";
4
+ import "../chunk-YK4WAAS4.js";
5
+ import "../chunk-6WGGTJE6.js";
6
+ import "../chunk-R2LJSQUW.js";
7
+ import "../chunk-5XKDW36Z.js";
1
8
  import {
2
9
  mapWithConcurrency
3
- } from "../chunk-OIMLU4SF.js";
10
+ } from "../chunk-DZ3CKYTH.js";
11
+ import "../chunk-I6G7BC42.js";
12
+ import "../chunk-M3IOWB4Y.js";
13
+ import "../chunk-RFDVKCIE.js";
14
+ import "../chunk-ADH7NNCS.js";
15
+ import "../chunk-A3UBYTJT.js";
16
+ import "../chunk-FNQB2JEH.js";
4
17
 
5
- // src/pipeline/builder.ts
18
+ // src/pipeline/pipeline.ts
6
19
  import { z } from "zod";
7
20
 
8
21
  // src/pipeline/graph.ts
9
- function initialBuilderState(metadata) {
22
+ function initialPipelineState(metadata) {
10
23
  return {
11
24
  graph: initialGraph(metadata),
12
25
  terminalNodeId: "input",
@@ -16,7 +29,7 @@ function initialBuilderState(metadata) {
16
29
  };
17
30
  }
18
31
  function initialGraph(metadata) {
19
- const id = normalizeId(metadata.id ?? "pipeline");
32
+ const id = metadata.id ?? "pipeline";
20
33
  const graph = {
21
34
  id,
22
35
  nodes: [{ id: "input", kind: "input", label: "Input" }],
@@ -151,35 +164,6 @@ function uniqueGraphNodeId(baseId, existingIds) {
151
164
  return id;
152
165
  }
153
166
 
154
- // src/pipeline/pipeline.ts
155
- var Pipeline = class {
156
- constructor(executor, pipelineGraph = initialGraph({})) {
157
- this.executor = executor;
158
- this.pipelineGraph = pipelineGraph;
159
- this.id = pipelineGraph.id;
160
- this.name = pipelineGraph.name;
161
- this.description = pipelineGraph.description;
162
- this.metadata = pipelineGraph.metadata;
163
- }
164
- executor;
165
- pipelineGraph;
166
- id;
167
- name;
168
- description;
169
- metadata;
170
- /** Run one input through the built pipeline and return the final stage output. */
171
- async run(input, options = {}) {
172
- return await this.executor(input, { observer: options.observer });
173
- }
174
- /** Run many inputs through the same pipeline with bounded concurrency. */
175
- async batch(inputs, options) {
176
- return mapWithConcurrency([...inputs], options.concurrency, (input) => this.run(input));
177
- }
178
- graph() {
179
- return cloneGraph(this.pipelineGraph);
180
- }
181
- };
182
-
183
167
  // src/pipeline/runtime.ts
184
168
  async function runNode(context, node, fn) {
185
169
  const startedAt = Date.now();
@@ -203,31 +187,38 @@ async function runNode(context, node, fn) {
203
187
  }
204
188
  }
205
189
 
206
- // src/pipeline/builder.ts
207
- var PipelineBuilder = class _PipelineBuilder {
190
+ // src/pipeline/pipeline.ts
191
+ var internalPipelineOptions = /* @__PURE__ */ Symbol("internal-pipeline-options");
192
+ var Pipeline = class _Pipeline {
193
+ id;
194
+ name;
195
+ description;
196
+ metadata;
208
197
  executor;
209
198
  state;
210
- constructor(metadataOrExecutor, stateOrMetadata) {
211
- if (stateOrMetadata !== void 0 && isBuilderState(stateOrMetadata)) {
212
- this.executor = metadataOrExecutor;
213
- this.state = stateOrMetadata;
214
- return;
215
- }
216
- if (typeof metadataOrExecutor === "function") {
217
- const executor = metadataOrExecutor;
218
- this.executor = ((input) => executor(input));
219
- this.state = initialBuilderState({});
220
- return;
221
- }
222
- if (isZodSchema(metadataOrExecutor)) {
223
- const schema = metadataOrExecutor;
224
- const metadata = stateOrMetadata !== void 0 && isPipelineMetadata(stateOrMetadata) ? stateOrMetadata : {};
225
- this.executor = ((input) => schema.parse(input));
226
- this.state = initialBuilderState(metadata);
227
- return;
199
+ constructor(options) {
200
+ if (isInternalPipelineOptions(options)) {
201
+ this.executor = options[internalPipelineOptions].executor;
202
+ this.state = options[internalPipelineOptions].state;
203
+ } else {
204
+ const id = normalizePipelineId(options.id);
205
+ if (!isZodSchema(options.inputSchema)) {
206
+ throw new TypeError("Pipeline inputSchema must be a Zod schema.");
207
+ }
208
+ const inputSchema = options.inputSchema;
209
+ this.executor = ((input) => inputSchema.parse(input));
210
+ this.state = initialPipelineState({
211
+ id,
212
+ name: options.name,
213
+ description: options.description,
214
+ metadata: options.metadata
215
+ });
228
216
  }
229
- this.executor = identity;
230
- this.state = initialBuilderState(metadataOrExecutor ?? {});
217
+ const graph = this.state.graph;
218
+ this.id = graph.id;
219
+ this.name = graph.name;
220
+ this.description = graph.description;
221
+ this.metadata = graph.metadata;
231
222
  }
232
223
  /** Add a synchronous or asynchronous transform stage. */
233
224
  step(fn, metadata) {
@@ -241,18 +232,15 @@ var PipelineBuilder = class _PipelineBuilder {
241
232
  preferredId: metadata?.id
242
233
  }
243
234
  );
244
- return new _PipelineBuilder(
245
- async (input, context) => {
246
- const value = await this.runStep(input, context);
247
- const result = await runNode(context, next.node, () => fn(value));
248
- return result;
249
- },
250
- next.state
251
- );
235
+ return this.derive(async (input, context) => {
236
+ const value = await this.runStep(input, context);
237
+ const result = await runNode(context, next.node, () => fn(value));
238
+ return result;
239
+ }, next.state);
252
240
  }
253
241
  /** Compose another pipeline operation after the current stage. */
254
242
  use(op, metadata) {
255
- const nested = op instanceof Pipeline ? op : void 0;
243
+ const nested = op instanceof _Pipeline ? op : void 0;
256
244
  const next = appendNode(
257
245
  this.state,
258
246
  nested === void 0 ? "step" : "pipeline",
@@ -264,14 +252,11 @@ var PipelineBuilder = class _PipelineBuilder {
264
252
  pipelineId: nested?.id
265
253
  }
266
254
  );
267
- return new _PipelineBuilder(
268
- async (input, context) => {
269
- const value = await this.runStep(input, context);
270
- const result = await runNode(context, next.node, () => op.run(value));
271
- return result;
272
- },
273
- next.state
274
- );
255
+ return this.derive(async (input, context) => {
256
+ const value = await this.runStep(input, context);
257
+ const result = await runNode(context, next.node, () => op.run(value));
258
+ return result;
259
+ }, next.state);
275
260
  }
276
261
  /** Run named branch operations concurrently from the current value. */
277
262
  parallel(branches, metadata) {
@@ -298,7 +283,7 @@ var PipelineBuilder = class _PipelineBuilder {
298
283
  nextState,
299
284
  Object.values(branchNodes).map((node) => node.id)
300
285
  );
301
- return new _PipelineBuilder(async (input, context) => {
286
+ return this.derive(async (input, context) => {
302
287
  const value = await this.runStep(input, context);
303
288
  const entries = await runNode(
304
289
  context,
@@ -315,7 +300,7 @@ var PipelineBuilder = class _PipelineBuilder {
315
300
  }, nextState);
316
301
  }
317
302
  /** Send the current value to an agent as text and continue with the agent output. */
318
- prompt(agent, metadata) {
303
+ agent(agent, metadata) {
319
304
  const next = appendNode(this.state, "agent", metadata?.name ?? agent.name ?? agent.id, {
320
305
  description: metadata?.description ?? agent.description,
321
306
  metadata: metadata?.metadata,
@@ -323,10 +308,17 @@ var PipelineBuilder = class _PipelineBuilder {
323
308
  agentId: agent.id,
324
309
  agentName: agent.name
325
310
  });
326
- return new _PipelineBuilder(async (input, context) => {
311
+ return this.derive(async (input, context) => {
327
312
  const value = await this.runStep(input, context);
328
313
  return runNode(context, next.node, async () => {
329
- const response = await agent.prompt(String(value)).send();
314
+ const response = await agent.generate(String(value));
315
+ if (response.status === "approval_required") {
316
+ await cancelAgentApproval(
317
+ response,
318
+ "Pipeline agent stages cannot suspend for tool approval."
319
+ );
320
+ throw new Error("Pipeline agent stages cannot suspend for tool approval.");
321
+ }
330
322
  return response.output;
331
323
  });
332
324
  }, next.state);
@@ -343,45 +335,53 @@ var PipelineBuilder = class _PipelineBuilder {
343
335
  preferredId: metadata?.id
344
336
  }
345
337
  );
346
- return new _PipelineBuilder(async (input, context) => {
338
+ return this.derive(async (input, context) => {
347
339
  const value = await this.runStep(input, context);
348
340
  return runNode(context, next.node, () => extractor.extract(String(value)));
349
341
  }, next.state);
350
342
  }
351
- /** Finish the builder and return a runnable pipeline. */
352
- build() {
353
- const graph = withOutputNode(this.state);
354
- return new Pipeline(
355
- (input, context) => this.runStep(input, context),
356
- graph
357
- );
343
+ /** Run one input through the pipeline and return the final stage output. */
344
+ async run(input, options = {}) {
345
+ return this.runStep(input, { observer: options.observer });
346
+ }
347
+ /** Run many inputs through the same pipeline with bounded concurrency. */
348
+ async batch(inputs, options) {
349
+ return mapWithConcurrency([...inputs], options.concurrency, (input) => this.run(input));
350
+ }
351
+ /** Return an isolated graph snapshot for the current pipeline stages. */
352
+ graph() {
353
+ return cloneGraph(withOutputNode(this.state));
354
+ }
355
+ derive(executor, state) {
356
+ return createDerivedPipeline(executor, state);
358
357
  }
359
358
  async runStep(input, context) {
360
359
  return await this.executor(input, context);
361
360
  }
362
361
  };
363
- function identity(input) {
364
- return input;
362
+ function createDerivedPipeline(executor, state) {
363
+ const options = {
364
+ [internalPipelineOptions]: { executor, state }
365
+ };
366
+ return new Pipeline(options);
367
+ }
368
+ function isInternalPipelineOptions(options) {
369
+ return internalPipelineOptions in options;
365
370
  }
366
371
  function isZodSchema(value) {
367
372
  return value instanceof z.ZodType;
368
373
  }
369
- function isBuilderState(value) {
370
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
371
- return false;
374
+ function normalizePipelineId(id) {
375
+ if (typeof id !== "string") {
376
+ throw new TypeError("Pipeline id must be a string.");
372
377
  }
373
- const candidate = value;
374
- return "graph" in candidate && "terminalNodeId" in candidate && "terminalNodeIds" in candidate && "nextNodeIndex" in candidate && "nextEdgeIndex" in candidate;
375
- }
376
- function isPipelineMetadata(value) {
377
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
378
- return false;
378
+ const normalized = id.trim();
379
+ if (normalized.length === 0) {
380
+ throw new TypeError("Pipeline id must be a non-empty string.");
379
381
  }
380
- const candidate = value;
381
- return "id" in candidate || "name" in candidate || "description" in candidate || "metadata" in candidate;
382
+ return normalized;
382
383
  }
383
384
  export {
384
- Pipeline,
385
- PipelineBuilder
385
+ Pipeline
386
386
  };
387
387
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pipeline/builder.ts","../../src/pipeline/graph.ts","../../src/pipeline/pipeline.ts","../../src/pipeline/runtime.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent } from \"../agent/agent\";\nimport type { CompletionModel } from \"../completion\";\nimport type { Extractor } from \"../extractor\";\nimport {\n appendChildNode,\n appendNode,\n initialBuilderState,\n nextStageLabel,\n withOutputNode,\n withTerminalNodes,\n} from \"./graph\";\nimport { Pipeline } from \"./pipeline\";\nimport { runNode } from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBuilderState,\n PipelineExecutor,\n PipelineGraphNode,\n PipelineMetadata,\n PipelineOp,\n PipelineRunContext,\n PipelineStageMetadata,\n} from \"./types\";\n\n/** Builds a typed pipeline from an original input type to an inferred output type. */\nexport class PipelineBuilder<Input, Output = Input> {\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineBuilderState;\n\n constructor(schema: z.ZodType<Output, Input>);\n constructor(schema: z.ZodType<Output, Input>, metadata: PipelineMetadata);\n constructor(executor: (input: Input) => Output | Promise<Output>);\n constructor(executor: PipelineExecutor<Input, Output>, state: PipelineBuilderState);\n constructor(\n metadataOrExecutor?:\n | PipelineMetadata\n | z.ZodType\n | ((input: Input) => Output | Promise<Output>)\n | PipelineExecutor<Input, Output>,\n stateOrMetadata?: PipelineBuilderState | PipelineMetadata,\n ) {\n if (stateOrMetadata !== undefined && isBuilderState(stateOrMetadata)) {\n this.executor = metadataOrExecutor as PipelineExecutor<Input, Output>;\n this.state = stateOrMetadata;\n return;\n }\n\n if (typeof metadataOrExecutor === \"function\") {\n const executor = metadataOrExecutor as (input: Input) => Output | Promise<Output>;\n this.executor = ((input) => executor(input)) as PipelineExecutor<Input, Output>;\n this.state = initialBuilderState({});\n return;\n }\n\n if (isZodSchema(metadataOrExecutor)) {\n const schema = metadataOrExecutor;\n const metadata: PipelineMetadata =\n stateOrMetadata !== undefined && isPipelineMetadata(stateOrMetadata) ? stateOrMetadata : {};\n this.executor = ((input) => schema.parse(input)) as PipelineExecutor<Input, Output>;\n this.state = initialBuilderState(metadata);\n return;\n }\n\n this.executor = identity as PipelineExecutor<Input, Output>;\n this.state = initialBuilderState((metadataOrExecutor as PipelineMetadata | undefined) ?? {});\n }\n\n /** Add a synchronous or asynchronous transform stage. */\n step<Next>(\n fn: (input: Awaited<Output>) => Next | Promise<Next>,\n metadata?: PipelineStageMetadata,\n ): PipelineBuilder<Input, Awaited<Next>> {\n const next = appendNode(\n this.state,\n \"step\",\n metadata?.name ?? nextStageLabel(this.state, \"Step\"),\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n return new PipelineBuilder<Input, Awaited<Next>>(\n async (input, context): Promise<Awaited<Next>> => {\n const value = await this.runStep(input, context);\n const result = await runNode(context, next.node, () => fn(value));\n return result as Awaited<Next>;\n },\n next.state,\n );\n }\n\n /** Compose another pipeline operation after the current stage. */\n use<Next>(\n op: PipelineOp<Awaited<Output>, Next>,\n metadata?: PipelineStageMetadata,\n ): PipelineBuilder<Input, Awaited<Next>> {\n const nested = op instanceof Pipeline ? op : undefined;\n const next = appendNode(\n this.state,\n nested === undefined ? \"step\" : \"pipeline\",\n metadata?.name ??\n nested?.name ??\n nested?.id ??\n nextStageLabel(this.state, nested === undefined ? \"Operation\" : \"Pipeline\"),\n {\n description: metadata?.description ?? nested?.description,\n metadata: metadata?.metadata ?? nested?.metadata,\n preferredId: metadata?.id,\n pipelineId: nested?.id,\n },\n );\n return new PipelineBuilder<Input, Awaited<Next>>(\n async (input, context): Promise<Awaited<Next>> => {\n const value = await this.runStep(input, context);\n const result = await runNode(context, next.node, () => op.run(value));\n return result as Awaited<Next>;\n },\n next.state,\n );\n }\n\n /** Run named branch operations concurrently from the current value. */\n parallel<Branches extends Record<string, PipelineOp<Awaited<Output>, unknown>>>(\n branches: Branches,\n metadata?: PipelineStageMetadata,\n ): PipelineBuilder<Input, ParallelOutput<Branches>> {\n const parallel = appendNode(\n this.state,\n \"parallel\",\n metadata?.name ?? `${Object.keys(branches).length} parallel branches`,\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n let nextState = parallel.state;\n const branchNodes: Record<string, PipelineGraphNode> = {};\n for (const key of Object.keys(branches)) {\n const branch = appendChildNode(nextState, parallel.node.id, \"branch\", key, {\n branchKey: key,\n });\n nextState = branch.state;\n branchNodes[key] = branch.node;\n }\n nextState = withTerminalNodes(\n nextState,\n Object.values(branchNodes).map((node) => node.id),\n );\n\n return new PipelineBuilder<Input, ParallelOutput<Branches>>(async (input, context) => {\n const value = await this.runStep(input, context);\n const entries = await runNode(context, parallel.node, () =>\n Promise.all(\n Object.entries(branches).map(async ([key, op]) => {\n const node = branchNodes[key] as PipelineGraphNode;\n const output = await runNode(context, node, () => op.run(value));\n return [key, output] as const;\n }),\n ),\n );\n return Object.fromEntries(entries) as ParallelOutput<Branches>;\n }, nextState);\n }\n\n /** Send the current value to an agent as text and continue with the agent output. */\n prompt(\n agent: Agent<CompletionModel>,\n metadata?: PipelineStageMetadata,\n ): PipelineBuilder<Input, string> {\n const next = appendNode(this.state, \"agent\", metadata?.name ?? agent.name ?? agent.id, {\n description: metadata?.description ?? agent.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n agentId: agent.id,\n agentName: agent.name,\n });\n return new PipelineBuilder<Input, string>(async (input, context) => {\n const value = await this.runStep(input, context);\n return runNode(context, next.node, async () => {\n const response = await agent.prompt(String(value)).send();\n return response.output;\n });\n }, next.state);\n }\n\n /** Send the current value to an extractor as text and continue with typed schema data. */\n extract<T>(\n extractor: Extractor<T, CompletionModel>,\n metadata?: PipelineStageMetadata,\n ): PipelineBuilder<Input, T> {\n const next = appendNode(\n this.state,\n \"extractor\",\n metadata?.name ?? nextStageLabel(this.state, \"Extractor\"),\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n return new PipelineBuilder<Input, T>(async (input, context) => {\n const value = await this.runStep(input, context);\n return runNode(context, next.node, () => extractor.extract(String(value)));\n }, next.state);\n }\n\n /** Finish the builder and return a runnable pipeline. */\n build(): Pipeline<Input, Awaited<Output>> {\n const graph = withOutputNode(this.state);\n return new Pipeline<Input, Awaited<Output>>(\n (input, context) => this.runStep(input, context) as Promise<Awaited<Output>>,\n graph,\n );\n }\n\n private async runStep(input: Input, context: PipelineRunContext): Promise<Awaited<Output>> {\n return (await this.executor(input, context)) as Awaited<Output>;\n }\n}\n\nfunction identity<T>(input: T): T {\n return input;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction isBuilderState(value: unknown): value is PipelineBuilderState {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const candidate = value as Record<string, unknown>;\n return (\n \"graph\" in candidate &&\n \"terminalNodeId\" in candidate &&\n \"terminalNodeIds\" in candidate &&\n \"nextNodeIndex\" in candidate &&\n \"nextEdgeIndex\" in candidate\n );\n}\n\nfunction isPipelineMetadata(value: unknown): value is PipelineMetadata {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const candidate = value as Record<string, unknown>;\n return (\n \"id\" in candidate ||\n \"name\" in candidate ||\n \"description\" in candidate ||\n \"metadata\" in candidate\n );\n}\n","import type { JsonObject } from \"../completion\";\nimport type {\n PipelineBuilderState,\n PipelineGraph,\n PipelineGraphNode,\n PipelineMetadata,\n PipelineStageKind,\n} from \"./types\";\n\nexport function initialBuilderState(metadata: PipelineMetadata): PipelineBuilderState {\n return {\n graph: initialGraph(metadata),\n terminalNodeId: \"input\",\n terminalNodeIds: [\"input\"],\n nextNodeIndex: 1,\n nextEdgeIndex: 1,\n };\n}\n\nexport function initialGraph(metadata: PipelineMetadata): PipelineGraph {\n const id = normalizeId(metadata.id ?? \"pipeline\");\n const graph: PipelineGraph = {\n id,\n nodes: [{ id: \"input\", kind: \"input\", label: \"Input\" }],\n edges: [],\n };\n if (metadata.name !== undefined) {\n graph.name = metadata.name;\n }\n if (metadata.description !== undefined) {\n graph.description = metadata.description;\n }\n if (metadata.metadata !== undefined) {\n graph.metadata = metadata.metadata;\n }\n return graph;\n}\n\nexport function appendNode(\n state: PipelineBuilderState,\n kind: PipelineStageKind,\n label: string,\n options: {\n description?: string | undefined;\n metadata?: JsonObject | undefined;\n preferredId?: string | undefined;\n agentId?: string | undefined;\n agentName?: string | undefined;\n pipelineId?: string | undefined;\n } = {},\n): { state: PipelineBuilderState; node: PipelineGraphNode } {\n const node = graphNode(kind, label, state.nextNodeIndex, {\n ...options,\n existingIds: new Set(state.graph.nodes.map((item) => item.id)),\n });\n return {\n node,\n state: appendGraphNode(state, node, activeTerminalNodeIds(state), [node.id]),\n };\n}\n\nexport function appendChildNode(\n state: PipelineBuilderState,\n parentId: string,\n kind: PipelineStageKind,\n label: string,\n options: {\n branchKey?: string | undefined;\n } = {},\n): { state: PipelineBuilderState; node: PipelineGraphNode } {\n const node = graphNode(kind, label, state.nextNodeIndex, {\n ...options,\n existingIds: new Set(state.graph.nodes.map((item) => item.id)),\n });\n return {\n node,\n state: appendGraphNode(state, node, [parentId], activeTerminalNodeIds(state)),\n };\n}\n\nexport function activeTerminalNodeIds(state: PipelineBuilderState): string[] {\n return state.terminalNodeIds.length > 0 ? state.terminalNodeIds : [state.terminalNodeId];\n}\n\nexport function withTerminalNodes(\n state: PipelineBuilderState,\n terminalNodeIds: string[],\n): PipelineBuilderState {\n return {\n ...state,\n terminalNodeId: terminalNodeIds.at(-1) ?? state.terminalNodeId,\n terminalNodeIds,\n };\n}\n\nexport function withOutputNode(state: PipelineBuilderState): PipelineGraph {\n const graph = cloneGraph(state.graph);\n if (graph.nodes.some((node) => node.id === \"output\")) {\n return graph;\n }\n graph.nodes.push({ id: \"output\", kind: \"output\", label: \"Output\" });\n graph.edges.push(\n ...activeTerminalNodeIds(state).map((sourceId, index) => ({\n id: `edge_${state.nextEdgeIndex + index}`,\n source: sourceId,\n target: \"output\",\n })),\n );\n return graph;\n}\n\nexport function nextStageLabel(state: PipelineBuilderState, prefix: string): string {\n return `${prefix} ${state.nextNodeIndex}`;\n}\n\nexport function cloneGraph(graph: PipelineGraph): PipelineGraph {\n return {\n ...graph,\n nodes: graph.nodes.map((node) => ({ ...node })),\n edges: graph.edges.map((edge) => ({ ...edge })),\n };\n}\n\nfunction appendGraphNode(\n state: PipelineBuilderState,\n node: PipelineGraphNode,\n sourceIds: string[],\n terminalNodeIds: string[],\n): PipelineBuilderState {\n const edges = sourceIds.map((sourceId, index) => ({\n id: `edge_${state.nextEdgeIndex + index}`,\n source: sourceId,\n target: node.id,\n }));\n const terminalNodeId = terminalNodeIds.at(-1) ?? state.terminalNodeId;\n return {\n graph: {\n ...state.graph,\n nodes: [...state.graph.nodes, node],\n edges: [...state.graph.edges, ...edges],\n },\n terminalNodeId,\n terminalNodeIds,\n nextNodeIndex: state.nextNodeIndex + 1,\n nextEdgeIndex: state.nextEdgeIndex + edges.length,\n };\n}\n\nfunction graphNode(\n kind: PipelineStageKind,\n label: string,\n index: number,\n options: {\n description?: string | undefined;\n metadata?: JsonObject | undefined;\n preferredId?: string | undefined;\n agentId?: string | undefined;\n agentName?: string | undefined;\n pipelineId?: string | undefined;\n branchKey?: string | undefined;\n existingIds?: Set<string> | undefined;\n } = {},\n): PipelineGraphNode {\n const id = uniqueGraphNodeId(\n normalizeId(options.preferredId ?? `${kind}_${index}`),\n options.existingIds ?? new Set(),\n );\n const node: PipelineGraphNode = {\n id,\n kind,\n label,\n };\n if (options.description !== undefined) {\n node.description = options.description;\n }\n if (options.metadata !== undefined) {\n node.metadata = options.metadata;\n }\n if (options.agentId !== undefined) {\n node.agentId = options.agentId;\n }\n if (options.agentName !== undefined) {\n node.agentName = options.agentName;\n }\n if (options.pipelineId !== undefined) {\n node.pipelineId = options.pipelineId;\n }\n if (options.branchKey !== undefined) {\n node.branchKey = options.branchKey;\n }\n return node;\n}\n\nfunction normalizeId(value: string): string {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return normalized.length === 0 ? \"pipeline\" : normalized;\n}\n\nfunction uniqueGraphNodeId(baseId: string, existingIds: Set<string>): string {\n let id = baseId;\n let suffix = 2;\n while (existingIds.has(id)) {\n id = `${baseId}_${suffix}`;\n suffix += 1;\n }\n return id;\n}\n","import type { JsonObject } from \"../completion\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport { cloneGraph, initialGraph } from \"./graph\";\nimport type {\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineOp,\n PipelineRunOptions,\n} from \"./types\";\n\n/** Runnable pipeline returned by `PipelineBuilder.build()`. */\nexport class Pipeline<Input, Output> implements PipelineOp<Input, Awaited<Output>> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n\n constructor(\n private readonly executor: PipelineExecutor<Input, Output>,\n private readonly pipelineGraph: PipelineGraph = initialGraph({}),\n ) {\n this.id = pipelineGraph.id;\n this.name = pipelineGraph.name;\n this.description = pipelineGraph.description;\n this.metadata = pipelineGraph.metadata;\n }\n\n /** Run one input through the built pipeline and return the final stage output. */\n async run(input: Input, options: PipelineRunOptions = {}): Promise<Awaited<Output>> {\n return (await this.executor(input, { observer: options.observer })) as Awaited<Output>;\n }\n\n /** Run many inputs through the same pipeline with bounded concurrency. */\n async batch<I extends Iterable<Input>>(\n inputs: I,\n options: PipelineBatchOptions,\n ): Promise<Array<Awaited<Output>>> {\n return mapWithConcurrency([...inputs], options.concurrency, (input) => this.run(input));\n }\n\n graph(): PipelineGraph {\n return cloneGraph(this.pipelineGraph);\n }\n}\n","import type { PipelineGraphNode, PipelineRunContext } from \"./types\";\n\nexport async function runNode<Output>(\n context: PipelineRunContext,\n node: PipelineGraphNode,\n fn: () => Output | Promise<Output>,\n): Promise<Awaited<Output>> {\n const startedAt = Date.now();\n await context.observer?.onEvent({ type: \"stage_started\", node });\n try {\n const output = (await fn()) as Awaited<Output>;\n await context.observer?.onEvent({\n type: \"stage_completed\",\n node,\n durationMs: Date.now() - startedAt,\n });\n return output;\n } catch (error) {\n await context.observer?.onEvent({\n type: \"stage_failed\",\n node,\n durationMs: Date.now() - startedAt,\n error,\n });\n throw error;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/pipeline/pipeline.ts","../../src/pipeline/graph.ts","../../src/pipeline/runtime.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { type Agent, cancelAgentApproval } from \"../agent/agent\";\nimport type { CompletionModel, JsonObject } from \"../completion\";\nimport type { Extractor } from \"../extractor\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport {\n appendChildNode,\n appendNode,\n cloneGraph,\n initialPipelineState,\n nextStageLabel,\n withOutputNode,\n withTerminalNodes,\n} from \"./graph\";\nimport { runNode } from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineGraphNode,\n PipelineOp,\n PipelineOptions,\n PipelineRunContext,\n PipelineRunOptions,\n PipelineStageMetadata,\n PipelineState,\n} from \"./types\";\n\nconst internalPipelineOptions = Symbol(\"internal-pipeline-options\");\n\ntype InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: {\n executor: PipelineExecutor<Input, Output>;\n state: PipelineState;\n };\n};\n\n/** Immutable, typed pipeline that can be composed and run directly. */\nexport class Pipeline<Input, Output = Input> implements PipelineOp<Input, Awaited<Output>> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineState;\n\n constructor(options: PipelineOptions<Input, Output>);\n constructor(options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>) {\n if (isInternalPipelineOptions(options)) {\n this.executor = options[internalPipelineOptions].executor;\n this.state = options[internalPipelineOptions].state;\n } else {\n const id = normalizePipelineId(options.id);\n if (!isZodSchema(options.inputSchema)) {\n throw new TypeError(\"Pipeline inputSchema must be a Zod schema.\");\n }\n const inputSchema = options.inputSchema;\n this.executor = ((input) => inputSchema.parse(input)) as PipelineExecutor<Input, Output>;\n this.state = initialPipelineState({\n id,\n name: options.name,\n description: options.description,\n metadata: options.metadata,\n });\n }\n\n const graph = this.state.graph;\n this.id = graph.id;\n this.name = graph.name;\n this.description = graph.description;\n this.metadata = graph.metadata;\n }\n\n /** Add a synchronous or asynchronous transform stage. */\n step<Next>(\n fn: (input: Awaited<Output>) => Next | Promise<Next>,\n metadata?: PipelineStageMetadata,\n ): Pipeline<Input, Awaited<Next>> {\n const next = appendNode(\n this.state,\n \"step\",\n metadata?.name ?? nextStageLabel(this.state, \"Step\"),\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n return this.derive<Awaited<Next>>(async (input, context): Promise<Awaited<Next>> => {\n const value = await this.runStep(input, context);\n const result = await runNode(context, next.node, () => fn(value));\n return result as Awaited<Next>;\n }, next.state);\n }\n\n /** Compose another pipeline operation after the current stage. */\n use<Next>(\n op: PipelineOp<Awaited<Output>, Next>,\n metadata?: PipelineStageMetadata,\n ): Pipeline<Input, Awaited<Next>> {\n const nested = op instanceof Pipeline ? op : undefined;\n const next = appendNode(\n this.state,\n nested === undefined ? \"step\" : \"pipeline\",\n metadata?.name ??\n nested?.name ??\n nested?.id ??\n nextStageLabel(this.state, nested === undefined ? \"Operation\" : \"Pipeline\"),\n {\n description: metadata?.description ?? nested?.description,\n metadata: metadata?.metadata ?? nested?.metadata,\n preferredId: metadata?.id,\n pipelineId: nested?.id,\n },\n );\n return this.derive<Awaited<Next>>(async (input, context): Promise<Awaited<Next>> => {\n const value = await this.runStep(input, context);\n const result = await runNode(context, next.node, () => op.run(value));\n return result as Awaited<Next>;\n }, next.state);\n }\n\n /** Run named branch operations concurrently from the current value. */\n parallel<Branches extends Record<string, PipelineOp<Awaited<Output>, unknown>>>(\n branches: Branches,\n metadata?: PipelineStageMetadata,\n ): Pipeline<Input, ParallelOutput<Branches>> {\n const parallel = appendNode(\n this.state,\n \"parallel\",\n metadata?.name ?? `${Object.keys(branches).length} parallel branches`,\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n let nextState = parallel.state;\n const branchNodes: Record<string, PipelineGraphNode> = {};\n for (const key of Object.keys(branches)) {\n const branch = appendChildNode(nextState, parallel.node.id, \"branch\", key, {\n branchKey: key,\n });\n nextState = branch.state;\n branchNodes[key] = branch.node;\n }\n nextState = withTerminalNodes(\n nextState,\n Object.values(branchNodes).map((node) => node.id),\n );\n\n return this.derive<ParallelOutput<Branches>>(async (input, context) => {\n const value = await this.runStep(input, context);\n const entries = await runNode(context, parallel.node, () =>\n Promise.all(\n Object.entries(branches).map(async ([key, op]) => {\n const node = branchNodes[key] as PipelineGraphNode;\n const output = await runNode(context, node, () => op.run(value));\n return [key, output] as const;\n }),\n ),\n );\n return Object.fromEntries(entries) as ParallelOutput<Branches>;\n }, nextState);\n }\n\n /** Send the current value to an agent as text and continue with the agent output. */\n agent(agent: Agent<CompletionModel>, metadata?: PipelineStageMetadata): Pipeline<Input, string> {\n const next = appendNode(this.state, \"agent\", metadata?.name ?? agent.name ?? agent.id, {\n description: metadata?.description ?? agent.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n agentId: agent.id,\n agentName: agent.name,\n });\n return this.derive<string>(async (input, context) => {\n const value = await this.runStep(input, context);\n return runNode(context, next.node, async () => {\n const response = await agent.generate(String(value));\n if (response.status === \"approval_required\") {\n await cancelAgentApproval(\n response,\n \"Pipeline agent stages cannot suspend for tool approval.\",\n );\n throw new Error(\"Pipeline agent stages cannot suspend for tool approval.\");\n }\n return response.output;\n });\n }, next.state);\n }\n\n /** Send the current value to an extractor as text and continue with typed schema data. */\n extract<T>(\n extractor: Extractor<T, CompletionModel>,\n metadata?: PipelineStageMetadata,\n ): Pipeline<Input, T> {\n const next = appendNode(\n this.state,\n \"extractor\",\n metadata?.name ?? nextStageLabel(this.state, \"Extractor\"),\n {\n description: metadata?.description,\n metadata: metadata?.metadata,\n preferredId: metadata?.id,\n },\n );\n return this.derive<T>(async (input, context) => {\n const value = await this.runStep(input, context);\n return runNode(context, next.node, () => extractor.extract(String(value)));\n }, next.state);\n }\n\n /** Run one input through the pipeline and return the final stage output. */\n async run(input: Input, options: PipelineRunOptions = {}): Promise<Awaited<Output>> {\n return this.runStep(input, { observer: options.observer });\n }\n\n /** Run many inputs through the same pipeline with bounded concurrency. */\n async batch<I extends Iterable<Input>>(\n inputs: I,\n options: PipelineBatchOptions,\n ): Promise<Array<Awaited<Output>>> {\n return mapWithConcurrency([...inputs], options.concurrency, (input) => this.run(input));\n }\n\n /** Return an isolated graph snapshot for the current pipeline stages. */\n graph(): PipelineGraph {\n return cloneGraph(withOutputNode(this.state));\n }\n\n private derive<DerivedOutput>(\n executor: PipelineExecutor<Input, DerivedOutput>,\n state: PipelineState,\n ): Pipeline<Input, DerivedOutput> {\n return createDerivedPipeline(executor, state);\n }\n\n private async runStep(input: Input, context: PipelineRunContext): Promise<Awaited<Output>> {\n return (await this.executor(input, context)) as Awaited<Output>;\n }\n}\n\nfunction createDerivedPipeline<Input, Output>(\n executor: PipelineExecutor<Input, Output>,\n state: PipelineState,\n): Pipeline<Input, Output> {\n const options: InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: { executor, state },\n };\n return new Pipeline<Input, Output>(options as unknown as PipelineOptions<Input, Output>);\n}\n\nfunction isInternalPipelineOptions<Input, Output>(\n options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>,\n): options is InternalPipelineOptions<Input, Output> {\n return internalPipelineOptions in options;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction normalizePipelineId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Pipeline id must be a string.\");\n }\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline id must be a non-empty string.\");\n }\n return normalized;\n}\n","import type { JsonObject } from \"../completion\";\nimport type {\n PipelineGraph,\n PipelineGraphNode,\n PipelineMetadata,\n PipelineStageKind,\n PipelineState,\n} from \"./types\";\n\nexport function initialPipelineState(metadata: PipelineMetadata): PipelineState {\n return {\n graph: initialGraph(metadata),\n terminalNodeId: \"input\",\n terminalNodeIds: [\"input\"],\n nextNodeIndex: 1,\n nextEdgeIndex: 1,\n };\n}\n\nfunction initialGraph(metadata: PipelineMetadata): PipelineGraph {\n const id = metadata.id ?? \"pipeline\";\n const graph: PipelineGraph = {\n id,\n nodes: [{ id: \"input\", kind: \"input\", label: \"Input\" }],\n edges: [],\n };\n if (metadata.name !== undefined) {\n graph.name = metadata.name;\n }\n if (metadata.description !== undefined) {\n graph.description = metadata.description;\n }\n if (metadata.metadata !== undefined) {\n graph.metadata = metadata.metadata;\n }\n return graph;\n}\n\nexport function appendNode(\n state: PipelineState,\n kind: PipelineStageKind,\n label: string,\n options: {\n description?: string | undefined;\n metadata?: JsonObject | undefined;\n preferredId?: string | undefined;\n agentId?: string | undefined;\n agentName?: string | undefined;\n pipelineId?: string | undefined;\n } = {},\n): { state: PipelineState; node: PipelineGraphNode } {\n const node = graphNode(kind, label, state.nextNodeIndex, {\n ...options,\n existingIds: new Set(state.graph.nodes.map((item) => item.id)),\n });\n return {\n node,\n state: appendGraphNode(state, node, activeTerminalNodeIds(state), [node.id]),\n };\n}\n\nexport function appendChildNode(\n state: PipelineState,\n parentId: string,\n kind: PipelineStageKind,\n label: string,\n options: {\n branchKey?: string | undefined;\n } = {},\n): { state: PipelineState; node: PipelineGraphNode } {\n const node = graphNode(kind, label, state.nextNodeIndex, {\n ...options,\n existingIds: new Set(state.graph.nodes.map((item) => item.id)),\n });\n return {\n node,\n state: appendGraphNode(state, node, [parentId], activeTerminalNodeIds(state)),\n };\n}\n\nfunction activeTerminalNodeIds(state: PipelineState): string[] {\n return state.terminalNodeIds.length > 0 ? state.terminalNodeIds : [state.terminalNodeId];\n}\n\nexport function withTerminalNodes(state: PipelineState, terminalNodeIds: string[]): PipelineState {\n return {\n ...state,\n terminalNodeId: terminalNodeIds.at(-1) ?? state.terminalNodeId,\n terminalNodeIds,\n };\n}\n\nexport function withOutputNode(state: PipelineState): PipelineGraph {\n const graph = cloneGraph(state.graph);\n if (graph.nodes.some((node) => node.id === \"output\")) {\n return graph;\n }\n graph.nodes.push({ id: \"output\", kind: \"output\", label: \"Output\" });\n graph.edges.push(\n ...activeTerminalNodeIds(state).map((sourceId, index) => ({\n id: `edge_${state.nextEdgeIndex + index}`,\n source: sourceId,\n target: \"output\",\n })),\n );\n return graph;\n}\n\nexport function nextStageLabel(state: PipelineState, prefix: string): string {\n return `${prefix} ${state.nextNodeIndex}`;\n}\n\nexport function cloneGraph(graph: PipelineGraph): PipelineGraph {\n return {\n ...graph,\n nodes: graph.nodes.map((node) => ({ ...node })),\n edges: graph.edges.map((edge) => ({ ...edge })),\n };\n}\n\nfunction appendGraphNode(\n state: PipelineState,\n node: PipelineGraphNode,\n sourceIds: string[],\n terminalNodeIds: string[],\n): PipelineState {\n const edges = sourceIds.map((sourceId, index) => ({\n id: `edge_${state.nextEdgeIndex + index}`,\n source: sourceId,\n target: node.id,\n }));\n const terminalNodeId = terminalNodeIds.at(-1) ?? state.terminalNodeId;\n return {\n graph: {\n ...state.graph,\n nodes: [...state.graph.nodes, node],\n edges: [...state.graph.edges, ...edges],\n },\n terminalNodeId,\n terminalNodeIds,\n nextNodeIndex: state.nextNodeIndex + 1,\n nextEdgeIndex: state.nextEdgeIndex + edges.length,\n };\n}\n\nfunction graphNode(\n kind: PipelineStageKind,\n label: string,\n index: number,\n options: {\n description?: string | undefined;\n metadata?: JsonObject | undefined;\n preferredId?: string | undefined;\n agentId?: string | undefined;\n agentName?: string | undefined;\n pipelineId?: string | undefined;\n branchKey?: string | undefined;\n existingIds?: Set<string> | undefined;\n } = {},\n): PipelineGraphNode {\n const id = uniqueGraphNodeId(\n normalizeId(options.preferredId ?? `${kind}_${index}`),\n options.existingIds ?? new Set(),\n );\n const node: PipelineGraphNode = {\n id,\n kind,\n label,\n };\n if (options.description !== undefined) {\n node.description = options.description;\n }\n if (options.metadata !== undefined) {\n node.metadata = options.metadata;\n }\n if (options.agentId !== undefined) {\n node.agentId = options.agentId;\n }\n if (options.agentName !== undefined) {\n node.agentName = options.agentName;\n }\n if (options.pipelineId !== undefined) {\n node.pipelineId = options.pipelineId;\n }\n if (options.branchKey !== undefined) {\n node.branchKey = options.branchKey;\n }\n return node;\n}\n\nfunction normalizeId(value: string): string {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return normalized.length === 0 ? \"pipeline\" : normalized;\n}\n\nfunction uniqueGraphNodeId(baseId: string, existingIds: Set<string>): string {\n let id = baseId;\n let suffix = 2;\n while (existingIds.has(id)) {\n id = `${baseId}_${suffix}`;\n suffix += 1;\n }\n return id;\n}\n","import type { PipelineGraphNode, PipelineRunContext } from \"./types\";\n\nexport async function runNode<Output>(\n context: PipelineRunContext,\n node: PipelineGraphNode,\n fn: () => Output | Promise<Output>,\n): Promise<Awaited<Output>> {\n const startedAt = Date.now();\n await context.observer?.onEvent({ type: \"stage_started\", node });\n try {\n const output = (await fn()) as Awaited<Output>;\n await context.observer?.onEvent({\n type: \"stage_completed\",\n node,\n durationMs: Date.now() - startedAt,\n });\n return output;\n } catch (error) {\n await context.observer?.onEvent({\n type: \"stage_failed\",\n node,\n durationMs: Date.now() - startedAt,\n error,\n });\n throw error;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,15 @@
1
+ type RetryContext = {
2
+ error: unknown;
3
+ attempt: number;
4
+ maxAttempts: number;
5
+ streaming: boolean;
6
+ turn?: number | undefined;
7
+ };
8
+ type RetryOptions = {
9
+ maxAttempts?: number | undefined;
10
+ initialDelayMs?: number | undefined;
11
+ maxDelayMs?: number | undefined;
12
+ shouldRetry?: ((context: RetryContext) => boolean) | undefined;
13
+ };
14
+
15
+ export type { RetryContext as R, RetryOptions as a };
@@ -1,7 +1,7 @@
1
- import { b as SkillLoader, a as SkillSet } from '../types-04LqWrmy.js';
2
- export { c as Skill, S as SkillValidationError, d as SkillValidationIssue } from '../types-04LqWrmy.js';
3
- import '../tool-Cohdv5GC.js';
4
- import '../types-G12i56s2.js';
1
+ import { b as SkillLoader, a as SkillSet } from '../types-DhQfwiZn.js';
2
+ export { c as Skill, S as SkillValidationError, d as SkillValidationIssue } from '../types-DhQfwiZn.js';
3
+ import '../tool-C_8GudXn.js';
4
+ import '../types-B3A4YxaA.js';
5
5
 
6
6
  declare function loadSkills(loaders: SkillLoader | SkillLoader[]): Promise<SkillSet>;
7
7
 
@@ -2,15 +2,14 @@ import {
2
2
  SkillValidationError,
3
3
  loadSkills,
4
4
  skill
5
- } from "../chunk-NCPN4SJR.js";
5
+ } from "../chunk-DMPUP4R3.js";
6
6
  import "../chunk-CQNNSZPG.js";
7
7
  import "../chunk-YK4WAAS4.js";
8
- import "../chunk-HYUYZEAJ.js";
9
- import "../chunk-MELYDKWQ.js";
10
- import "../chunk-MNWK2USR.js";
11
- import "../chunk-OIMLU4SF.js";
8
+ import "../chunk-6WGGTJE6.js";
9
+ import "../chunk-R2LJSQUW.js";
10
+ import "../chunk-DZ3CKYTH.js";
11
+ import "../chunk-RFDVKCIE.js";
12
12
  import "../chunk-ADH7NNCS.js";
13
- import "../chunk-WQKHFADH.js";
14
13
  export {
15
14
  SkillValidationError,
16
15
  loadSkills,
@@ -1,6 +1,40 @@
1
- import {
2
- toReadableStream
3
- } from "../chunk-XUUY2L2D.js";
1
+ // src/streaming/readable-stream.ts
2
+ function toReadableStream(events, _options = {}) {
3
+ const encoder = new TextEncoder();
4
+ const iterator = events[Symbol.asyncIterator]();
5
+ return new ReadableStream({
6
+ async pull(controller) {
7
+ try {
8
+ const next = await iterator.next();
9
+ if (next.done === true) {
10
+ controller.close();
11
+ return;
12
+ }
13
+ controller.enqueue(encoder.encode(`${JSON.stringify(next.value)}
14
+ `));
15
+ } catch (error) {
16
+ controller.enqueue(
17
+ encoder.encode(`${JSON.stringify({ type: "error", error: serializeError(error) })}
18
+ `)
19
+ );
20
+ controller.close();
21
+ }
22
+ },
23
+ async cancel() {
24
+ await iterator.return?.();
25
+ }
26
+ });
27
+ }
28
+ function serializeError(error) {
29
+ if (error instanceof Error) {
30
+ return {
31
+ name: error.name,
32
+ message: error.message,
33
+ stack: error.stack
34
+ };
35
+ }
36
+ return error;
37
+ }
4
38
  export {
5
39
  toReadableStream
6
40
  };
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../src/streaming/readable-stream.ts"],"sourcesContent":["export type ReadableStreamOptions = {\n format?: \"jsonl\";\n};\n\nexport function toReadableStream<T>(\n events: AsyncIterable<T>,\n _options: ReadableStreamOptions = {},\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const iterator = events[Symbol.asyncIterator]();\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const next = await iterator.next();\n if (next.done === true) {\n controller.close();\n return;\n }\n\n controller.enqueue(encoder.encode(`${JSON.stringify(next.value)}\\n`));\n } catch (error) {\n controller.enqueue(\n encoder.encode(`${JSON.stringify({ type: \"error\", error: serializeError(error) })}\\n`),\n );\n controller.close();\n }\n },\n async cancel() {\n await iterator.return?.();\n },\n });\n}\n\nfunction serializeError(error: unknown): unknown {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return error;\n}\n"],"mappings":";AAIO,SAAS,iBACd,QACA,WAAkC,CAAC,GACP;AAC5B,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,WAAW,OAAO,OAAO,aAAa,EAAE;AAE9C,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,KAAK,YAAY;AACrB,UAAI;AACF,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAI,KAAK,SAAS,MAAM;AACtB,qBAAW,MAAM;AACjB;AAAA,QACF;AAEA,mBAAW,QAAQ,QAAQ,OAAO,GAAG,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,CAAI,CAAC;AAAA,MACtE,SAAS,OAAO;AACd,mBAAW;AAAA,UACT,QAAQ,OAAO,GAAG,KAAK,UAAU,EAAE,MAAM,SAAS,OAAO,eAAe,KAAK,EAAE,CAAC,CAAC;AAAA,CAAI;AAAA,QACvF;AACA,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,IACA,MAAM,SAAS;AACb,YAAM,SAAS,SAAS;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,OAAyB;AAC/C,MAAI,iBAAiB,OAAO;AAC1B,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1,17 +1,17 @@
1
1
  import { z } from 'zod';
2
2
  import { Z as ZodSchema } from './zod-schema-C7F4clpm.js';
3
- import { c as ToolApprovalPolicy, f as ToolCallContext, T as Tool } from './tool-Cohdv5GC.js';
3
+ import { e as ToolRequiresApproval, c as ToolCallContext, T as Tool } from './tool-C_8GudXn.js';
4
4
 
5
5
  type CreateToolOptions<InputSchema extends ZodSchema, OutputSchema extends ZodSchema | undefined = undefined, Output = unknown> = {
6
6
  name: string;
7
7
  description: string;
8
- input: InputSchema;
9
- output?: OutputSchema;
10
- approval?: ToolApprovalPolicy<z.output<InputSchema>>;
8
+ inputSchema: InputSchema;
9
+ outputSchema?: OutputSchema;
10
+ requiresApproval?: ToolRequiresApproval<z.output<InputSchema>>;
11
11
  execute(args: z.output<InputSchema>, context: ToolCallContext): OutputSchema extends ZodSchema ? z.input<OutputSchema> | Promise<z.input<OutputSchema>> : Output | Promise<Output>;
12
12
  };
13
13
  declare function createTool<InputSchema extends ZodSchema, Output = unknown>(options: CreateToolOptions<InputSchema, undefined, Output> & {
14
- output?: undefined;
14
+ outputSchema?: undefined;
15
15
  }): Tool<z.output<InputSchema>, Output>;
16
16
  declare function createTool<InputSchema extends ZodSchema, OutputSchema extends ZodSchema>(options: CreateToolOptions<InputSchema, OutputSchema>): Tool<z.output<InputSchema>, z.output<OutputSchema>>;
17
17
 
@@ -1,11 +1,13 @@
1
- export { b as CreateThinkToolOptions, C as CreateToolOptions, c as createThinkTool, a as createTool } from '../think-tool-DfCMuO8e.js';
2
- export { A as AgentMiddleware, C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, D as DynamicToolIndex, E as EmbedToolsOptions, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, e as ToolOutputMiddlewareArgs, f as ToolOutputMiddlewareResult, g as ToolResultMiddlewareArgs, i as ToolSearchDocument, j as ToolSet, h as createMiddleware, k as createToolIndex, l as embedTools, m as isDynamicToolIndex } from '../middleware-Dp3d_pxi.js';
3
- export { A as AnyTool, N as NormalizedToolOutput, T as Tool, a as ToolApprovalContext, b as ToolApprovalDecision, c as ToolApprovalPolicy, d as ToolApprovalRequest, h as ToolApprovalRunContext, e as ToolApprovalsOptions, f as ToolCallContext, g as ToolCallStreamEvent, i as ToolOutput, n as normalizeToolResultOutput, p as parseToolArgs, t as toolResultContentToText } from '../tool-Cohdv5GC.js';
4
- export { H as isToolResultContentArray, K as serializeToolOutput } from '../types-G12i56s2.js';
1
+ export { b as CreateThinkToolOptions, C as CreateToolOptions, c as createThinkTool, a as createTool } from '../think-tool-DZqZj2LV.js';
2
+ export { C as CreateToolIndexOptions, E as EmbedToolsOptions, T as ToolIndex, a as ToolSearchDocument, c as createToolIndex, e as embedTools, i as isToolIndex } from '../dynamic-tools-i9woysFa.js';
3
+ export { A as AgentMiddleware, C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, e as ToolOutputMiddlewareArgs, f as ToolOutputMiddlewareResult, g as ToolResultMiddlewareArgs, h as createMiddleware } from '../middleware-KynLg_RW.js';
4
+ export { A as AnyTool, N as NormalizedToolOutput, T as Tool, a as ToolApprovalContext, b as ToolApprovalRequirement, f as ToolApprovalRunContext, c as ToolCallContext, d as ToolCallStreamEvent, g as ToolOutput, e as ToolRequiresApproval, n as normalizeToolResultOutput, p as parseToolArgs, t as toolResultContentToText } from '../tool-C_8GudXn.js';
5
+ export { a0 as isToolResultContentArray, a2 as serializeToolOutput } from '../types-B3A4YxaA.js';
5
6
  import 'zod';
6
7
  import '../zod-schema-C7F4clpm.js';
7
- import '../types-BCTRUGex.js';
8
- import '../types-O-abTIin.js';
8
+ import '../types-p55Jc-sr.js';
9
+ import '../types-DT3nEemY.js';
10
+ import '../type-utils-CtHVDRn_.js';
9
11
 
10
12
  declare class ToolCallError extends Error {
11
13
  readonly cause?: unknown | undefined;
@@ -1,40 +1,37 @@
1
1
  import {
2
- ToolCallError,
3
- ToolJsonError,
4
- ToolNotFoundError,
5
- ToolOutput,
6
- ToolSet,
7
2
  createMiddleware,
8
3
  createThinkTool,
9
4
  createToolIndex,
10
5
  embedTools,
11
- isDynamicToolIndex,
6
+ isToolIndex
7
+ } from "../chunk-6WGGTJE6.js";
8
+ import {
9
+ ToolCallError,
10
+ ToolJsonError,
11
+ ToolNotFoundError,
12
+ ToolOutput,
13
+ createTool,
12
14
  normalizeToolResultOutput,
13
15
  parseToolArgs,
14
16
  toolResultContentToText
15
- } from "../chunk-HYUYZEAJ.js";
16
- import {
17
- createTool
18
- } from "../chunk-MELYDKWQ.js";
19
- import "../chunk-MNWK2USR.js";
20
- import "../chunk-OIMLU4SF.js";
17
+ } from "../chunk-R2LJSQUW.js";
18
+ import "../chunk-DZ3CKYTH.js";
19
+ import "../chunk-RFDVKCIE.js";
21
20
  import {
22
21
  isToolResultContentArray,
23
22
  serializeToolResultOutput
24
23
  } from "../chunk-ADH7NNCS.js";
25
- import "../chunk-WQKHFADH.js";
26
24
  export {
27
25
  ToolCallError,
28
26
  ToolJsonError,
29
27
  ToolNotFoundError,
30
28
  ToolOutput,
31
- ToolSet,
32
29
  createMiddleware,
33
30
  createThinkTool,
34
31
  createTool,
35
32
  createToolIndex,
36
33
  embedTools,
37
- isDynamicToolIndex,
34
+ isToolIndex,
38
35
  isToolResultContentArray,
39
36
  normalizeToolResultOutput,
40
37
  parseToolArgs,