@anvia/core 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/agent/index.d.ts +8 -8
  2. package/dist/agent/index.js +8 -6
  3. package/dist/{agent-MQdfhE7y.d.ts → agent-CFMdNB6O.d.ts} +11 -4
  4. package/dist/audio-generation/index.d.ts +1 -1
  5. package/dist/{chunk-AER5FGPK.js → chunk-5OGAUWM5.js} +14 -30
  6. package/dist/chunk-5OGAUWM5.js.map +1 -0
  7. package/dist/{chunk-I47EHI45.js → chunk-66IJDP6L.js} +8 -6
  8. package/dist/chunk-66IJDP6L.js.map +1 -0
  9. package/dist/{chunk-2SSND6H4.js → chunk-AYR3BJWH.js} +10 -11
  10. package/dist/chunk-AYR3BJWH.js.map +1 -0
  11. package/dist/{chunk-EFGX3EX5.js → chunk-FTO3W4UP.js} +2 -2
  12. package/dist/chunk-FTO3W4UP.js.map +1 -0
  13. package/dist/{chunk-YLN6QF5S.js → chunk-GBBMMU5E.js} +120 -65
  14. package/dist/chunk-GBBMMU5E.js.map +1 -0
  15. package/dist/chunk-MMHG7WAM.js +19 -0
  16. package/dist/chunk-MMHG7WAM.js.map +1 -0
  17. package/dist/chunk-S5IGJ4RB.js +224 -0
  18. package/dist/chunk-S5IGJ4RB.js.map +1 -0
  19. package/dist/{chunk-GNNNJZ2P.js → chunk-SYMAVW5T.js} +3 -3
  20. package/dist/{chunk-ZQQYFVO5.js → chunk-WJO6NVE2.js} +4 -217
  21. package/dist/chunk-WJO6NVE2.js.map +1 -0
  22. package/dist/{chunk-SHHSMV7O.js → chunk-ZT2YH2GA.js} +5 -5
  23. package/dist/chunk-ZT2YH2GA.js.map +1 -0
  24. package/dist/completion/index.d.ts +3 -3
  25. package/dist/completion/index.js +15 -7
  26. package/dist/{create-completion-B7-k4LsF.d.ts → create-completion-BEbtU5pX.d.ts} +3 -2
  27. package/dist/embeddings/index.js +1 -1
  28. package/dist/evals/index.d.ts +4 -4
  29. package/dist/evals/index.js +30 -26
  30. package/dist/evals/index.js.map +1 -1
  31. package/dist/extractor/index.d.ts +4 -4
  32. package/dist/extractor/index.js +9 -7
  33. package/dist/image-generation/index.d.ts +1 -1
  34. package/dist/index.d.ts +8 -8
  35. package/dist/index.js +14 -11
  36. package/dist/internal/agent.d.ts +4 -4
  37. package/dist/internal/agent.js +7 -5
  38. package/dist/loaders/index.d.ts +1 -1
  39. package/dist/mcp/index.d.ts +4 -4
  40. package/dist/mcp/index.js +5 -4
  41. package/dist/mcp/index.js.map +1 -1
  42. package/dist/memory/index.d.ts +1 -1
  43. package/dist/{middleware-D6Wu0AcC.d.ts → middleware-C0eXGwoh.d.ts} +2 -2
  44. package/dist/observability/index.d.ts +2 -2
  45. package/dist/pipeline/index.d.ts +4 -4
  46. package/dist/pipeline/index.js +17 -12
  47. package/dist/pipeline/index.js.map +1 -1
  48. package/dist/skills/index.d.ts +4 -4
  49. package/dist/skills/index.js +6 -4
  50. package/dist/{think-tool-DTDGH1Q1.d.ts → think-tool-DQw-Oz9J.d.ts} +1 -1
  51. package/dist/tool/index.d.ts +4 -4
  52. package/dist/tool/index.js +9 -6
  53. package/dist/{tool-OU7OZS0t.d.ts → tool-Bwj_zoTx.d.ts} +3 -4
  54. package/dist/transcription/index.d.ts +1 -1
  55. package/dist/{types-DXkaLs4s.d.ts → types-BLyF-Tub.d.ts} +2 -2
  56. package/dist/{types-Bpjngcxq.d.ts → types-BfEFm6zu.d.ts} +1 -1
  57. package/dist/{types-_boSLqrx.d.ts → types-C8loR4il.d.ts} +3 -1
  58. package/dist/vector-store/index.d.ts +2 -2
  59. package/dist/vector-store/index.js +3 -2
  60. package/package.json +1 -1
  61. package/dist/chunk-2SSND6H4.js.map +0 -1
  62. package/dist/chunk-AER5FGPK.js.map +0 -1
  63. package/dist/chunk-EFGX3EX5.js.map +0 -1
  64. package/dist/chunk-I47EHI45.js.map +0 -1
  65. package/dist/chunk-SHHSMV7O.js.map +0 -1
  66. package/dist/chunk-YLN6QF5S.js.map +0 -1
  67. package/dist/chunk-ZQQYFVO5.js.map +0 -1
  68. /package/dist/{chunk-GNNNJZ2P.js.map → chunk-SYMAVW5T.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/evals/agent-target.ts","../../src/evals/metrics.ts","../../src/evals/format.ts","../../src/evals/outcome.ts","../../src/evals/selectors.ts","../../src/evals/runner.ts"],"sourcesContent":["import type { Agent } from \"../agent/agent\";\nimport type { PromptResponse } from \"../agent/request\";\nimport type { Message } from \"../completion\";\nimport type { EvalCase, EvalTarget } from \"./types\";\n\nexport type AgentEvalTargetOptions<Input, Output = PromptResponse> = {\n prompt?: ((input: Input, testCase: EvalCase<Input>) => string | Message) | undefined;\n output?: ((response: PromptResponse, testCase: EvalCase<Input>) => Output) | undefined;\n};\n\nexport function agentEvalTarget<Input>(\n agent: Agent,\n options?: AgentEvalTargetOptions<Input, PromptResponse>,\n): EvalTarget<Input, PromptResponse>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output>,\n): EvalTarget<Input, Output>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output | PromptResponse> = {},\n): EvalTarget<Input, Output | PromptResponse> {\n return async (input, testCase) => {\n const prompt = options.prompt?.(input, testCase) ?? String(input);\n const response = await agent.prompt(prompt).send();\n return options.output === undefined ? response : options.output(response, testCase);\n };\n}\n","import { z } from \"zod\";\nimport type { CompletionModel } from \"../completion\";\nimport { cosineSimilarity, type EmbeddingModel, embedText } from \"../embeddings\";\nimport { ExtractorBuilder } from \"../extractor\";\nimport type { ZodSchema } from \"../schema\";\nimport { errorMessage, formatValue, stableComparable } from \"./format\";\nimport { EvalOutcome } from \"./outcome\";\nimport { resolveActual, resolveActualText, resolveExpected, resolveJudgePrompt } from \"./selectors\";\nimport type { EvalMetric, SelectorOrValue, ValueSelector } from \"./types\";\n\nexport type ExactMatchOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, unknown> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, unknown> | undefined;\n};\n\nexport function exactMatch<Input, Output, Expected = unknown>(\n options: ExactMatchOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"exact_match\",\n async evaluate(args) {\n const actual = await resolveActual(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for exact match.\");\n }\n const passed = stableComparable(actual) === stableComparable(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Expected ${formatValue(expected)}.` });\n },\n };\n}\n\nexport type ContainsOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string | RegExp> | undefined;\n};\n\nexport function contains<Input, Output, Expected = unknown>(\n options: ContainsOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"contains\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for contains.\");\n }\n if (typeof expected !== \"string\" && !(expected instanceof RegExp)) {\n return EvalOutcome.invalid(\"Contains expected value must be a string or RegExp.\");\n }\n const passed = expected instanceof RegExp ? expected.test(actual) : actual.includes(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Output did not contain ${String(expected)}.` });\n },\n };\n}\n\nexport type SemanticSimilarityOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: EmbeddingModel;\n threshold: number;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string> | undefined;\n};\n\nexport function semanticSimilarity<Input, Output, Expected = unknown>(\n options: SemanticSimilarityOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, number, Expected> {\n return {\n name: options.name ?? \"semantic_similarity\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for semantic similarity.\");\n }\n if (typeof expected !== \"string\") {\n return EvalOutcome.invalid(\"Semantic similarity expected value must be a string.\");\n }\n const [actualEmbedding, expectedEmbedding] = await Promise.all([\n embedText(options.model, actual),\n embedText(options.model, expected),\n ]);\n const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);\n return score >= options.threshold\n ? EvalOutcome.pass(score)\n : EvalOutcome.fail(score, { comment: `Similarity below threshold ${options.threshold}.` });\n },\n };\n}\n\nexport type LlmJudgeOptions<Input, Output, SchemaOutput, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n schema: ZodSchema<SchemaOutput>;\n passes(value: SchemaOutput): boolean;\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmJudge<Input, Output, SchemaOutput, Expected = unknown>(\n options: LlmJudgeOptions<Input, Output, SchemaOutput, Expected>,\n): EvalMetric<Input, Output, SchemaOutput, Expected> {\n const extractor = new ExtractorBuilder(options.model, options.schema)\n .instructions(\n options.instructions ??\n \"Judge the eval case by the requested schema. Submit the judgment using the schema.\",\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_judge\",\n async evaluate(args) {\n try {\n const judgment = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n return options.passes(judgment) ? EvalOutcome.pass(judgment) : EvalOutcome.fail(judgment);\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n\nexport type LlmScoreMetricScore = {\n score: number;\n feedback: string;\n};\n\nexport type LlmScoreOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n threshold: number;\n criteria: string | string[];\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmScore<Input, Output, Expected = unknown>(\n options: LlmScoreOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, LlmScoreMetricScore, Expected> {\n const criteria = Array.isArray(options.criteria) ? options.criteria.join(\"\\n\") : options.criteria;\n const extractor = new ExtractorBuilder(\n options.model,\n z.object({\n score: z.number(),\n feedback: z.string(),\n }),\n )\n .instructions(\n options.instructions ??\n `Score the eval case against these criteria:\\n${criteria}\\n\\nReturn a score between 0 and 1 and brief feedback.`,\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_score\",\n async evaluate(args) {\n try {\n const score = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n if (score.score < 0 || score.score > 1) {\n return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {\n score,\n });\n }\n return score.score >= options.threshold\n ? EvalOutcome.pass(score, { comment: score.feedback })\n : EvalOutcome.fail(score, { comment: score.feedback });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n","export function defaultOutputValue(output: unknown): unknown {\n if (\n typeof output === \"object\" &&\n output !== null &&\n \"output\" in output &&\n typeof (output as { output?: unknown }).output === \"string\"\n ) {\n return (output as { output: string }).output;\n }\n return output;\n}\n\nexport function stableComparable(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\nexport function formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { EvalMetadata } from \"./types\";\n\nexport type EvalOutcome<Score = unknown> =\n | {\n outcome: \"pass\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"fail\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"invalid\";\n reason: string;\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n };\n\nexport const EvalOutcome = {\n pass<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"pass\",\n ...(score === undefined ? {} : { score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n\n fail<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"fail\",\n ...(score === undefined ? {} : { score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n\n invalid<Score = never>(\n reason: string,\n options: {\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"invalid\",\n reason,\n ...(options.score === undefined ? {} : { score: options.score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n};\n","import { defaultOutputValue, formatValue } from \"./format\";\nimport type { EvalMetricArgs, SelectorOrValue, ValueSelector } from \"./types\";\n\nexport async function resolveActual<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, unknown> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<unknown> {\n return selector === undefined ? defaultOutputValue(args.output) : selector(args);\n}\n\nexport async function resolveActualText<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n const value = selector === undefined ? defaultOutputValue(args.output) : await selector(args);\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nexport async function resolveExpected<Input, Output, Expected, Value>(\n selectorOrValue: SelectorOrValue<Input, Output, Expected, Value> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<Value | Expected | undefined> {\n if (selectorOrValue === undefined) {\n return args.case.expected;\n }\n return typeof selectorOrValue === \"function\"\n ? (selectorOrValue as ValueSelector<Input, Output, Expected, Value>)(args)\n : selectorOrValue;\n}\n\nexport async function resolveJudgePrompt<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n if (selector !== undefined) {\n return selector(args);\n }\n return [\n `Suite: ${args.suiteName}`,\n `Case: ${args.case.id}`,\n `Input: ${formatValue(args.case.input)}`,\n `Expected: ${formatValue(args.case.expected)}`,\n `Output: ${formatValue(defaultOutputValue(args.output))}`,\n ].join(\"\\n\\n\");\n}\n","import { mapWithConcurrency } from \"../internal/concurrency\";\nimport { errorMessage } from \"./format\";\nimport { EvalOutcome, type EvalOutcome as EvalOutcomeType } from \"./outcome\";\nimport type {\n EvalCase,\n EvalCaseResult,\n EvalMetric,\n EvalMetricResult,\n EvalReporter,\n EvalSuiteResult,\n RunEvalSuiteOptions,\n} from \"./types\";\n\nexport async function runEvalSuite<Input, Output, Expected = unknown>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): Promise<EvalSuiteResult<Input, Output, Expected>> {\n const startedAt = Date.now();\n const results = await mapWithConcurrency(\n options.cases,\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n (testCase) => runEvalCase(options, testCase),\n );\n const counts = countOutcomes(results);\n return {\n name: options.name,\n results,\n ...counts,\n durationMs: Date.now() - startedAt,\n };\n}\n\nasync function runEvalCase<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n): Promise<EvalCaseResult<Input, Output, Expected>> {\n let output: Output | undefined;\n let targetError: unknown;\n try {\n output = await options.target(testCase.input, testCase);\n } catch (error) {\n targetError = error;\n }\n\n const metrics: EvalMetricResult[] = [];\n for (const metric of options.metrics) {\n const outcome =\n targetError === undefined\n ? await safeEvaluate(options.name, testCase, output as Output, metric)\n : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`);\n const reporterErrors = await reportOutcome({\n suiteName: options.name,\n testCase,\n output,\n targetError,\n metric,\n outcome,\n reporters: options.reporters ?? [],\n failOnReporterError: options.failOnReporterError === true,\n });\n metrics.push({ metricName: metric.name, outcome, reporterErrors });\n }\n\n return {\n case: testCase,\n ...(output === undefined ? {} : { output }),\n ...(targetError === undefined ? {} : { targetError }),\n metrics,\n };\n}\n\nasync function safeEvaluate<Input, Output, Expected>(\n suiteName: string,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n metric: EvalMetric<Input, Output, unknown, Expected>,\n): Promise<EvalOutcomeType> {\n try {\n return await metric.evaluate({ suiteName, case: testCase, output });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n}\n\nasync function reportOutcome<Input, Output, Expected>(args: {\n suiteName: string;\n testCase: EvalCase<Input, Expected>;\n output: Output | undefined;\n targetError: unknown;\n metric: EvalMetric<Input, Output, unknown, Expected>;\n outcome: EvalOutcomeType;\n reporters: Array<EvalReporter<Input, Output, Expected>>;\n failOnReporterError: boolean;\n}): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of args.reporters) {\n try {\n await reporter.report({\n suiteName: args.suiteName,\n case: args.testCase,\n output: args.output,\n targetError: args.targetError,\n metric: args.metric,\n outcome: args.outcome,\n });\n } catch (error) {\n if (args.failOnReporterError) {\n throw error;\n }\n errors.push(error);\n }\n }\n return errors;\n}\n\nfunction countOutcomes(results: Array<EvalCaseResult<unknown, unknown, unknown>>): {\n passed: number;\n failed: number;\n invalid: number;\n} {\n let passed = 0;\n let failed = 0;\n let invalid = 0;\n for (const result of results) {\n for (const metric of result.metrics) {\n if (metric.outcome.outcome === \"pass\") passed += 1;\n if (metric.outcome.outcome === \"fail\") failed += 1;\n if (metric.outcome.outcome === \"invalid\") invalid += 1;\n }\n }\n return { passed, failed, invalid };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/evals/agent-target.ts","../../src/evals/metrics.ts","../../src/evals/format.ts","../../src/evals/outcome.ts","../../src/evals/selectors.ts","../../src/evals/runner.ts"],"sourcesContent":["import type { Agent } from \"../agent/agent\";\nimport type { PromptResponse } from \"../agent/request-types\";\nimport type { Message } from \"../completion\";\nimport type { EvalCase, EvalTarget } from \"./types\";\n\nexport type AgentEvalTargetOptions<Input, Output = PromptResponse> = {\n prompt?: ((input: Input, testCase: EvalCase<Input>) => string | Message) | undefined;\n output?: ((response: PromptResponse, testCase: EvalCase<Input>) => Output) | undefined;\n};\n\nexport function agentEvalTarget<Input>(\n agent: Agent,\n options?: AgentEvalTargetOptions<Input, PromptResponse>,\n): EvalTarget<Input, PromptResponse>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output>,\n): EvalTarget<Input, Output>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output | PromptResponse> = {},\n): EvalTarget<Input, Output | PromptResponse> {\n return async (input, testCase) => {\n const prompt = options.prompt?.(input, testCase) ?? String(input);\n const response = await agent.prompt(prompt).send();\n return options.output === undefined ? response : options.output(response, testCase);\n };\n}\n","import { z } from \"zod\";\nimport type { CompletionModel } from \"../completion\";\nimport { cosineSimilarity, type EmbeddingModel, embedText } from \"../embeddings\";\nimport { ExtractorBuilder } from \"../extractor\";\nimport type { ZodSchema } from \"../schema\";\nimport { errorMessage, formatValue, stableComparable } from \"./format\";\nimport { EvalOutcome } from \"./outcome\";\nimport { resolveActual, resolveActualText, resolveExpected, resolveJudgePrompt } from \"./selectors\";\nimport type { EvalMetric, SelectorOrValue, ValueSelector } from \"./types\";\n\nexport type ExactMatchOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, unknown> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, unknown> | undefined;\n};\n\nexport function exactMatch<Input, Output, Expected = unknown>(\n options: ExactMatchOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"exact_match\",\n async evaluate(args) {\n const actual = await resolveActual(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for exact match.\");\n }\n const passed = stableComparable(actual) === stableComparable(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Expected ${formatValue(expected)}.` });\n },\n };\n}\n\nexport type ContainsOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string | RegExp> | undefined;\n};\n\nexport function contains<Input, Output, Expected = unknown>(\n options: ContainsOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"contains\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for contains.\");\n }\n if (typeof expected !== \"string\" && !(expected instanceof RegExp)) {\n return EvalOutcome.invalid(\"Contains expected value must be a string or RegExp.\");\n }\n const passed = expected instanceof RegExp ? expected.test(actual) : actual.includes(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Output did not contain ${String(expected)}.` });\n },\n };\n}\n\nexport type SemanticSimilarityOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: EmbeddingModel;\n threshold: number;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string> | undefined;\n};\n\nexport function semanticSimilarity<Input, Output, Expected = unknown>(\n options: SemanticSimilarityOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, number, Expected> {\n return {\n name: options.name ?? \"semantic_similarity\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for semantic similarity.\");\n }\n if (typeof expected !== \"string\") {\n return EvalOutcome.invalid(\"Semantic similarity expected value must be a string.\");\n }\n const [actualEmbedding, expectedEmbedding] = await Promise.all([\n embedText(options.model, actual),\n embedText(options.model, expected),\n ]);\n const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);\n return score >= options.threshold\n ? EvalOutcome.pass(score)\n : EvalOutcome.fail(score, { comment: `Similarity below threshold ${options.threshold}.` });\n },\n };\n}\n\nexport type LlmJudgeOptions<Input, Output, SchemaOutput, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n schema: ZodSchema<SchemaOutput>;\n passes(value: SchemaOutput): boolean;\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmJudge<Input, Output, SchemaOutput, Expected = unknown>(\n options: LlmJudgeOptions<Input, Output, SchemaOutput, Expected>,\n): EvalMetric<Input, Output, SchemaOutput, Expected> {\n const extractor = new ExtractorBuilder(options.model, options.schema)\n .instructions(\n options.instructions ??\n \"Judge the eval case by the requested schema. Submit the judgment using the schema.\",\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_judge\",\n async evaluate(args) {\n try {\n const judgment = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n return options.passes(judgment) ? EvalOutcome.pass(judgment) : EvalOutcome.fail(judgment);\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n\nexport type LlmScoreMetricScore = {\n score: number;\n feedback: string;\n};\n\nexport type LlmScoreOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n threshold: number;\n criteria: string | string[];\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmScore<Input, Output, Expected = unknown>(\n options: LlmScoreOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, LlmScoreMetricScore, Expected> {\n const criteria = Array.isArray(options.criteria) ? options.criteria.join(\"\\n\") : options.criteria;\n const extractor = new ExtractorBuilder(\n options.model,\n z.object({\n score: z.number(),\n feedback: z.string(),\n }),\n )\n .instructions(\n options.instructions ??\n `Score the eval case against these criteria:\\n${criteria}\\n\\nReturn a score between 0 and 1 and brief feedback.`,\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_score\",\n async evaluate(args) {\n try {\n const score = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n if (score.score < 0 || score.score > 1) {\n return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {\n score,\n });\n }\n return score.score >= options.threshold\n ? EvalOutcome.pass(score, { comment: score.feedback })\n : EvalOutcome.fail(score, { comment: score.feedback });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n","export function defaultOutputValue(output: unknown): unknown {\n if (\n typeof output === \"object\" &&\n output !== null &&\n \"output\" in output &&\n typeof (output as { output?: unknown }).output === \"string\"\n ) {\n return (output as { output: string }).output;\n }\n return output;\n}\n\nexport function stableComparable(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\nexport function formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { compact } from \"../internal/compact\";\nimport type { EvalMetadata } from \"./types\";\n\nexport type EvalOutcome<Score = unknown> =\n | {\n outcome: \"pass\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"fail\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"invalid\";\n reason: string;\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n };\n\nexport const EvalOutcome = {\n pass<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return compact({\n outcome: \"pass\" as const,\n score,\n comment: options.comment,\n metadata: options.metadata,\n }) as EvalOutcome<Score>;\n },\n\n fail<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return compact({\n outcome: \"fail\" as const,\n score,\n comment: options.comment,\n metadata: options.metadata,\n }) as EvalOutcome<Score>;\n },\n\n invalid<Score = never>(\n reason: string,\n options: {\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n } = {},\n ): EvalOutcome<Score> {\n return compact({\n outcome: \"invalid\" as const,\n reason,\n score: options.score,\n comment: options.comment,\n metadata: options.metadata,\n }) as EvalOutcome<Score>;\n },\n};\n","import { defaultOutputValue, formatValue } from \"./format\";\nimport type { EvalMetricArgs, SelectorOrValue, ValueSelector } from \"./types\";\n\nexport async function resolveActual<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, unknown> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<unknown> {\n return selector === undefined ? defaultOutputValue(args.output) : selector(args);\n}\n\nexport async function resolveActualText<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n const value = selector === undefined ? defaultOutputValue(args.output) : await selector(args);\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nexport async function resolveExpected<Input, Output, Expected, Value>(\n selectorOrValue: SelectorOrValue<Input, Output, Expected, Value> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<Value | Expected | undefined> {\n if (selectorOrValue === undefined) {\n return args.case.expected;\n }\n return typeof selectorOrValue === \"function\"\n ? (selectorOrValue as ValueSelector<Input, Output, Expected, Value>)(args)\n : selectorOrValue;\n}\n\nexport async function resolveJudgePrompt<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n if (selector !== undefined) {\n return selector(args);\n }\n return [\n `Suite: ${args.suiteName}`,\n `Case: ${args.case.id}`,\n `Input: ${formatValue(args.case.input)}`,\n `Expected: ${formatValue(args.case.expected)}`,\n `Output: ${formatValue(defaultOutputValue(args.output))}`,\n ].join(\"\\n\\n\");\n}\n","import { compact } from \"../internal/compact\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport { errorMessage } from \"./format\";\nimport { EvalOutcome, type EvalOutcome as EvalOutcomeType } from \"./outcome\";\nimport type {\n EvalCase,\n EvalCaseResult,\n EvalMetric,\n EvalMetricResult,\n EvalReporter,\n EvalSuiteResult,\n RunEvalSuiteOptions,\n} from \"./types\";\n\nexport async function runEvalSuite<Input, Output, Expected = unknown>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): Promise<EvalSuiteResult<Input, Output, Expected>> {\n const startedAt = Date.now();\n const results = await mapWithConcurrency(\n options.cases,\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n (testCase) => runEvalCase(options, testCase),\n );\n const counts = countOutcomes(results);\n return {\n name: options.name,\n results,\n ...counts,\n durationMs: Date.now() - startedAt,\n };\n}\n\nasync function runEvalCase<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n): Promise<EvalCaseResult<Input, Output, Expected>> {\n let output: Output | undefined;\n let targetError: unknown;\n try {\n output = await options.target(testCase.input, testCase);\n } catch (error) {\n targetError = error;\n }\n\n const metrics: EvalMetricResult[] = [];\n for (const metric of options.metrics) {\n const outcome =\n targetError === undefined\n ? await safeEvaluate(options.name, testCase, output as Output, metric)\n : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`);\n const reporterErrors = await reportOutcome({\n suiteName: options.name,\n testCase,\n output,\n targetError,\n metric,\n outcome,\n reporters: options.reporters ?? [],\n failOnReporterError: options.failOnReporterError === true,\n });\n metrics.push({ metricName: metric.name, outcome, reporterErrors });\n }\n\n return compact({\n case: testCase,\n output,\n targetError,\n metrics,\n }) as EvalCaseResult<Input, Output, Expected>;\n}\n\nasync function safeEvaluate<Input, Output, Expected>(\n suiteName: string,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n metric: EvalMetric<Input, Output, unknown, Expected>,\n): Promise<EvalOutcomeType> {\n try {\n return await metric.evaluate({ suiteName, case: testCase, output });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n}\n\nasync function reportOutcome<Input, Output, Expected>(args: {\n suiteName: string;\n testCase: EvalCase<Input, Expected>;\n output: Output | undefined;\n targetError: unknown;\n metric: EvalMetric<Input, Output, unknown, Expected>;\n outcome: EvalOutcomeType;\n reporters: Array<EvalReporter<Input, Output, Expected>>;\n failOnReporterError: boolean;\n}): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of args.reporters) {\n try {\n await reporter.report({\n suiteName: args.suiteName,\n case: args.testCase,\n output: args.output,\n targetError: args.targetError,\n metric: args.metric,\n outcome: args.outcome,\n });\n } catch (error) {\n if (args.failOnReporterError) {\n throw error;\n }\n errors.push(error);\n }\n }\n return errors;\n}\n\nfunction countOutcomes(results: Array<EvalCaseResult<unknown, unknown, unknown>>): {\n passed: number;\n failed: number;\n invalid: number;\n} {\n let passed = 0;\n let failed = 0;\n let invalid = 0;\n for (const result of results) {\n for (const metric of result.metrics) {\n if (metric.outcome.outcome === \"pass\") passed += 1;\n if (metric.outcome.outcome === \"fail\") failed += 1;\n if (metric.outcome.outcome === \"invalid\") invalid += 1;\n }\n }\n return { passed, failed, invalid };\n}\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
- import { e as Agent } from '../agent-MQdfhE7y.js';
1
+ import { e as Agent } from '../agent-CFMdNB6O.js';
2
2
  import { Z as ZodSchema } from '../zod-schema-C7F4clpm.js';
3
- import { U as Usage, M as Message, C as CompletionModel, e as JsonValue, n as ToolChoice } from '../types-_boSLqrx.js';
3
+ import { U as Usage, M as Message, C as CompletionModel, e as JsonValue, n as ToolChoice } from '../types-C8loR4il.js';
4
4
  import '../memory/index.js';
5
5
  import '../observability/index.js';
6
- import '../tool-OU7OZS0t.js';
7
- import '../middleware-D6Wu0AcC.js';
6
+ import '../tool-Bwj_zoTx.js';
7
+ import '../middleware-C0eXGwoh.js';
8
8
  import '../types-IB2e9u5M.js';
9
9
  import '../vector-store/index.js';
10
10
  import 'zod';
@@ -2,17 +2,19 @@ import {
2
2
  ExtractionError,
3
3
  Extractor,
4
4
  ExtractorBuilder
5
- } from "../chunk-2SSND6H4.js";
6
- import "../chunk-GNNNJZ2P.js";
7
- import "../chunk-YLN6QF5S.js";
5
+ } from "../chunk-AYR3BJWH.js";
6
+ import "../chunk-SYMAVW5T.js";
7
+ import "../chunk-GBBMMU5E.js";
8
8
  import "../chunk-XUUY2L2D.js";
9
9
  import "../chunk-XXT2UCAR.js";
10
10
  import "../chunk-YK4WAAS4.js";
11
- import "../chunk-AER5FGPK.js";
12
- import "../chunk-I47EHI45.js";
13
- import "../chunk-ZQQYFVO5.js";
11
+ import "../chunk-5OGAUWM5.js";
12
+ import "../chunk-66IJDP6L.js";
13
+ import "../chunk-MMHG7WAM.js";
14
+ import "../chunk-S5IGJ4RB.js";
15
+ import "../chunk-WJO6NVE2.js";
14
16
  import "../chunk-WQKHFADH.js";
15
- import "../chunk-EFGX3EX5.js";
17
+ import "../chunk-FTO3W4UP.js";
16
18
  import "../chunk-OIMLU4SF.js";
17
19
  export {
18
20
  ExtractionError,
@@ -1,4 +1,4 @@
1
- import { e as JsonValue } from '../types-_boSLqrx.js';
1
+ import { e as JsonValue } from '../types-C8loR4il.js';
2
2
 
3
3
  type ImageGenerationRequest = {
4
4
  prompt: string;
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  export { AgentBuilder, MaxTurnsError, PromptCancelledError } from './agent/index.js';
2
- export { A as AgentChildStreamEvent, a as AgentStreamEvent, P as PromptResponse, c as cancelPrompt, b as createHook, r as requestToolApproval, d as runControl, s as skipTool, t as toolCallControl } from './agent-MQdfhE7y.js';
3
- export { C as CreateCompletionBaseOptions, a as CreateCompletionInput, b as CreateCompletionOptions, c as CreateCompletionResult, d as CreateCompletionStreamOptions, e as CreateParsedCompletionOptions, f as CreateParsedCompletionResult, g as createCompletion, h as createCompletionStream, i as createParsedCompletion } from './create-completion-B7-k4LsF.js';
4
- export { A as AssistantContent, a as AssistantMessage, C as CompletionModel, b as CompletionRequest, c as CompletionResponse, D as Document, I as ImageContent, J as JsonObject, d as JsonPrimitive, e as JsonValue, M as Message, S as SystemMessage, T as Text, f as ToolCall, g as ToolContent, h as ToolDefinition, i as ToolMessage, j as ToolResult, k as ToolResultContent, U as Usage, l as UserContent, m as UserMessage } from './types-_boSLqrx.js';
2
+ export { A as AgentChildStreamEvent, a as AgentStreamEvent, P as PromptResponse, c as cancelPrompt, b as createHook, r as requestToolApproval, d as runControl, s as skipTool, t as toolCallControl } from './agent-CFMdNB6O.js';
3
+ export { C as CreateCompletionBaseOptions, a as CreateCompletionInput, b as CreateCompletionOptions, c as CreateCompletionResult, d as CreateCompletionStreamOptions, e as CreateParsedCompletionOptions, f as CreateParsedCompletionResult, g as createCompletion, h as createCompletionStream, i as createParsedCompletion } from './create-completion-BEbtU5pX.js';
4
+ export { A as AssistantContent, a as AssistantMessage, C as CompletionModel, b as CompletionRequest, c as CompletionResponse, D as Document, I as ImageContent, J as JsonObject, d as JsonPrimitive, e as JsonValue, M as Message, S as SystemMessage, T as Text, f as ToolCall, g as ToolContent, h as ToolDefinition, i as ToolMessage, j as ToolResult, k as ToolResultContent, U as Usage, l as UserContent, m as UserMessage } from './types-C8loR4il.js';
5
5
  export { MemoryStore } from './memory/index.js';
6
6
  export { Z as ZodSchema } from './zod-schema-C7F4clpm.js';
7
7
  export { loadSkills, skill } from './skills/index.js';
8
- export { S as SkillValidationError } from './types-Bpjngcxq.js';
9
- export { C as CreateToolOptions, c as createThinkTool, a as createTool } from './think-tool-DTDGH1Q1.js';
10
- export { A as AnyTool, T as Tool, a as ToolApprovalContext, b as ToolApprovalPolicy, c as ToolCallContext, d as ToolCallStreamEvent } from './tool-OU7OZS0t.js';
11
- export { A as AgentMiddleware, C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, e as ToolMiddleware, f as ToolOutputMiddlewareArgs, g as ToolOutputMiddlewareResult, h as ToolResultMiddlewareArgs, i as createMiddleware, j as createToolMiddleware } from './middleware-D6Wu0AcC.js';
12
- import './types-DXkaLs4s.js';
8
+ export { S as SkillValidationError } from './types-BfEFm6zu.js';
9
+ export { C as CreateToolOptions, c as createThinkTool, a as createTool } from './think-tool-DQw-Oz9J.js';
10
+ export { A as AnyTool, T as Tool, a as ToolApprovalContext, b as ToolApprovalPolicy, c as ToolCallContext, d as ToolCallStreamEvent } from './tool-Bwj_zoTx.js';
11
+ export { A as AgentMiddleware, C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, e as ToolMiddleware, f as ToolOutputMiddlewareArgs, g as ToolOutputMiddlewareResult, h as ToolResultMiddlewareArgs, i as createMiddleware, j as createToolMiddleware } from './middleware-C0eXGwoh.js';
12
+ import './types-BLyF-Tub.js';
13
13
  import '@modelcontextprotocol/sdk/client/sse.js';
14
14
  import '@modelcontextprotocol/sdk/client/stdio.js';
15
15
  import '@modelcontextprotocol/sdk/client/streamableHttp.js';
package/dist/index.js CHANGED
@@ -2,10 +2,10 @@ import {
2
2
  SkillValidationError,
3
3
  loadSkills,
4
4
  skill
5
- } from "./chunk-SHHSMV7O.js";
5
+ } from "./chunk-ZT2YH2GA.js";
6
6
  import {
7
7
  AgentBuilder
8
- } from "./chunk-GNNNJZ2P.js";
8
+ } from "./chunk-SYMAVW5T.js";
9
9
  import {
10
10
  MaxTurnsError,
11
11
  PromptCancelledError,
@@ -15,7 +15,7 @@ import {
15
15
  runControl,
16
16
  skipTool,
17
17
  toolCallControl
18
- } from "./chunk-YLN6QF5S.js";
18
+ } from "./chunk-GBBMMU5E.js";
19
19
  import "./chunk-XUUY2L2D.js";
20
20
  import "./chunk-XXT2UCAR.js";
21
21
  import "./chunk-YK4WAAS4.js";
@@ -23,22 +23,25 @@ import {
23
23
  createMiddleware,
24
24
  createThinkTool,
25
25
  createToolMiddleware
26
- } from "./chunk-AER5FGPK.js";
26
+ } from "./chunk-5OGAUWM5.js";
27
27
  import {
28
28
  createTool
29
- } from "./chunk-I47EHI45.js";
29
+ } from "./chunk-66IJDP6L.js";
30
+ import "./chunk-MMHG7WAM.js";
31
+ import {
32
+ createCompletion,
33
+ createCompletionStream,
34
+ createParsedCompletion
35
+ } from "./chunk-S5IGJ4RB.js";
30
36
  import {
31
37
  AssistantContent,
32
38
  Message,
33
39
  ToolContent,
34
40
  Usage,
35
- UserContent,
36
- createCompletion,
37
- createCompletionStream,
38
- createParsedCompletion
39
- } from "./chunk-ZQQYFVO5.js";
41
+ UserContent
42
+ } from "./chunk-WJO6NVE2.js";
40
43
  import "./chunk-WQKHFADH.js";
41
- import "./chunk-EFGX3EX5.js";
44
+ import "./chunk-FTO3W4UP.js";
42
45
  import "./chunk-OIMLU4SF.js";
43
46
  export {
44
47
  AgentBuilder,
@@ -1,8 +1,8 @@
1
- export { e as Agent, j as AgentEventAppendInput, k as AgentEventRecord, h as AgentEventStore, l as AgentEventStoreInclude, i as AgentEventStoreOptions, I as AgentEventStoreRegistration, J as AgentOptions, K as AgentSession, L as AgentToolOptions, M as DEFAULT_MAX_TURNS, D as DynamicContextOptions, N as DynamicContextRegistration, f as DynamicToolOptions, O as DynamicToolRegistration } from '../agent-MQdfhE7y.js';
2
- import '../types-_boSLqrx.js';
1
+ export { e as Agent, j as AgentEventAppendInput, k as AgentEventRecord, h as AgentEventStore, l as AgentEventStoreInclude, i as AgentEventStoreOptions, I as AgentEventStoreRegistration, J as AgentOptions, K as AgentSession, L as AgentToolOptions, M as DEFAULT_MAX_TURNS, D as DynamicContextOptions, N as DynamicContextRegistration, f as DynamicToolOptions, O as DynamicToolRegistration } from '../agent-CFMdNB6O.js';
2
+ import '../types-C8loR4il.js';
3
3
  import '../memory/index.js';
4
4
  import '../observability/index.js';
5
- import '../tool-OU7OZS0t.js';
6
- import '../middleware-D6Wu0AcC.js';
5
+ import '../tool-Bwj_zoTx.js';
6
+ import '../middleware-C0eXGwoh.js';
7
7
  import '../types-IB2e9u5M.js';
8
8
  import '../vector-store/index.js';
@@ -2,14 +2,16 @@ import {
2
2
  Agent,
3
3
  AgentSession,
4
4
  DEFAULT_MAX_TURNS
5
- } from "../chunk-YLN6QF5S.js";
5
+ } from "../chunk-GBBMMU5E.js";
6
6
  import "../chunk-XUUY2L2D.js";
7
7
  import "../chunk-YK4WAAS4.js";
8
- import "../chunk-AER5FGPK.js";
9
- import "../chunk-I47EHI45.js";
10
- import "../chunk-ZQQYFVO5.js";
8
+ import "../chunk-5OGAUWM5.js";
9
+ import "../chunk-66IJDP6L.js";
10
+ import "../chunk-MMHG7WAM.js";
11
+ import "../chunk-S5IGJ4RB.js";
12
+ import "../chunk-WJO6NVE2.js";
11
13
  import "../chunk-WQKHFADH.js";
12
- import "../chunk-EFGX3EX5.js";
14
+ import "../chunk-FTO3W4UP.js";
13
15
  import "../chunk-OIMLU4SF.js";
14
16
  export {
15
17
  Agent,
@@ -1,4 +1,4 @@
1
- import { D as Document } from '../types-_boSLqrx.js';
1
+ import { D as Document } from '../types-C8loR4il.js';
2
2
 
3
3
  type LoaderResult<T> = {
4
4
  ok: true;
@@ -1,10 +1,10 @@
1
- import { M as McpConnection, a as McpServer, b as McpStdioOptions, c as McpHttpOptions, d as McpSseOptions } from '../types-DXkaLs4s.js';
2
- export { e as McpClient, f as McpToolCallContent, g as McpToolCallResult, h as McpToolDefinition } from '../types-DXkaLs4s.js';
1
+ import { M as McpConnection, a as McpServer, b as McpStdioOptions, c as McpHttpOptions, d as McpSseOptions } from '../types-BLyF-Tub.js';
2
+ export { e as McpClient, f as McpToolCallContent, g as McpToolCallResult, h as McpToolDefinition } from '../types-BLyF-Tub.js';
3
3
  import '@modelcontextprotocol/sdk/client/sse.js';
4
4
  import '@modelcontextprotocol/sdk/client/stdio.js';
5
5
  import '@modelcontextprotocol/sdk/client/streamableHttp.js';
6
- import '../types-_boSLqrx.js';
7
- import '../tool-OU7OZS0t.js';
6
+ import '../types-C8loR4il.js';
7
+ import '../tool-Bwj_zoTx.js';
8
8
 
9
9
  declare function connectMcp(connection: McpConnection): Promise<McpServer>;
10
10
 
package/dist/mcp/index.js CHANGED
@@ -1,9 +1,13 @@
1
+ import {
2
+ isRecord
3
+ } from "../chunk-MMHG7WAM.js";
4
+
1
5
  // src/mcp/result.ts
2
6
  function createCallToolParams(name, args) {
3
7
  if (args === null || args === void 0) {
4
8
  return { name };
5
9
  }
6
- if (!isPlainRecord(args)) {
10
+ if (!isRecord(args)) {
7
11
  throw new Error("MCP tool arguments must be a JSON object");
8
12
  }
9
13
  return { name, arguments: args };
@@ -44,9 +48,6 @@ function serializeMcpValue(value) {
44
48
  const serialized = JSON.stringify(value);
45
49
  return serialized === void 0 ? String(value) : serialized;
46
50
  }
47
- function isPlainRecord(value) {
48
- return typeof value === "object" && value !== null && !Array.isArray(value);
49
- }
50
51
 
51
52
  // src/mcp/tool.ts
52
53
  var MCP_TOOL_METADATA_KEY = /* @__PURE__ */ Symbol.for("anvia.mcp.tool.metadata");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts"],"sourcesContent":["import type { JsonValue } from \"../completion/index\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isPlainRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, JsonValue> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n let tools: Awaited<ReturnType<typeof client.listTools>>[\"tools\"];\n try {\n ({ tools } = await client.listTools());\n } catch (error) {\n try {\n await client.close();\n } catch {\n // Preserve the initialization failure so callers see the actionable MCP error.\n }\n throw error;\n }\n\n return {\n name: connection.name,\n tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),\n close: () => client.close(),\n };\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n McpClient,\n McpConnection,\n McpHttpOptions,\n McpSseOptions,\n McpStdioOptions,\n} from \"./types\";\n\nexport const mcp = {\n stdio(options: McpStdioOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const { name: _name, ...server } = options;\n const client = createSdkClient();\n await client.connect(asSdkTransport(new StdioClientTransport(server)));\n return client as McpClient;\n },\n };\n },\n\n http(options: McpHttpOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new StreamableHTTPClientTransport(new URL(options.url), options.transport),\n ),\n );\n return client as McpClient;\n },\n };\n },\n\n sse(options: McpSseOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(new SSEClientTransport(new URL(options.url), options.transport)),\n );\n return client as McpClient;\n },\n };\n },\n};\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: \"0.1.0\",\n });\n}\n\nfunction asSdkTransport(transport: unknown): Parameters<Client[\"connect\"]>[0] {\n return transport as Parameters<Client[\"connect\"]>[0];\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts"],"sourcesContent":["import type { JsonValue } from \"../completion/index\";\nimport { isRecord } from \"../internal/compact\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n let tools: Awaited<ReturnType<typeof client.listTools>>[\"tools\"];\n try {\n ({ tools } = await client.listTools());\n } catch (error) {\n try {\n await client.close();\n } catch {\n // Preserve the initialization failure so callers see the actionable MCP error.\n }\n throw error;\n }\n\n return {\n name: connection.name,\n tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),\n close: () => client.close(),\n };\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n McpClient,\n McpConnection,\n McpHttpOptions,\n McpSseOptions,\n McpStdioOptions,\n} from \"./types\";\n\nexport const mcp = {\n stdio(options: McpStdioOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const { name: _name, ...server } = options;\n const client = createSdkClient();\n await client.connect(asSdkTransport(new StdioClientTransport(server)));\n return client as McpClient;\n },\n };\n },\n\n http(options: McpHttpOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new StreamableHTTPClientTransport(new URL(options.url), options.transport),\n ),\n );\n return client as McpClient;\n },\n };\n },\n\n sse(options: McpSseOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(new SSEClientTransport(new URL(options.url), options.transport)),\n );\n return client as McpClient;\n },\n };\n },\n};\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: \"0.1.0\",\n });\n}\n\nfunction asSdkTransport(transport: unknown): Parameters<Client[\"connect\"]>[0] {\n return transport as Parameters<Client[\"connect\"]>[0];\n}\n"],"mappings":";;;;;AAIO,SAAS,qBACd,MACA,MACuD;AACvD,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO,EAAE,KAAK;AAAA,EAChB;AAEA,MAAI,CAAC,SAAS,IAAI,GAAG;AACnB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,SAAO,EAAE,MAAM,WAAW,KAAK;AACjC;AAEO,SAAS,iBAAiB,QAAmC;AAClE,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,kBAAkB,OAAO,UAAU;AAAA,EAC5C;AAEA,MAAI,OAAO,YAAY,MAAM;AAC3B,UAAM,IAAI,MAAM,gBAAgB,OAAO,OAAO,CAAC;AAAA,EACjD;AAEA,SAAO,OAAO,QAAQ,IAAI,aAAa,EAAE,KAAK,EAAE;AAClD;AAEA,SAAS,gBAAgB,SAAuC;AAC9D,QAAM,OAAO,QACV,IAAI,CAAC,SAAU,KAAK,SAAS,SAAS,KAAK,OAAO,MAAU,EAC5D,OAAO,CAAC,SAAyB,SAAS,MAAS,EACnD,KAAK,IAAI;AAEZ,SAAO,SAAS,KAAK,+BAA+B;AACtD;AAEA,SAAS,cAAc,SAAqC;AAC1D,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,QAAQ;AAAA,EACjB;AAEA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,IAAI;AAAA,EACxD;AAEA,MAAI,QAAQ,SAAS,YAAY;AAC/B,UAAM,WACJ,QAAQ,SAAS,aAAa,SAAY,KAAK,QAAQ,QAAQ,SAAS,QAAQ;AAClF,QAAI,UAAU,QAAQ,UAAU;AAC9B,aAAO,GAAG,QAAQ,GAAG,QAAQ,SAAS,GAAG,IAAI,QAAQ,SAAS,IAAI;AAAA,IACpE;AAEA,WAAO,GAAG,QAAQ,GAAG,QAAQ,SAAS,GAAG,IAAI,QAAQ,SAAS,IAAI;AAAA,EACpE;AAEA,QAAM,IAAI,MAAM,wCAAwC,kBAAkB,OAAO,CAAC,EAAE;AACtF;AAEA,SAAS,kBAAkB,OAAwB;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,KAAK,UAAU,KAAK;AACvC,SAAO,eAAe,SAAY,OAAO,KAAK,IAAI;AACpD;;;AChEA,IAAM,wBAAwB,uBAAO,IAAI,yBAAyB;AAE3D,SAAS,cACd,YACA,QACA,YACM;AACN,QAAM,OAAa;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,aAA6B;AAC3B,aAAO;AAAA,QACL,MAAM,WAAW;AAAA,QACjB,aAAa,WAAW,eAAe;AAAA,QACvC,YAAY,WAAW;AAAA,MACzB;AAAA,IACF;AAAA,IACA,MAAM,KAAK,MAAuB;AAChC,YAAM,SAAS,MAAM,OAAO,SAAS,qBAAqB,WAAW,MAAM,IAAI,CAAC;AAChF,aAAO,iBAAiB,MAAM;AAAA,IAChC;AAAA,EACF;AACA,MAAI,eAAe,QAAW;AAC5B,WAAO,eAAe,MAAM,uBAAuB;AAAA,MACjD,OAAO,EAAE,WAAW;AAAA,MACpB,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC9BA,eAAsB,WAAW,YAA+C;AAC9E,QAAM,SAAS,MAAM,WAAW,QAAQ;AACxC,MAAI;AACJ,MAAI;AACF,KAAC,EAAE,MAAM,IAAI,MAAM,OAAO,UAAU;AAAA,EACtC,SAAS,OAAO;AACd,QAAI;AACF,YAAM,OAAO,MAAM;AAAA,IACrB,QAAQ;AAAA,IAER;AACA,UAAM;AAAA,EACR;AAEA,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,QAAQ,WAAW,IAAI,CAAC;AAAA,IACvE,OAAO,MAAM,OAAO,MAAM;AAAA,EAC5B;AACF;;;ACtBA,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,qCAAqC;AASvC,IAAM,MAAM;AAAA,EACjB,MAAM,SAAyC;AAC7C,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,cAAM,EAAE,MAAM,OAAO,GAAG,OAAO,IAAI;AACnC,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO,QAAQ,eAAe,IAAI,qBAAqB,MAAM,CAAC,CAAC;AACrE,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAK,SAAwC;AAC3C,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO;AAAA,UACX;AAAA,YACE,IAAI,8BAA8B,IAAI,IAAI,QAAQ,GAAG,GAAG,QAAQ,SAAS;AAAA,UAC3E;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,SAAuC;AACzC,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO;AAAA,UACX,eAAe,IAAI,mBAAmB,IAAI,IAAI,QAAQ,GAAG,GAAG,QAAQ,SAAS,CAAC;AAAA,QAChF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBAA0B;AACjC,SAAO,IAAI,OAAO;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,EACX,CAAC;AACH;AAEA,SAAS,eAAe,WAAsD;AAC5E,SAAO;AACT;","names":[]}
@@ -1,4 +1,4 @@
1
- import { J as JsonObject, M as Message } from '../types-_boSLqrx.js';
1
+ import { J as JsonObject, M as Message } from '../types-C8loR4il.js';
2
2
 
3
3
  type MemorySavePolicy = "message" | "turn" | "run";
4
4
  type MemoryContext = {
@@ -1,7 +1,7 @@
1
- import { h as ToolDefinition, b as CompletionRequest, c as CompletionResponse, e as JsonValue, k as ToolResultContent } from './types-_boSLqrx.js';
1
+ import { h as ToolDefinition, b as CompletionRequest, c as CompletionResponse, e as JsonValue, k as ToolResultContent } from './types-C8loR4il.js';
2
2
  import { V as VectorMetadata, E as EmbeddingModel, b as EmbeddedDocument } from './types-IB2e9u5M.js';
3
3
  import { VectorSearchIndex } from './vector-store/index.js';
4
- import { A as AnyTool, c as ToolCallContext, N as NormalizedToolOutput } from './tool-OU7OZS0t.js';
4
+ import { A as AnyTool, c as ToolCallContext, N as NormalizedToolOutput } from './tool-Bwj_zoTx.js';
5
5
 
6
6
  declare class ToolSet {
7
7
  private readonly tools;
@@ -1,5 +1,5 @@
1
- import { M as Message, b as CompletionRequest, J as JsonObject, r as CompletionModelCapabilities, c as CompletionResponse, f as ToolCall, h as ToolDefinition, k as ToolResultContent, U as Usage } from '../types-_boSLqrx.js';
2
- import { d as ToolCallStreamEvent } from '../tool-OU7OZS0t.js';
1
+ import { M as Message, b as CompletionRequest, J as JsonObject, t as CompletionModelCapabilities, c as CompletionResponse, f as ToolCall, h as ToolDefinition, k as ToolResultContent, U as Usage } from '../types-C8loR4il.js';
2
+ import { d as ToolCallStreamEvent } from '../tool-Bwj_zoTx.js';
3
3
 
4
4
  type AgentTraceInfo = {
5
5
  traceId?: string | undefined;
@@ -1,10 +1,10 @@
1
- import { e as Agent } from '../agent-MQdfhE7y.js';
2
- import { J as JsonObject, C as CompletionModel } from '../types-_boSLqrx.js';
1
+ import { e as Agent } from '../agent-CFMdNB6O.js';
2
+ import { J as JsonObject, C as CompletionModel } from '../types-C8loR4il.js';
3
3
  import { Extractor } from '../extractor/index.js';
4
4
  import '../memory/index.js';
5
5
  import '../observability/index.js';
6
- import '../tool-OU7OZS0t.js';
7
- import '../middleware-D6Wu0AcC.js';
6
+ import '../tool-Bwj_zoTx.js';
7
+ import '../middleware-C0eXGwoh.js';
8
8
  import '../types-IB2e9u5M.js';
9
9
  import '../vector-store/index.js';
10
10
  import '../zod-schema-C7F4clpm.js';
@@ -1,3 +1,6 @@
1
+ import {
2
+ compact
3
+ } from "../chunk-MMHG7WAM.js";
1
4
  import {
2
5
  mapWithConcurrency
3
6
  } from "../chunk-OIMLU4SF.js";
@@ -15,10 +18,12 @@ function initialBuilderState(metadata) {
15
18
  function initialGraph(metadata) {
16
19
  const id = normalizeId(metadata.id ?? "pipeline");
17
20
  return {
18
- id,
19
- ...metadata.name === void 0 ? {} : { name: metadata.name },
20
- ...metadata.description === void 0 ? {} : { description: metadata.description },
21
- ...metadata.metadata === void 0 ? {} : { metadata: metadata.metadata },
21
+ ...compact({
22
+ id,
23
+ name: metadata.name,
24
+ description: metadata.description,
25
+ metadata: metadata.metadata
26
+ }),
22
27
  nodes: [{ id: "input", kind: "input", label: "Input" }],
23
28
  edges: []
24
29
  };
@@ -102,17 +107,17 @@ function graphNode(kind, label, index, options = {}) {
102
107
  normalizeId(options.preferredId ?? `${kind}_${index}`),
103
108
  options.existingIds ?? /* @__PURE__ */ new Set()
104
109
  );
105
- return {
110
+ return compact({
106
111
  id,
107
112
  kind,
108
113
  label,
109
- ...options.description === void 0 ? {} : { description: options.description },
110
- ...options.metadata === void 0 ? {} : { metadata: options.metadata },
111
- ...options.agentId === void 0 ? {} : { agentId: options.agentId },
112
- ...options.agentName === void 0 ? {} : { agentName: options.agentName },
113
- ...options.pipelineId === void 0 ? {} : { pipelineId: options.pipelineId },
114
- ...options.branchKey === void 0 ? {} : { branchKey: options.branchKey }
115
- };
114
+ description: options.description,
115
+ metadata: options.metadata,
116
+ agentId: options.agentId,
117
+ agentName: options.agentName,
118
+ pipelineId: options.pipelineId,
119
+ branchKey: options.branchKey
120
+ });
116
121
  }
117
122
  function normalizeId(value) {
118
123
  const normalized = value.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "_").replace(/^_+|_+$/g, "");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pipeline/graph.ts","../../src/pipeline/pipeline.ts","../../src/pipeline/runtime.ts","../../src/pipeline/builder.ts"],"sourcesContent":["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 return {\n id,\n ...(metadata.name === undefined ? {} : { name: metadata.name }),\n ...(metadata.description === undefined ? {} : { description: metadata.description }),\n ...(metadata.metadata === undefined ? {} : { metadata: metadata.metadata }),\n nodes: [{ id: \"input\", kind: \"input\", label: \"Input\" }],\n edges: [],\n };\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 return {\n id,\n kind,\n label,\n ...(options.description === undefined ? {} : { description: options.description }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n ...(options.agentId === undefined ? {} : { agentId: options.agentId }),\n ...(options.agentName === undefined ? {} : { agentName: options.agentName }),\n ...(options.pipelineId === undefined ? {} : { pipelineId: options.pipelineId }),\n ...(options.branchKey === undefined ? {} : { branchKey: options.branchKey }),\n };\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","import 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();\n constructor(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 | ((input: Input) => Output | Promise<Output>)\n | PipelineExecutor<Input, Output>,\n state?: PipelineBuilderState,\n ) {\n if (state !== undefined) {\n this.executor = metadataOrExecutor as PipelineExecutor<Input, Output>;\n this.state = state;\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 this.executor = identity as PipelineExecutor<Input, Output>;\n this.state = initialBuilderState(metadataOrExecutor ?? {});\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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/pipeline/graph.ts","../../src/pipeline/pipeline.ts","../../src/pipeline/runtime.ts","../../src/pipeline/builder.ts"],"sourcesContent":["import type { JsonObject } from \"../completion\";\nimport { compact } from \"../internal/compact\";\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 return {\n ...compact({\n id,\n name: metadata.name,\n description: metadata.description,\n metadata: metadata.metadata,\n }),\n nodes: [{ id: \"input\", kind: \"input\", label: \"Input\" }],\n edges: [],\n };\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 return compact({\n id,\n kind,\n label,\n description: options.description,\n metadata: options.metadata,\n agentId: options.agentId,\n agentName: options.agentName,\n pipelineId: options.pipelineId,\n branchKey: options.branchKey,\n }) as PipelineGraphNode;\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","import 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();\n constructor(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 | ((input: Input) => Output | Promise<Output>)\n | PipelineExecutor<Input, Output>,\n state?: PipelineBuilderState,\n ) {\n if (state !== undefined) {\n this.executor = metadataOrExecutor as PipelineExecutor<Input, Output>;\n this.state = state;\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 this.executor = identity as PipelineExecutor<Input, Output>;\n this.state = initialBuilderState(metadataOrExecutor ?? {});\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"],"mappings":"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","names":[]}