@anvia/core 1.2.0 → 1.2.2

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 (165) hide show
  1. package/dist/agent/agent-tool.js +8 -8
  2. package/dist/agent/agent.js +26 -26
  3. package/dist/agent/index.d.ts +12 -12
  4. package/dist/agent/index.js +31 -31
  5. package/dist/agent/interactions/index.d.ts +1 -1
  6. package/dist/agent/resolve-options.js +13 -13
  7. package/dist/agent/resolved-agent.js +27 -27
  8. package/dist/agent/team/agent-team.js +31 -31
  9. package/dist/agent/team/index.js +31 -31
  10. package/dist/agent/tool-catalog.js +12 -12
  11. package/dist/{agent-C9VhENdj.d.ts → agent-CUZdf9G0.d.ts} +9 -9
  12. package/dist/{chunk-UTAB3XQI.js → chunk-2JZV4LUS.js} +2 -2
  13. package/dist/{chunk-TSPQD5HW.js → chunk-3EX524LK.js} +36 -27
  14. package/dist/chunk-3EX524LK.js.map +1 -0
  15. package/dist/{chunk-UOGM62JL.js → chunk-3P65RSBB.js} +3 -3
  16. package/dist/{chunk-RT5LUEO3.js → chunk-4PGI5HYY.js} +9 -9
  17. package/dist/{chunk-QEPBHHAP.js → chunk-54ZZJRP2.js} +19 -3
  18. package/dist/chunk-54ZZJRP2.js.map +1 -0
  19. package/dist/{chunk-BDDC72GF.js → chunk-5HFXHKDD.js} +2 -2
  20. package/dist/{chunk-QHGYCYV6.js → chunk-5KS4SG2U.js} +4 -4
  21. package/dist/{chunk-RXKUIJ77.js → chunk-5REZFNZ3.js} +5 -5
  22. package/dist/{chunk-B47EXUHL.js → chunk-5TMN4MYN.js} +2 -2
  23. package/dist/{chunk-LKIABZNR.js → chunk-63DUKYEG.js} +3 -3
  24. package/dist/{chunk-MHOJJYDK.js → chunk-647TQE3E.js} +2 -2
  25. package/dist/{chunk-HP34GRQX.js → chunk-AS7A2LU5.js} +2 -2
  26. package/dist/{chunk-BDKFFFVX.js → chunk-BD2USPK5.js} +4 -4
  27. package/dist/{chunk-B5YTCKUJ.js → chunk-BVAQJOZX.js} +9 -9
  28. package/dist/{chunk-T4KS577P.js → chunk-FSBDE6RF.js} +7 -6
  29. package/dist/chunk-FSBDE6RF.js.map +1 -0
  30. package/dist/{chunk-CKKNO4XB.js → chunk-GSVOMQEE.js} +2 -2
  31. package/dist/{chunk-TIZGADU4.js → chunk-HAVSSHOW.js} +7 -7
  32. package/dist/{chunk-TIZGADU4.js.map → chunk-HAVSSHOW.js.map} +1 -1
  33. package/dist/{chunk-IDNL6IH4.js → chunk-HJ6KTQTZ.js} +7 -1
  34. package/dist/chunk-HJ6KTQTZ.js.map +1 -0
  35. package/dist/{chunk-IV6YQTY2.js → chunk-ICDPUAKN.js} +2 -2
  36. package/dist/{chunk-JB3RFK6K.js → chunk-KSVFGXS6.js} +2 -2
  37. package/dist/{chunk-F3E2RLC7.js → chunk-KSXA7YK7.js} +3 -3
  38. package/dist/{chunk-5P2YOQSA.js → chunk-KX2TRKO2.js} +2 -2
  39. package/dist/{chunk-KZGSXJKU.js → chunk-LMZ54UNC.js} +2 -2
  40. package/dist/{chunk-PYLPLFJZ.js → chunk-N2AQUFGO.js} +4 -4
  41. package/dist/{chunk-7KAGWJ5M.js → chunk-NA44V5OE.js} +3 -3
  42. package/dist/{chunk-5AETKC4L.js → chunk-NSWBPKWH.js} +3 -3
  43. package/dist/{chunk-J4SINPUA.js → chunk-P6IEZWI3.js} +18 -6
  44. package/dist/chunk-P6IEZWI3.js.map +1 -0
  45. package/dist/{chunk-PPJ7SYQL.js → chunk-RGYVR4FE.js} +3 -3
  46. package/dist/{chunk-47NTHIVB.js → chunk-SCFWN3T2.js} +2 -1
  47. package/dist/chunk-SCFWN3T2.js.map +1 -0
  48. package/dist/{chunk-JOQ2T3QP.js → chunk-SIXS4CCU.js} +8 -8
  49. package/dist/{chunk-23GEYG2X.js → chunk-VCMBQTR4.js} +2 -2
  50. package/dist/{chunk-BUPC72Y2.js → chunk-VPTAGK7G.js} +3 -3
  51. package/dist/{chunk-PT777EQ3.js → chunk-VQTSZ4ZW.js} +3 -3
  52. package/dist/{chunk-6N4ENZO4.js → chunk-VU6YTPPH.js} +2 -2
  53. package/dist/{chunk-XV3DH5GC.js → chunk-WUZG6B3Q.js} +2 -2
  54. package/dist/{chunk-XJRNBTIV.js → chunk-YNA3UR42.js} +2 -2
  55. package/dist/completion/generate-completion.js +4 -4
  56. package/dist/completion/index.d.ts +3 -3
  57. package/dist/completion/index.js +4 -4
  58. package/dist/completion/stream-accumulator.js +2 -2
  59. package/dist/completion/types.js +1 -1
  60. package/dist/{dynamic-tools-CNHSPXr1.d.ts → dynamic-tools-BXXLc34l.d.ts} +3 -3
  61. package/dist/embeddings/index.js +1 -1
  62. package/dist/evals/advanced-metrics.js +8 -8
  63. package/dist/evals/cli.js +7 -7
  64. package/dist/evals/index.d.ts +5 -5
  65. package/dist/evals/index.js +37 -37
  66. package/dist/evals/judge.js +6 -6
  67. package/dist/evals/metrics.js +8 -8
  68. package/dist/evals/runner.js +6 -6
  69. package/dist/extractor/extractor.js +5 -5
  70. package/dist/extractor/index.d.ts +1 -1
  71. package/dist/extractor/index.js +5 -5
  72. package/dist/guardrails/index.d.ts +4 -4
  73. package/dist/image-generation/index.d.ts +1 -1
  74. package/dist/index.d.ts +13 -13
  75. package/dist/index.js +34 -34
  76. package/dist/internal/agent-runtime/agent-run.js +22 -22
  77. package/dist/internal/agent-runtime/continuation-state.js +4 -4
  78. package/dist/internal/agent-runtime/interaction-suspension.js +4 -4
  79. package/dist/internal/agent-runtime/memory.js +6 -6
  80. package/dist/internal/agent-runtime/prepared-tool-call.js +2 -2
  81. package/dist/internal/agent-runtime/retrieval.js +10 -10
  82. package/dist/internal/agent-runtime/tool-execution.js +18 -18
  83. package/dist/internal/agent.d.ts +43 -10
  84. package/dist/internal/agent.js +27 -27
  85. package/dist/internal/completion-request.js +2 -2
  86. package/dist/internal/team-runtime/member.js +5 -5
  87. package/dist/internal/team-runtime/run.js +30 -30
  88. package/dist/internal/team-runtime/tools.js +4 -4
  89. package/dist/mcp/index.d.ts +4 -4
  90. package/dist/memory/compaction.js +5 -5
  91. package/dist/memory/index.d.ts +3 -3
  92. package/dist/memory/index.js +5 -5
  93. package/dist/{middleware-CWjnMbiH.d.ts → middleware-DORuwSy-.d.ts} +67 -4
  94. package/dist/observability/group.js +5 -5
  95. package/dist/observability/index.d.ts +5 -5
  96. package/dist/observability/index.js +5 -5
  97. package/dist/pipeline/index.d.ts +10 -10
  98. package/dist/pipeline/index.js +6 -6
  99. package/dist/pipeline/pipeline.js +6 -6
  100. package/dist/{provider-output-error-OQ4fjw5W.d.ts → provider-output-error-CMVoe1xT.d.ts} +1 -1
  101. package/dist/skills/index.d.ts +4 -4
  102. package/dist/skills/index.js +15 -15
  103. package/dist/skills/load.js +15 -15
  104. package/dist/skills/tools.js +14 -14
  105. package/dist/speech-generation/index.d.ts +1 -1
  106. package/dist/speech-generation/index.js +1 -1
  107. package/dist/streaming/index.js +2 -1
  108. package/dist/streaming/readable-stream.js +2 -1
  109. package/dist/{text-GbW4WYMg.d.ts → text-CklbSG7K.d.ts} +1 -1
  110. package/dist/{think-tool-YWsV98I5.d.ts → think-tool-2unWbq1w.d.ts} +1 -1
  111. package/dist/tool/create-tool.js +3 -3
  112. package/dist/tool/dynamic-tools.js +11 -11
  113. package/dist/tool/index.d.ts +8 -8
  114. package/dist/tool/index.js +13 -13
  115. package/dist/tool/question-tool.js +4 -4
  116. package/dist/tool/think-tool.js +4 -4
  117. package/dist/tool/tool.js +1 -1
  118. package/dist/{tool-DQMZpZSS.d.ts → tool-D_jV3cRZ.d.ts} +38 -1
  119. package/dist/transcription/index.d.ts +1 -1
  120. package/dist/{types-DfRPfehE.d.ts → types-0t3BczrD.d.ts} +2 -2
  121. package/dist/{types-CODGMHnp.d.ts → types-ChyQISt-.d.ts} +1 -1
  122. package/dist/{types-Bqw0AuFl.d.ts → types-CqiX-4_C.d.ts} +1 -1
  123. package/dist/{types-C1xYKXF2.d.ts → types-Cu2tEf3V.d.ts} +1 -1
  124. package/dist/{types-CiHjqE6J.d.ts → types-DYqZKDA8.d.ts} +140 -0
  125. package/dist/{types-CafU6Ux5.d.ts → types-DhWxTobb.d.ts} +37 -1
  126. package/dist/vector-store/index.d.ts +4 -4
  127. package/dist/vector-store/index.js +13 -13
  128. package/dist/vector-store/ingest.js +5 -5
  129. package/dist/vector-store/retrieve.js +1 -1
  130. package/package.json +1 -1
  131. package/dist/chunk-47NTHIVB.js.map +0 -1
  132. package/dist/chunk-IDNL6IH4.js.map +0 -1
  133. package/dist/chunk-J4SINPUA.js.map +0 -1
  134. package/dist/chunk-QEPBHHAP.js.map +0 -1
  135. package/dist/chunk-T4KS577P.js.map +0 -1
  136. package/dist/chunk-TSPQD5HW.js.map +0 -1
  137. /package/dist/{chunk-UTAB3XQI.js.map → chunk-2JZV4LUS.js.map} +0 -0
  138. /package/dist/{chunk-UOGM62JL.js.map → chunk-3P65RSBB.js.map} +0 -0
  139. /package/dist/{chunk-RT5LUEO3.js.map → chunk-4PGI5HYY.js.map} +0 -0
  140. /package/dist/{chunk-BDDC72GF.js.map → chunk-5HFXHKDD.js.map} +0 -0
  141. /package/dist/{chunk-QHGYCYV6.js.map → chunk-5KS4SG2U.js.map} +0 -0
  142. /package/dist/{chunk-RXKUIJ77.js.map → chunk-5REZFNZ3.js.map} +0 -0
  143. /package/dist/{chunk-B47EXUHL.js.map → chunk-5TMN4MYN.js.map} +0 -0
  144. /package/dist/{chunk-LKIABZNR.js.map → chunk-63DUKYEG.js.map} +0 -0
  145. /package/dist/{chunk-MHOJJYDK.js.map → chunk-647TQE3E.js.map} +0 -0
  146. /package/dist/{chunk-HP34GRQX.js.map → chunk-AS7A2LU5.js.map} +0 -0
  147. /package/dist/{chunk-BDKFFFVX.js.map → chunk-BD2USPK5.js.map} +0 -0
  148. /package/dist/{chunk-B5YTCKUJ.js.map → chunk-BVAQJOZX.js.map} +0 -0
  149. /package/dist/{chunk-CKKNO4XB.js.map → chunk-GSVOMQEE.js.map} +0 -0
  150. /package/dist/{chunk-IV6YQTY2.js.map → chunk-ICDPUAKN.js.map} +0 -0
  151. /package/dist/{chunk-JB3RFK6K.js.map → chunk-KSVFGXS6.js.map} +0 -0
  152. /package/dist/{chunk-F3E2RLC7.js.map → chunk-KSXA7YK7.js.map} +0 -0
  153. /package/dist/{chunk-5P2YOQSA.js.map → chunk-KX2TRKO2.js.map} +0 -0
  154. /package/dist/{chunk-KZGSXJKU.js.map → chunk-LMZ54UNC.js.map} +0 -0
  155. /package/dist/{chunk-PYLPLFJZ.js.map → chunk-N2AQUFGO.js.map} +0 -0
  156. /package/dist/{chunk-7KAGWJ5M.js.map → chunk-NA44V5OE.js.map} +0 -0
  157. /package/dist/{chunk-5AETKC4L.js.map → chunk-NSWBPKWH.js.map} +0 -0
  158. /package/dist/{chunk-PPJ7SYQL.js.map → chunk-RGYVR4FE.js.map} +0 -0
  159. /package/dist/{chunk-JOQ2T3QP.js.map → chunk-SIXS4CCU.js.map} +0 -0
  160. /package/dist/{chunk-23GEYG2X.js.map → chunk-VCMBQTR4.js.map} +0 -0
  161. /package/dist/{chunk-BUPC72Y2.js.map → chunk-VPTAGK7G.js.map} +0 -0
  162. /package/dist/{chunk-PT777EQ3.js.map → chunk-VQTSZ4ZW.js.map} +0 -0
  163. /package/dist/{chunk-6N4ENZO4.js.map → chunk-VU6YTPPH.js.map} +0 -0
  164. /package/dist/{chunk-XV3DH5GC.js.map → chunk-WUZG6B3Q.js.map} +0 -0
  165. /package/dist/{chunk-XJRNBTIV.js.map → chunk-YNA3UR42.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createTool
3
- } from "./chunk-XV3DH5GC.js";
3
+ } from "./chunk-WUZG6B3Q.js";
4
4
 
5
5
  // src/internal/team-runtime/tools.ts
6
6
  import { z } from "zod";
@@ -64,4 +64,4 @@ export {
64
64
  teamTools,
65
65
  TEAM_INSTRUCTIONS
66
66
  };
67
- //# sourceMappingURL=chunk-B47EXUHL.js.map
67
+ //# sourceMappingURL=chunk-5TMN4MYN.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  extract
3
- } from "./chunk-UOGM62JL.js";
3
+ } from "./chunk-3P65RSBB.js";
4
4
  import {
5
5
  Usage
6
- } from "./chunk-IDNL6IH4.js";
6
+ } from "./chunk-HJ6KTQTZ.js";
7
7
 
8
8
  // src/evals/judge.ts
9
9
  async function runJudge(args) {
@@ -46,4 +46,4 @@ export {
46
46
  addUsage,
47
47
  evaluationMetadata
48
48
  };
49
- //# sourceMappingURL=chunk-LKIABZNR.js.map
49
+ //# sourceMappingURL=chunk-63DUKYEG.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  normalizeToolResultOutput,
3
3
  parseToolArgs
4
- } from "./chunk-47NTHIVB.js";
4
+ } from "./chunk-SCFWN3T2.js";
5
5
  import {
6
6
  ToolCallError,
7
7
  ToolJsonError
@@ -90,4 +90,4 @@ export {
90
90
  prepareToolCall,
91
91
  prepareToolCallFromInput
92
92
  };
93
- //# sourceMappingURL=chunk-MHOJJYDK.js.map
93
+ //# sourceMappingURL=chunk-647TQE3E.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-ZPJFXRQZ.js";
8
8
  import {
9
9
  generateCompletion
10
- } from "./chunk-BDKFFFVX.js";
10
+ } from "./chunk-BD2USPK5.js";
11
11
 
12
12
  // src/memory/compaction.ts
13
13
  var defaultSummaryInstructions = `Summarize the conversation transcript for use as future agent memory.
@@ -209,4 +209,4 @@ export {
209
209
  createMemoryCompactionSummary,
210
210
  cumulativeCompactedMessageCount
211
211
  };
212
- //# sourceMappingURL=chunk-HP34GRQX.js.map
212
+ //# sourceMappingURL=chunk-AS7A2LU5.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createCompletionRequest
3
- } from "./chunk-CKKNO4XB.js";
3
+ } from "./chunk-GSVOMQEE.js";
4
4
  import {
5
5
  CompletionStreamAccumulator
6
- } from "./chunk-UTAB3XQI.js";
6
+ } from "./chunk-2JZV4LUS.js";
7
7
  import {
8
8
  CompletionProviderOutputError,
9
9
  assertCompletionResponseIntegrity
@@ -12,7 +12,7 @@ import {
12
12
  Usage,
13
13
  assertCompletionRequestSupported,
14
14
  textFromAssistantContent
15
- } from "./chunk-IDNL6IH4.js";
15
+ } from "./chunk-HJ6KTQTZ.js";
16
16
  import {
17
17
  isJsonValue
18
18
  } from "./chunk-4C7AXYOM.js";
@@ -339,4 +339,4 @@ export {
339
339
  streamCompletion,
340
340
  isStreamingCompletionModel
341
341
  };
342
- //# sourceMappingURL=chunk-BDKFFFVX.js.map
342
+ //# sourceMappingURL=chunk-BD2USPK5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AgentRun
3
- } from "./chunk-RT5LUEO3.js";
3
+ } from "./chunk-4PGI5HYY.js";
4
4
  import {
5
5
  assertNonnegativeSafeInteger
6
6
  } from "./chunk-NPJ2T3L5.js";
@@ -9,10 +9,10 @@ import {
9
9
  } from "./chunk-LAIATEUB.js";
10
10
  import {
11
11
  AgentRunMemory
12
- } from "./chunk-F3E2RLC7.js";
12
+ } from "./chunk-KSXA7YK7.js";
13
13
  import {
14
14
  prepareAgentTools
15
- } from "./chunk-JB3RFK6K.js";
15
+ } from "./chunk-KSVFGXS6.js";
16
16
  import {
17
17
  getRegisteredAgentTool,
18
18
  registerAgentToolState
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-GLMYZ6OA.js";
23
23
  import {
24
24
  resolveAgentOptions
25
- } from "./chunk-7KAGWJ5M.js";
25
+ } from "./chunk-NA44V5OE.js";
26
26
  import {
27
27
  cloneFrozenPlainData,
28
28
  snapshotAgentContext,
@@ -35,22 +35,22 @@ import {
35
35
  } from "./chunk-KY4VXIN2.js";
36
36
  import {
37
37
  createAgentTool
38
- } from "./chunk-PPJ7SYQL.js";
38
+ } from "./chunk-RGYVR4FE.js";
39
39
  import {
40
40
  isStreamingCompletionModel
41
- } from "./chunk-BDKFFFVX.js";
41
+ } from "./chunk-BD2USPK5.js";
42
42
  import {
43
43
  assertJsonObject
44
44
  } from "./chunk-4ONUNWGC.js";
45
45
  import {
46
46
  prepareToolCall
47
- } from "./chunk-MHOJJYDK.js";
47
+ } from "./chunk-647TQE3E.js";
48
48
  import {
49
49
  ToolNotFoundError
50
50
  } from "./chunk-J6S6MT7O.js";
51
51
  import {
52
52
  assertCompletionControlsSupported
53
- } from "./chunk-IDNL6IH4.js";
53
+ } from "./chunk-HJ6KTQTZ.js";
54
54
  import {
55
55
  normalizeAgentId
56
56
  } from "./chunk-KBBQSP4M.js";
@@ -155,4 +155,4 @@ var Agent = class {
155
155
  export {
156
156
  Agent
157
157
  };
158
- //# sourceMappingURL=chunk-B5YTCKUJ.js.map
158
+ //# sourceMappingURL=chunk-BVAQJOZX.js.map
@@ -8,17 +8,18 @@ import {
8
8
 
9
9
  // src/internal/team-runtime/member.ts
10
10
  function memberSummary(member) {
11
- return {
11
+ const summary = {
12
12
  instanceId: member.instanceId,
13
13
  agentId: member.agent.id,
14
14
  name: member.name,
15
15
  depth: member.depth,
16
16
  status: member.status,
17
- usage: lifecycleSnapshot(member.usage),
18
- ...member.parentInstanceId === void 0 ? {} : { parentInstanceId: member.parentInstanceId },
19
- ...member.outcome === void 0 ? {} : { outcome: lifecycleSnapshot(member.outcome) },
20
- ...member.error === void 0 ? {} : { error: member.error }
17
+ usage: lifecycleSnapshot(member.usage)
21
18
  };
19
+ if (member.parentInstanceId !== void 0) summary.parentInstanceId = member.parentInstanceId;
20
+ if (member.outcome !== void 0) summary.outcome = lifecycleSnapshot(member.outcome);
21
+ if (member.error !== void 0) summary.error = member.error;
22
+ return summary;
22
23
  }
23
24
  function steeringMessages(input) {
24
25
  if (typeof input !== "object" || input === null || input.prompt === void 0 === (input.messages === void 0)) {
@@ -55,4 +56,4 @@ export {
55
56
  steeringMessages,
56
57
  agentMessageInput
57
58
  };
58
- //# sourceMappingURL=chunk-T4KS577P.js.map
59
+ //# sourceMappingURL=chunk-FSBDE6RF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/team-runtime/member.ts"],"sourcesContent":["import type {\n AgentTeamMemberStatus,\n AgentTeamMemberSummary,\n AgentTeamMessage,\n} from \"../../agent/team/types\";\nimport type { AgentOutcome, AgentSteerInput } from \"../../agent/run-types\";\nimport type { Message, UserMessage } from \"../../completion\";\nimport { parseMessage, parseMessages, Usage } from \"../../completion\";\nimport type { Writable } from \"../type-utils\";\nimport type { AgentRun } from \"../agent-runtime/agent-run\";\nimport type { Agent } from \"../../agent/agent\";\nimport { lifecycleSnapshot } from \"../../agent/lifecycle\";\n\nexport type TeamInput = {\n id: string;\n messages: UserMessage[];\n message?: AgentTeamMessage;\n submitted: boolean;\n};\n\nexport type TeamMember = {\n instanceId: string;\n parentInstanceId?: string;\n depth: number;\n definition: Agent<unknown>;\n name: string;\n agent: Agent<unknown>;\n status: AgentTeamMemberStatus;\n history: Message[];\n inputs: TeamInput[];\n receipts: Map<string, TeamInput>;\n controller: AbortController;\n release?: (() => void) | undefined;\n task?: Promise<void> | undefined;\n activeRun?: AgentRun<unknown> | undefined;\n runId?: string | undefined;\n outcome?: Exclude<AgentOutcome<unknown>, { type: \"interaction\" }>;\n error?: unknown;\n usage: Usage;\n notifications: { from: string; type: \"message\" | \"outcome\"; id: string }[];\n};\n\nexport function memberSummary(member: TeamMember): AgentTeamMemberSummary {\n const summary: Writable<AgentTeamMemberSummary> = {\n instanceId: member.instanceId,\n agentId: member.agent.id,\n name: member.name,\n depth: member.depth,\n status: member.status,\n usage: lifecycleSnapshot(member.usage),\n };\n if (member.parentInstanceId !== undefined) summary.parentInstanceId = member.parentInstanceId;\n if (member.outcome !== undefined) summary.outcome = lifecycleSnapshot(member.outcome);\n if (member.error !== undefined) summary.error = member.error;\n return summary;\n}\n\nexport function steeringMessages(input: AgentSteerInput): UserMessage[] {\n if (\n typeof input !== \"object\" ||\n input === null ||\n (input.prompt === undefined) === (input.messages === undefined)\n ) {\n throw new TypeError(\"Agent team steering requires exactly one of prompt or messages.\");\n }\n const messages =\n input.prompt === undefined\n ? parseMessages(input.messages)\n : [\n parseMessage(\n typeof input.prompt === \"string\"\n ? { role: \"user\", content: input.prompt }\n : input.prompt,\n ),\n ];\n if (messages.length === 0 || messages.some((message) => message.role !== \"user\")) {\n throw new TypeError(\"Agent team steering requires user messages.\");\n }\n return messages as UserMessage[];\n}\n\nexport function agentMessageInput(message: AgentTeamMessage): TeamInput {\n return {\n id: message.id,\n submitted: false,\n message,\n messages: [\n {\n role: \"user\",\n content: `Message from another agent (not a user approval):\\n${JSON.stringify(message)}`,\n metadata: { anvia: { agentMessage: { ...message } } },\n },\n ],\n };\n}\n"],"mappings":";;;;;;;;;AA0CO,SAAS,cAAc,QAA4C;AACxE,QAAM,UAA4C;AAAA,IAChD,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO,MAAM;AAAA,IACtB,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,OAAO,kBAAkB,OAAO,KAAK;AAAA,EACvC;AACA,MAAI,OAAO,qBAAqB,OAAW,SAAQ,mBAAmB,OAAO;AAC7E,MAAI,OAAO,YAAY,OAAW,SAAQ,UAAU,kBAAkB,OAAO,OAAO;AACpF,MAAI,OAAO,UAAU,OAAW,SAAQ,QAAQ,OAAO;AACvD,SAAO;AACT;AAEO,SAAS,iBAAiB,OAAuC;AACtE,MACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAM,WAAW,YAAgB,MAAM,aAAa,SACrD;AACA,UAAM,IAAI,UAAU,iEAAiE;AAAA,EACvF;AACA,QAAM,WACJ,MAAM,WAAW,SACb,cAAc,MAAM,QAAQ,IAC5B;AAAA,IACE;AAAA,MACE,OAAO,MAAM,WAAW,WACpB,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,IACtC,MAAM;AAAA,IACZ;AAAA,EACF;AACN,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,SAAS,MAAM,GAAG;AAChF,UAAM,IAAI,UAAU,6CAA6C;AAAA,EACnE;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,SAAsC;AACtE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,EAAsD,KAAK,UAAU,OAAO,CAAC;AAAA,QACtF,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,EAAE;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4ONUNWGC.js";
4
4
  import {
5
5
  isProviderTool
6
- } from "./chunk-IDNL6IH4.js";
6
+ } from "./chunk-HJ6KTQTZ.js";
7
7
  import {
8
8
  parseMessage,
9
9
  parseMessages
@@ -67,4 +67,4 @@ function messagesFromInput(input) {
67
67
  export {
68
68
  createCompletionRequest
69
69
  };
70
- //# sourceMappingURL=chunk-CKKNO4XB.js.map
70
+ //# sourceMappingURL=chunk-GSVOMQEE.js.map
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-V3FFZWF3.js";
24
24
  import {
25
25
  extract
26
- } from "./chunk-UOGM62JL.js";
26
+ } from "./chunk-3P65RSBB.js";
27
27
  import {
28
28
  mapWithConcurrency
29
29
  } from "./chunk-4FIVU53H.js";
@@ -316,11 +316,11 @@ function withPipelineParentTrace(trace, parent, agentPrimaryTrace) {
316
316
  if (parent?.traceId === void 0) return trace;
317
317
  if (parent.observer !== agentPrimaryTrace) return trace;
318
318
  if (trace?.traceId !== void 0 && trace.traceId !== parent.traceId) return trace;
319
- return {
320
- ...trace,
321
- traceId: parent.traceId,
322
- ...trace?.parentObservationId !== void 0 || parent.observationId === void 0 ? {} : { parentObservationId: parent.observationId }
323
- };
319
+ const resolved = { ...trace, traceId: parent.traceId };
320
+ if (trace?.parentObservationId === void 0 && parent.observationId !== void 0) {
321
+ resolved.parentObservationId = parent.observationId;
322
+ }
323
+ return resolved;
324
324
  }
325
325
  function isInternalPipelineOptions(options) {
326
326
  return internalPipelineOptions in options;
@@ -372,4 +372,4 @@ function normalizeParallelBranches(branches) {
372
372
  export {
373
373
  Pipeline
374
374
  };
375
- //# sourceMappingURL=chunk-TIZGADU4.js.map
375
+ //# sourceMappingURL=chunk-HAVSSHOW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pipeline/pipeline.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent } from \"../agent/agent\";\nimport { AgentRunBlockedError } from \"../agent/errors\";\nimport type { AgentInput, AgentRunOptions, AgentRunSettings } from \"../agent/run-types\";\nimport type { CompletionModel, CompletionModelControlsOf, JsonObject } from \"../completion\";\nimport { type ExtractOptions, extract as extractData } from \"../extractor\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { AgentTraceOptions } from \"../observability\";\nimport { PipelineAgentSuspensionError } from \"./errors\";\nimport {\n appendComposedGraph,\n appendParallelBranch,\n appendStageNode,\n cloneGraph,\n initialPipelineState,\n withOutputNode,\n withTerminalPaths,\n} from \"./graph\";\nimport { snapshotPipelineObservability, startPipelineRunObservers } from \"./observability\";\nimport {\n childContext,\n combineAbortSignals,\n pipelineAbortError,\n runNode,\n stageContext,\n} from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBatchItem,\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineGraphNode,\n PipelineNodePath,\n PipelineOptions,\n PipelineRunContext,\n PipelineRunOptions,\n PipelineRunResult,\n PipelineStageContext,\n PipelineStageMetadata,\n PipelineState,\n PipelineTraceInfo,\n} from \"./types\";\n\nconst internalPipelineOptions = Symbol(\"internal-pipeline-options\");\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\ntype PipelineAgentRequest<Output, Model extends CompletionModel> = AgentInput &\n Omit<\n AgentRunSettings<Output, RawResponseOf<Model>, CompletionModelControlsOf<Model>>,\n \"abortSignal\"\n >;\n\nexport type PipelineStepOptions<Input, Output> = PipelineStageMetadata & {\n run(context: PipelineStageContext<Input>): Output | Promise<Output>;\n};\n\nexport type PipelineComposeOptions<Input, Output> = PipelineStageMetadata & {\n pipeline: Pipeline<Input, Output>;\n};\n\nexport type PipelineParallelOptions<\n Input,\n Branches extends Record<string, Pipeline<Input, unknown>>,\n> = PipelineStageMetadata & {\n branches: Branches;\n};\n\nexport type PipelineAgentOptions<\n Input,\n AgentOutput,\n Model extends CompletionModel,\n> = PipelineStageMetadata & {\n agent: Agent<AgentOutput, Model>;\n request(\n context: PipelineStageContext<Input>,\n ): PipelineAgentRequest<AgentOutput, Model> | Promise<PipelineAgentRequest<AgentOutput, Model>>;\n suspension: \"reject\";\n};\n\nexport type PipelineExtractOptions<\n Input,\n Extracted,\n Model extends CompletionModel,\n> = PipelineStageMetadata &\n Omit<ExtractOptions<Extracted, Model>, \"text\" | \"abortSignal\"> & {\n text(context: PipelineStageContext<Input>): string | Promise<string>;\n };\n\ntype InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: {\n executor: PipelineExecutor<Input, Output>;\n state: PipelineState;\n observability: PipelineOptions<Input>[\"observability\"];\n };\n};\n\n/** Immutable, typed Pipeline with explicit stage and execution boundaries. */\nexport class Pipeline<Input, Output = Input> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n readonly observability: PipelineOptions<Input>[\"observability\"];\n\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineState;\n\n constructor(options: PipelineOptions<Input, Output>);\n constructor(options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>) {\n if (isInternalPipelineOptions(options)) {\n this.executor = options[internalPipelineOptions].executor;\n this.state = options[internalPipelineOptions].state;\n this.observability = options[internalPipelineOptions].observability;\n } else {\n const id = normalizePipelineId(options.id);\n if (!isZodSchema(options.inputSchema)) {\n throw new TypeError(\"Pipeline inputSchema must be a Zod schema.\");\n }\n const inputSchema = options.inputSchema;\n this.executor = (async (input, context) => {\n throwIfAborted(context.abortSignal);\n return inputSchema.parseAsync(input) as Promise<Output>;\n }) as PipelineExecutor<Input, Output>;\n this.state = initialPipelineState({\n id,\n name: options.name,\n description: options.description,\n metadata: options.metadata,\n });\n this.observability = snapshotPipelineObservability(options.observability);\n }\n\n const graph = this.state.graph;\n this.id = graph.id;\n this.name = graph.name;\n this.description = graph.description;\n this.metadata = graph.metadata;\n }\n\n step<Next>(options: PipelineStepOptions<Awaited<Output>, Next>): Pipeline<Input, Awaited<Next>> {\n const next = appendStageNode(this.state, \"step\", options);\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return (await runNode(context, next.node, path, value, () =>\n options.run(stageContext(value, context)),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, next.state);\n }\n\n compose<Next>(\n options: PipelineComposeOptions<Awaited<Output>, Next>,\n ): Pipeline<Input, Awaited<Next>> {\n const boundary = appendStageNode(this.state, \"pipeline\", options, {\n defaultLabel: options.pipeline.name ?? options.pipeline.id,\n pipelineId: options.pipeline.id,\n });\n const state = appendComposedGraph(boundary.state, boundary.node, options.pipeline.graph());\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, boundary.node.id];\n return (await runNode(context, boundary.node, path, value, () =>\n options.pipeline.execute(value, context, path),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, state);\n }\n\n parallel<Branches extends Record<string, Pipeline<Awaited<Output>, unknown>>>(\n options: PipelineParallelOptions<Awaited<Output>, Branches>,\n ): Pipeline<Input, ParallelOutput<Branches>> {\n const branchEntries = normalizeParallelBranches(options.branches);\n if (branchEntries.length === 0) {\n throw new TypeError(\"Pipeline parallel branches must not be empty.\");\n }\n const parallel = appendStageNode(this.state, \"parallel\", options, {\n defaultLabel: `${branchEntries.length} parallel branches`,\n });\n let nextState = parallel.state;\n const branchNodes = new Map<string, PipelineGraphNode>();\n const terminalPaths: PipelineNodePath[] = [];\n for (const [key, branch] of branchEntries) {\n const appended = appendParallelBranch(nextState, parallel.node, key, branch.graph());\n nextState = appended.state;\n branchNodes.set(key, appended.node);\n terminalPaths.push(...appended.terminalPaths);\n }\n nextState = withTerminalPaths(nextState, terminalPaths);\n\n return this.derive<ParallelOutput<Branches>>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const parallelPath = [...pathPrefix, parallel.node.id];\n return runNode(context, parallel.node, parallelPath, value, async () => {\n const controller = new AbortController();\n const combined = combineAbortSignals(context.abortSignal, controller.signal);\n const branchContext = childContext(context, combined.signal);\n let firstError: unknown;\n const promises = branchEntries.map(async ([key, branch]) => {\n const node = branchNodes.get(key) as PipelineGraphNode;\n const path = [...parallelPath, node.id];\n try {\n const output = await runNode(branchContext, node, path, value, () =>\n branch.execute(value, branchContext, path),\n );\n return [key, output] as const;\n } catch (error) {\n if (firstError === undefined) firstError = error;\n if (!controller.signal.aborted) controller.abort(error);\n throw error;\n }\n });\n\n const settled = await Promise.allSettled(promises);\n combined.dispose();\n if (context.abortSignal?.aborted === true) {\n throw pipelineAbortError(context.abortSignal);\n }\n if (firstError !== undefined) throw firstError;\n return Object.fromEntries(\n settled.map(\n (result) => (result as PromiseFulfilledResult<readonly [string, unknown]>).value,\n ),\n ) as ParallelOutput<Branches>;\n });\n }, nextState);\n }\n\n agent<AgentOutput, Model extends CompletionModel>(\n options: PipelineAgentOptions<Awaited<Output>, AgentOutput, Model>,\n ): Pipeline<Input, AgentOutput> {\n if (options.suspension !== \"reject\") {\n throw new TypeError('Pipeline Agent stages require suspension: \"reject\".');\n }\n const next = appendStageNode(this.state, \"agent\", options, {\n defaultLabel: options.agent.name ?? options.agent.id,\n agentId: options.agent.id,\n agentName: options.agent.name,\n });\n return this.derive<AgentOutput>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async (stageTrace) => {\n const request = await options.request(stageContext(value, context));\n const response = await options.agent.generate({\n ...request,\n trace: withPipelineParentTrace(\n request.trace,\n stageTrace,\n options.agent.observability?.primaryTrace,\n ),\n abortSignal: context.abortSignal,\n } as AgentRunOptions<AgentOutput, RawResponseOf<Model>, CompletionModelControlsOf<Model>>);\n if (response.type === \"interaction\") {\n throw new PipelineAgentSuspensionError(response);\n }\n if (response.type === \"blocked\") {\n throw new AgentRunBlockedError(response);\n }\n return response.output;\n });\n }, next.state);\n }\n\n extract<Extracted, Model extends CompletionModel>(\n options: PipelineExtractOptions<Awaited<Output>, Extracted, Model>,\n ): Pipeline<Input, Extracted> {\n const next = appendStageNode(this.state, \"extractor\", options);\n return this.derive<Extracted>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async () => {\n const text = await options.text(stageContext(value, context));\n const result = await extractData({\n model: options.model,\n text,\n outputSchema: options.outputSchema,\n instructions: options.instructions,\n retries: options.retries,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n return result.output;\n });\n }, next.state);\n }\n\n async run(options: PipelineRunOptions<Input>): Promise<PipelineRunResult<Output>> {\n const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());\n const startedAt = Date.now();\n const observability = await startPipelineRunObservers(\n this.observability?.observers ?? {},\n {\n runId,\n pipelineId: this.id,\n pipelineName: this.name,\n pipelineDescription: this.description,\n pipelineMetadata: this.metadata,\n runMetadata: options.metadata,\n trace: options.trace,\n input: options.input,\n },\n {\n primaryTrace: this.observability?.primaryTrace,\n errorPolicy: this.observability?.errorPolicy ?? \"ignore\",\n },\n );\n const context: PipelineRunContext = {\n runId,\n pipelineId: this.id,\n runMetadata: options.metadata,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError === true,\n observability,\n };\n try {\n throwIfAborted(context.abortSignal);\n const output = await this.execute(options.input, context, []);\n throwIfAborted(context.abortSignal);\n await observability.end({\n runId,\n pipelineId: this.id,\n output,\n durationMs: Date.now() - startedAt,\n });\n return observability.trace === undefined\n ? { runId, output }\n : { runId, output, trace: observability.trace };\n } catch (error) {\n await observability.error({\n runId,\n pipelineId: this.id,\n status: context.abortSignal?.aborted === true ? \"cancelled\" : \"failed\",\n error,\n durationMs: Date.now() - startedAt,\n });\n throw error;\n }\n }\n\n async runBatch(options: PipelineBatchOptions<Input>): Promise<Array<PipelineBatchItem<Output>>> {\n throwIfAborted(options.abortSignal);\n return mapWithConcurrency([...options.inputs], options.concurrency, async (input) => {\n const runId = globalThis.crypto.randomUUID();\n try {\n const result = await this.run({\n input,\n runId,\n metadata: options.metadata,\n trace: options.trace,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError,\n });\n return { status: \"completed\", ...result } as const;\n } catch (error) {\n if (options.abortSignal?.aborted === true) {\n throw pipelineAbortError(options.abortSignal);\n }\n return { status: \"failed\", runId, error } as const;\n }\n });\n }\n\n graph(): PipelineGraph {\n return cloneGraph(withOutputNode(this.state));\n }\n\n private derive<DerivedOutput>(\n executor: PipelineExecutor<Input, DerivedOutput>,\n state: PipelineState,\n ): Pipeline<Input, DerivedOutput> {\n return createDerivedPipeline(executor, state, this.observability);\n }\n\n private async execute(\n input: Input,\n context: PipelineRunContext,\n pathPrefix: PipelineNodePath,\n ): Promise<Awaited<Output>> {\n throwIfAborted(context.abortSignal);\n return (await this.executor(input, context, pathPrefix)) as Awaited<Output>;\n }\n}\n\nfunction createDerivedPipeline<Input, Output>(\n executor: PipelineExecutor<Input, Output>,\n state: PipelineState,\n observability: PipelineOptions<Input>[\"observability\"],\n): Pipeline<Input, Output> {\n const options: InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: { executor, state, observability },\n };\n return new Pipeline<Input, Output>(options as unknown as PipelineOptions<Input, Output>);\n}\n\nfunction withPipelineParentTrace(\n trace: AgentTraceOptions | undefined,\n parent: PipelineTraceInfo | undefined,\n agentPrimaryTrace: string | undefined,\n): AgentTraceOptions | undefined {\n if (parent?.traceId === undefined) return trace;\n if (parent.observer !== agentPrimaryTrace) return trace;\n if (trace?.traceId !== undefined && trace.traceId !== parent.traceId) return trace;\n return {\n ...trace,\n traceId: parent.traceId,\n ...(trace?.parentObservationId !== undefined || parent.observationId === undefined\n ? {}\n : { parentObservationId: parent.observationId }),\n };\n}\n\nfunction isInternalPipelineOptions<Input, Output>(\n options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>,\n): options is InternalPipelineOptions<Input, Output> {\n return internalPipelineOptions in options;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction normalizePipelineId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Pipeline id must be a string.\");\n }\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline id must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeRunId(runId: string): string {\n if (typeof runId !== \"string\") {\n throw new TypeError(\"Pipeline runId must be a string.\");\n }\n const normalized = runId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline runId must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeParallelBranches<Branch>(\n branches: Readonly<Record<string, Branch>>,\n): Array<readonly [string, Branch]> {\n const entries: Array<readonly [string, Branch]> = [];\n const ids = new Set<string>();\n for (const key of Object.keys(branches)) {\n const pipeline = branches[key] as Branch;\n const id = key.trim();\n if (id.length === 0) {\n throw new TypeError(\"Pipeline parallel branch id must be a non-empty string.\");\n }\n if (ids.has(id)) {\n throw new TypeError(`Pipeline parallel branch id \"${id}\" is already registered.`);\n }\n ids.add(id);\n if (id !== key) {\n throw new TypeError(\"Pipeline parallel branch ids must not contain surrounding whitespace.\");\n }\n entries.push([id, pipeline]);\n }\n return entries;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/pipeline/pipeline.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent } from \"../agent/agent\";\nimport { AgentRunBlockedError } from \"../agent/errors\";\nimport type { AgentInput, AgentRunOptions, AgentRunSettings } from \"../agent/run-types\";\nimport type { CompletionModel, CompletionModelControlsOf, JsonObject } from \"../completion\";\nimport { type ExtractOptions, extract as extractData } from \"../extractor\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { AgentTraceOptions } from \"../observability\";\nimport { PipelineAgentSuspensionError } from \"./errors\";\nimport {\n appendComposedGraph,\n appendParallelBranch,\n appendStageNode,\n cloneGraph,\n initialPipelineState,\n withOutputNode,\n withTerminalPaths,\n} from \"./graph\";\nimport { snapshotPipelineObservability, startPipelineRunObservers } from \"./observability\";\nimport {\n childContext,\n combineAbortSignals,\n pipelineAbortError,\n runNode,\n stageContext,\n} from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBatchItem,\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineGraphNode,\n PipelineNodePath,\n PipelineOptions,\n PipelineRunContext,\n PipelineRunOptions,\n PipelineRunResult,\n PipelineStageContext,\n PipelineStageMetadata,\n PipelineState,\n PipelineTraceInfo,\n} from \"./types\";\n\nconst internalPipelineOptions = Symbol(\"internal-pipeline-options\");\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\ntype PipelineAgentRequest<Output, Model extends CompletionModel> = AgentInput &\n Omit<\n AgentRunSettings<Output, RawResponseOf<Model>, CompletionModelControlsOf<Model>>,\n \"abortSignal\"\n >;\n\nexport type PipelineStepOptions<Input, Output> = PipelineStageMetadata & {\n run(context: PipelineStageContext<Input>): Output | Promise<Output>;\n};\n\nexport type PipelineComposeOptions<Input, Output> = PipelineStageMetadata & {\n pipeline: Pipeline<Input, Output>;\n};\n\nexport type PipelineParallelOptions<\n Input,\n Branches extends Record<string, Pipeline<Input, unknown>>,\n> = PipelineStageMetadata & {\n branches: Branches;\n};\n\nexport type PipelineAgentOptions<\n Input,\n AgentOutput,\n Model extends CompletionModel,\n> = PipelineStageMetadata & {\n agent: Agent<AgentOutput, Model>;\n request(\n context: PipelineStageContext<Input>,\n ): PipelineAgentRequest<AgentOutput, Model> | Promise<PipelineAgentRequest<AgentOutput, Model>>;\n suspension: \"reject\";\n};\n\nexport type PipelineExtractOptions<\n Input,\n Extracted,\n Model extends CompletionModel,\n> = PipelineStageMetadata &\n Omit<ExtractOptions<Extracted, Model>, \"text\" | \"abortSignal\"> & {\n text(context: PipelineStageContext<Input>): string | Promise<string>;\n };\n\ntype InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: {\n executor: PipelineExecutor<Input, Output>;\n state: PipelineState;\n observability: PipelineOptions<Input>[\"observability\"];\n };\n};\n\n/** Immutable, typed Pipeline with explicit stage and execution boundaries. */\nexport class Pipeline<Input, Output = Input> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n readonly observability: PipelineOptions<Input>[\"observability\"];\n\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineState;\n\n constructor(options: PipelineOptions<Input, Output>);\n constructor(options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>) {\n if (isInternalPipelineOptions(options)) {\n this.executor = options[internalPipelineOptions].executor;\n this.state = options[internalPipelineOptions].state;\n this.observability = options[internalPipelineOptions].observability;\n } else {\n const id = normalizePipelineId(options.id);\n if (!isZodSchema(options.inputSchema)) {\n throw new TypeError(\"Pipeline inputSchema must be a Zod schema.\");\n }\n const inputSchema = options.inputSchema;\n this.executor = (async (input, context) => {\n throwIfAborted(context.abortSignal);\n return inputSchema.parseAsync(input) as Promise<Output>;\n }) as PipelineExecutor<Input, Output>;\n this.state = initialPipelineState({\n id,\n name: options.name,\n description: options.description,\n metadata: options.metadata,\n });\n this.observability = snapshotPipelineObservability(options.observability);\n }\n\n const graph = this.state.graph;\n this.id = graph.id;\n this.name = graph.name;\n this.description = graph.description;\n this.metadata = graph.metadata;\n }\n\n step<Next>(options: PipelineStepOptions<Awaited<Output>, Next>): Pipeline<Input, Awaited<Next>> {\n const next = appendStageNode(this.state, \"step\", options);\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return (await runNode(context, next.node, path, value, () =>\n options.run(stageContext(value, context)),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, next.state);\n }\n\n compose<Next>(\n options: PipelineComposeOptions<Awaited<Output>, Next>,\n ): Pipeline<Input, Awaited<Next>> {\n const boundary = appendStageNode(this.state, \"pipeline\", options, {\n defaultLabel: options.pipeline.name ?? options.pipeline.id,\n pipelineId: options.pipeline.id,\n });\n const state = appendComposedGraph(boundary.state, boundary.node, options.pipeline.graph());\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, boundary.node.id];\n return (await runNode(context, boundary.node, path, value, () =>\n options.pipeline.execute(value, context, path),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, state);\n }\n\n parallel<Branches extends Record<string, Pipeline<Awaited<Output>, unknown>>>(\n options: PipelineParallelOptions<Awaited<Output>, Branches>,\n ): Pipeline<Input, ParallelOutput<Branches>> {\n const branchEntries = normalizeParallelBranches(options.branches);\n if (branchEntries.length === 0) {\n throw new TypeError(\"Pipeline parallel branches must not be empty.\");\n }\n const parallel = appendStageNode(this.state, \"parallel\", options, {\n defaultLabel: `${branchEntries.length} parallel branches`,\n });\n let nextState = parallel.state;\n const branchNodes = new Map<string, PipelineGraphNode>();\n const terminalPaths: PipelineNodePath[] = [];\n for (const [key, branch] of branchEntries) {\n const appended = appendParallelBranch(nextState, parallel.node, key, branch.graph());\n nextState = appended.state;\n branchNodes.set(key, appended.node);\n terminalPaths.push(...appended.terminalPaths);\n }\n nextState = withTerminalPaths(nextState, terminalPaths);\n\n return this.derive<ParallelOutput<Branches>>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const parallelPath = [...pathPrefix, parallel.node.id];\n return runNode(context, parallel.node, parallelPath, value, async () => {\n const controller = new AbortController();\n const combined = combineAbortSignals(context.abortSignal, controller.signal);\n const branchContext = childContext(context, combined.signal);\n let firstError: unknown;\n const promises = branchEntries.map(async ([key, branch]) => {\n const node = branchNodes.get(key) as PipelineGraphNode;\n const path = [...parallelPath, node.id];\n try {\n const output = await runNode(branchContext, node, path, value, () =>\n branch.execute(value, branchContext, path),\n );\n return [key, output] as const;\n } catch (error) {\n if (firstError === undefined) firstError = error;\n if (!controller.signal.aborted) controller.abort(error);\n throw error;\n }\n });\n\n const settled = await Promise.allSettled(promises);\n combined.dispose();\n if (context.abortSignal?.aborted === true) {\n throw pipelineAbortError(context.abortSignal);\n }\n if (firstError !== undefined) throw firstError;\n return Object.fromEntries(\n settled.map(\n (result) => (result as PromiseFulfilledResult<readonly [string, unknown]>).value,\n ),\n ) as ParallelOutput<Branches>;\n });\n }, nextState);\n }\n\n agent<AgentOutput, Model extends CompletionModel>(\n options: PipelineAgentOptions<Awaited<Output>, AgentOutput, Model>,\n ): Pipeline<Input, AgentOutput> {\n if (options.suspension !== \"reject\") {\n throw new TypeError('Pipeline Agent stages require suspension: \"reject\".');\n }\n const next = appendStageNode(this.state, \"agent\", options, {\n defaultLabel: options.agent.name ?? options.agent.id,\n agentId: options.agent.id,\n agentName: options.agent.name,\n });\n return this.derive<AgentOutput>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async (stageTrace) => {\n const request = await options.request(stageContext(value, context));\n const response = await options.agent.generate({\n ...request,\n trace: withPipelineParentTrace(\n request.trace,\n stageTrace,\n options.agent.observability?.primaryTrace,\n ),\n abortSignal: context.abortSignal,\n } as AgentRunOptions<AgentOutput, RawResponseOf<Model>, CompletionModelControlsOf<Model>>);\n if (response.type === \"interaction\") {\n throw new PipelineAgentSuspensionError(response);\n }\n if (response.type === \"blocked\") {\n throw new AgentRunBlockedError(response);\n }\n return response.output;\n });\n }, next.state);\n }\n\n extract<Extracted, Model extends CompletionModel>(\n options: PipelineExtractOptions<Awaited<Output>, Extracted, Model>,\n ): Pipeline<Input, Extracted> {\n const next = appendStageNode(this.state, \"extractor\", options);\n return this.derive<Extracted>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async () => {\n const text = await options.text(stageContext(value, context));\n const result = await extractData({\n model: options.model,\n text,\n outputSchema: options.outputSchema,\n instructions: options.instructions,\n retries: options.retries,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n return result.output;\n });\n }, next.state);\n }\n\n async run(options: PipelineRunOptions<Input>): Promise<PipelineRunResult<Output>> {\n const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());\n const startedAt = Date.now();\n const observability = await startPipelineRunObservers(\n this.observability?.observers ?? {},\n {\n runId,\n pipelineId: this.id,\n pipelineName: this.name,\n pipelineDescription: this.description,\n pipelineMetadata: this.metadata,\n runMetadata: options.metadata,\n trace: options.trace,\n input: options.input,\n },\n {\n primaryTrace: this.observability?.primaryTrace,\n errorPolicy: this.observability?.errorPolicy ?? \"ignore\",\n },\n );\n const context: PipelineRunContext = {\n runId,\n pipelineId: this.id,\n runMetadata: options.metadata,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError === true,\n observability,\n };\n try {\n throwIfAborted(context.abortSignal);\n const output = await this.execute(options.input, context, []);\n throwIfAborted(context.abortSignal);\n await observability.end({\n runId,\n pipelineId: this.id,\n output,\n durationMs: Date.now() - startedAt,\n });\n return observability.trace === undefined\n ? { runId, output }\n : { runId, output, trace: observability.trace };\n } catch (error) {\n await observability.error({\n runId,\n pipelineId: this.id,\n status: context.abortSignal?.aborted === true ? \"cancelled\" : \"failed\",\n error,\n durationMs: Date.now() - startedAt,\n });\n throw error;\n }\n }\n\n async runBatch(options: PipelineBatchOptions<Input>): Promise<Array<PipelineBatchItem<Output>>> {\n throwIfAborted(options.abortSignal);\n return mapWithConcurrency([...options.inputs], options.concurrency, async (input) => {\n const runId = globalThis.crypto.randomUUID();\n try {\n const result = await this.run({\n input,\n runId,\n metadata: options.metadata,\n trace: options.trace,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError,\n });\n return { status: \"completed\", ...result } as const;\n } catch (error) {\n if (options.abortSignal?.aborted === true) {\n throw pipelineAbortError(options.abortSignal);\n }\n return { status: \"failed\", runId, error } as const;\n }\n });\n }\n\n graph(): PipelineGraph {\n return cloneGraph(withOutputNode(this.state));\n }\n\n private derive<DerivedOutput>(\n executor: PipelineExecutor<Input, DerivedOutput>,\n state: PipelineState,\n ): Pipeline<Input, DerivedOutput> {\n return createDerivedPipeline(executor, state, this.observability);\n }\n\n private async execute(\n input: Input,\n context: PipelineRunContext,\n pathPrefix: PipelineNodePath,\n ): Promise<Awaited<Output>> {\n throwIfAborted(context.abortSignal);\n return (await this.executor(input, context, pathPrefix)) as Awaited<Output>;\n }\n}\n\nfunction createDerivedPipeline<Input, Output>(\n executor: PipelineExecutor<Input, Output>,\n state: PipelineState,\n observability: PipelineOptions<Input>[\"observability\"],\n): Pipeline<Input, Output> {\n const options: InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: { executor, state, observability },\n };\n return new Pipeline<Input, Output>(options as unknown as PipelineOptions<Input, Output>);\n}\n\nfunction withPipelineParentTrace(\n trace: AgentTraceOptions | undefined,\n parent: PipelineTraceInfo | undefined,\n agentPrimaryTrace: string | undefined,\n): AgentTraceOptions | undefined {\n if (parent?.traceId === undefined) return trace;\n if (parent.observer !== agentPrimaryTrace) return trace;\n if (trace?.traceId !== undefined && trace.traceId !== parent.traceId) return trace;\n const resolved = { ...trace, traceId: parent.traceId };\n if (trace?.parentObservationId === undefined && parent.observationId !== undefined) {\n resolved.parentObservationId = parent.observationId;\n }\n return resolved;\n}\n\nfunction isInternalPipelineOptions<Input, Output>(\n options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>,\n): options is InternalPipelineOptions<Input, Output> {\n return internalPipelineOptions in options;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction normalizePipelineId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Pipeline id must be a string.\");\n }\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline id must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeRunId(runId: string): string {\n if (typeof runId !== \"string\") {\n throw new TypeError(\"Pipeline runId must be a string.\");\n }\n const normalized = runId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline runId must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeParallelBranches<Branch>(\n branches: Readonly<Record<string, Branch>>,\n): Array<readonly [string, Branch]> {\n const entries: Array<readonly [string, Branch]> = [];\n const ids = new Set<string>();\n for (const key of Object.keys(branches)) {\n const pipeline = branches[key] as Branch;\n const id = key.trim();\n if (id.length === 0) {\n throw new TypeError(\"Pipeline parallel branch id must be a non-empty string.\");\n }\n if (ids.has(id)) {\n throw new TypeError(`Pipeline parallel branch id \"${id}\" is already registered.`);\n }\n ids.add(id);\n if (id !== key) {\n throw new TypeError(\"Pipeline parallel branch ids must not contain surrounding whitespace.\");\n }\n entries.push([id, pipeline]);\n }\n return entries;\n}\n"],"mappings":"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","names":[]}
@@ -45,6 +45,7 @@ function resolveModelContextLimits(modelId, catalog, override) {
45
45
  return override ?? catalog[modelId];
46
46
  }
47
47
  var Usage = {
48
+ /** Returns an all-zero usage value. */
48
49
  empty() {
49
50
  return {
50
51
  inputTokens: 0,
@@ -54,6 +55,10 @@ var Usage = {
54
55
  cacheCreationInputTokens: 0
55
56
  };
56
57
  },
58
+ /**
59
+ * Sums two usage values bucket by bucket. `details` are merged only when
60
+ * both sides carry them; if either side omits them, the result omits them.
61
+ */
57
62
  add(left, right) {
58
63
  const result = {
59
64
  inputTokens: left.inputTokens + right.inputTokens,
@@ -68,6 +73,7 @@ var Usage = {
68
73
  }
69
74
  return result;
70
75
  },
76
+ /** Returns true when every bucket, including `details`, is zero. */
71
77
  isEmpty(usage) {
72
78
  return isEmptyUsage(usage) && (usage.details === void 0 || Object.values(usage.details).every((value) => value === 0));
73
79
  }
@@ -291,4 +297,4 @@ export {
291
297
  assertCompletionControlsSupported,
292
298
  textFromAssistantContent
293
299
  };
294
- //# sourceMappingURL=chunk-IDNL6IH4.js.map
300
+ //# sourceMappingURL=chunk-HJ6KTQTZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/completion/types.ts"],"sourcesContent":["import type { ModelCallOptions } from \"../model-call-options\";\nimport { isJsonValue } from \"./json\";\n\nexport type JsonPrimitive = string | number | boolean | null;\n/** Any JSON-compatible value: primitives, objects, or readonly arrays of JSON values. */\nexport type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];\nexport type JsonObject = { [key: string]: JsonValue };\n\n/** A retrievable text document passed to a completion as grounding context. */\nexport type Document = {\n id: string;\n text: string;\n /** String metadata rendered as a `<metadata ... />` header above the text when documents are serialized into prompts. */\n additionalProps?: Record<string, string>;\n};\n\n/**\n * A text segment, optionally carrying a provider reasoning signature.\n */\nexport type TextPart = Readonly<{\n type: \"text\";\n text: string;\n /** Provider signature preserved so reasoning can be replayed on later turns. */\n signature?: string;\n}>;\n\n/** Image input fidelity hint forwarded to providers that support it. */\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\n/**\n * File payload for image/file parts: a remote URL, base64 data, or literal text\n * interpreted as a document.\n */\nexport type FileData =\n | Readonly<{ type: \"url\"; url: string }>\n | Readonly<{ type: \"data\"; data: string }>\n | Readonly<{ type: \"text\"; text: string }>;\n\n/** Image input with an optional media type override and detail hint. */\nexport type ImagePart = Readonly<{\n type: \"image\";\n image: Exclude<FileData, Readonly<{ type: \"text\"; text: string }>>;\n mediaType?: string;\n detail?: ImageDetail;\n}>;\n\n/** Document/file input part; non-text data is rejected by models without `documentInput`. */\nexport type FilePart = Readonly<{\n type: \"file\";\n data: FileData;\n mediaType: string;\n filename?: string;\n}>;\n\n/** Model reasoning content, replayable across turns to preserve thinking state. */\nexport type ReasoningPart = Readonly<{\n type: \"reasoning\";\n text: string;\n id?: string;\n details?: readonly ReasoningDetail[];\n}>;\n\n/**\n * Reasoning detail variants:\n *\n * - `text` / `summary`: displayable reasoning text\n * - `encrypted` / `redacted`: opaque payloads that can only be echoed back to\n * the provider; their content is not readable by the application\n */\nexport type ReasoningDetail =\n | Readonly<{\n type: \"text\";\n text: string;\n signature?: string;\n }>\n | Readonly<{\n type: \"summary\";\n text: string;\n }>\n | Readonly<{\n type: \"encrypted\";\n data: string;\n }>\n | Readonly<{\n type: \"redacted\";\n data: string;\n }>;\n\nexport type ReasoningContentType = ReasoningDetail[\"type\"];\n\n/** A tool call requested by the model; `signature` preserves provider replay state. */\nexport type ToolCallPart = Readonly<{\n type: \"tool-call\";\n toolCallId: string;\n callId?: string;\n toolName: string;\n input: JsonValue;\n signature?: string;\n}>;\n\n/** The content variants allowed inside a tool result payload. */\nexport type ToolResultContentPart = TextPart | FilePart;\n\n/**\n * Outcome of one tool execution, as recorded in tool messages:\n *\n * - `text` / `json`: successful result as plain text or JSON\n * - `content`: successful result as mixed content parts\n * - `execution-denied`: the call was blocked (e.g. by a required approval)\n * - `error-text` / `error-json`: failure surfaced to the model so the run can\n * continue instead of aborting\n */\nexport type ToolResultOutput =\n | Readonly<{ type: \"text\"; value: string }>\n | Readonly<{ type: \"json\"; value: JsonValue }>\n | Readonly<{ type: \"content\"; value: readonly ToolResultContentPart[] }>\n | Readonly<{ type: \"execution-denied\"; reason?: string }>\n | Readonly<{ type: \"error-text\"; value: string }>\n | Readonly<{ type: \"error-json\"; value: JsonValue }>;\n\n/** Tool result reported back to the model, matched to its call via `toolCallId`. */\nexport type ToolResultPart = Readonly<{\n type: \"tool-result\";\n toolCallId: string;\n callId?: string;\n toolName: string;\n output: ToolResultOutput;\n}>;\n\n/** Human decision on a tool call that required approval before execution. */\nexport type ToolApprovalResponsePart = Readonly<{\n type: \"tool-approval-response\";\n interactionId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n approved: boolean;\n reason?: string;\n}>;\n\n/** Answer to one question asked by a tool suspended on a human interaction. */\nexport type ToolQuestionAnswer = Readonly<{\n questionId: string;\n value: string;\n}>;\n\n/** Answers to tool questions, delivered back through the suspended run. */\nexport type ToolQuestionResponsePart = Readonly<{\n type: \"tool-question-response\";\n interactionId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n answers: readonly ToolQuestionAnswer[];\n}>;\n\n/** A tool or human-interaction response delivered inside a `role: \"tool\"` message. */\nexport type ToolInteractionResponsePart = ToolApprovalResponsePart | ToolQuestionResponsePart;\n\n/** Content parts allowed in user messages. */\nexport type UserContentPart = TextPart | ImagePart | FilePart;\n/** Content parts allowed in assistant messages, including replayed reasoning and tool calls. */\nexport type AssistantContentPart = TextPart | ImagePart | FilePart | ReasoningPart | ToolCallPart;\n\nexport type SystemMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"system\";\n content: string;\n metadata?: Metadata;\n}>;\n\nexport type UserMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"user\";\n content: string | readonly UserContentPart[];\n metadata?: Metadata;\n}>;\n\nexport type AssistantMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"assistant\";\n id?: string;\n content: string | readonly AssistantContentPart[];\n metadata?: Metadata;\n}>;\n\nexport type ToolMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"tool\";\n content: readonly (ToolResultPart | ToolInteractionResponsePart)[];\n metadata?: Metadata;\n}>;\n\n/**\n * A conversation message from the system, user, assistant, or tool role.\n *\n * Framework-generated metadata (provider, model, usage of the generation that\n * produced an assistant message) is stored under the `anvia` key of `metadata`;\n * read it back with {@link getAssistantGenerationMetadata}.\n */\nexport type Message<Metadata extends JsonObject = JsonObject> =\n | SystemMessage<Metadata>\n | UserMessage<Metadata>\n | AssistantMessage<Metadata>\n | ToolMessage<Metadata>;\n\n/** Joins the human-readable text of a reasoning part or its details. */\nexport function reasoningDisplayText(\n reasoning: ReasoningPart | readonly ReasoningDetail[],\n): string {\n const details = \"type\" in reasoning ? reasoning.details : reasoning;\n if (details === undefined) {\n return \"type\" in reasoning ? reasoning.text : \"\";\n }\n return details\n .flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n })\n .join(\"\");\n}\n\n/**\n * How the model may call tools: freely, mandatorily, never, or a named function.\n * Requires the model's `toolChoice` capability.\n */\nexport type ToolChoice =\n | \"auto\"\n | \"required\"\n | \"none\"\n | {\n type: \"function\";\n name: string;\n };\n\n/** JSON Schema-shaped tool description sent to the model (a local tool's public face). */\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: JsonObject;\n};\n\n/**\n * A tool executed by the model provider rather than by Anvia's local tool runtime.\n *\n * Provider packages expose typed factories for these values. Application code can\n * pass them through the same high-level `tools` APIs used for local tools.\n */\nexport type ProviderTool = {\n kind: \"provider\";\n provider: string;\n name: string;\n configuration?: JsonObject;\n};\n\nexport type CompletionTool = ToolDefinition | ProviderTool;\n\n/** Narrows an unknown value to a well-formed {@link ProviderTool}. */\nexport function isProviderTool(value: unknown): value is ProviderTool {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const candidate = value as Partial<ProviderTool>;\n return (\n candidate.kind === \"provider\" &&\n typeof candidate.provider === \"string\" &&\n candidate.provider.trim().length > 0 &&\n typeof candidate.name === \"string\" &&\n candidate.name.trim().length > 0 &&\n (candidate.configuration === undefined ||\n (typeof candidate.configuration === \"object\" &&\n candidate.configuration !== null &&\n !Array.isArray(candidate.configuration) &&\n isJsonValue(candidate.configuration)))\n );\n}\n\n/** A grounding source (e.g. web result) returned by the provider, with optional text offsets. */\nexport type CompletionSource = {\n type: \"url\";\n url: string;\n title?: string;\n id?: string;\n startIndex?: number;\n endIndex?: number;\n};\n\n/** A tool call executed on the provider side, surfaced for observability. */\nexport type ProviderToolCall = {\n id: string;\n name: string;\n status?: string;\n details?: JsonObject;\n};\n\n/**\n * Provider-normalized, mutually exclusive usage buckets.\n *\n * Every token should appear in exactly one non-total bucket. `total` is the\n * only aggregate key and should equal the sum of the other buckets.\n */\nexport type UsageDetails = Record<string, number>;\n\n/**\n * Token usage for one or more generations.\n *\n * `cachedInputTokens` counts input tokens served from the provider's prompt\n * cache; `cacheCreationInputTokens` counts input tokens billed for writing to\n * that cache. Both are subsets of `inputTokens`.\n */\nexport type Usage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cacheCreationInputTokens: number;\n details?: UsageDetails;\n};\n\n/** Model context window bounds; unset input/output caps fall back to the window. */\nexport type ModelContextLimits = {\n contextWindow: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n};\n\n/** Identifies a model together with its context limits. */\nexport type CompletionModelInfo = {\n modelId: string;\n context: ModelContextLimits;\n};\n\n/** Snapshot of how much of a model's context window a request consumed. */\nexport type ContextUsage = {\n model: CompletionModelInfo;\n usedTokens: number;\n remainingTokens: number;\n usedPercent: number;\n remainingPercent: number;\n};\n\n/** Computes context usage, or undefined when the model or usage data is unusable. */\nexport function calculateContextUsage(\n usage: Usage,\n model: CompletionModelInfo | undefined,\n): ContextUsage | undefined {\n if (\n model === undefined ||\n !Number.isFinite(usage.inputTokens) ||\n usage.inputTokens <= 0 ||\n !Number.isFinite(model.context.contextWindow) ||\n model.context.contextWindow <= 0\n ) {\n return undefined;\n }\n\n const usedTokens = Math.max(0, usage.inputTokens);\n const remainingTokens = Math.max(0, model.context.contextWindow - usedTokens);\n const usedPercent = Math.min(100, (usedTokens / model.context.contextWindow) * 100);\n return {\n model,\n usedTokens,\n remainingTokens,\n usedPercent,\n remainingPercent: 100 - usedPercent,\n };\n}\n\n/** Attaches context usage to a response when model limits are known. */\nexport function withContextUsage<RawResponse>(\n response: CompletionResponse<RawResponse>,\n model: CompletionModelInfo | undefined,\n): CompletionResponse<RawResponse> {\n const contextUsage = calculateContextUsage(response.usage, model);\n return contextUsage === undefined ? response : { ...response, contextUsage };\n}\n\n/** Resolves a model's context limits: explicit override wins over catalog lookup. */\nexport function resolveModelContextLimits(\n modelId: string,\n catalog: Readonly<Record<string, ModelContextLimits>>,\n override?: ModelContextLimits,\n): ModelContextLimits | undefined {\n return override ?? catalog[modelId];\n}\n\n/** Provider/model/usage metadata embedded in assistant message metadata by the runtime. */\nexport type AssistantGenerationMetadata = {\n provider: string;\n modelId: string;\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n};\n\n/**\n * Helpers for constructing and combining token usage.\n */\nexport const Usage = {\n /** Returns an all-zero usage value. */\n empty(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0,\n };\n },\n /**\n * Sums two usage values bucket by bucket. `details` are merged only when\n * both sides carry them; if either side omits them, the result omits them.\n */\n add(left: Usage, right: Usage): Usage {\n const result: Usage = {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens,\n };\n const details = addUsageDetails(left, right);\n if (details !== undefined) {\n result.details = details;\n }\n return result;\n },\n /** Returns true when every bucket, including `details`, is zero. */\n isEmpty(usage: Usage): boolean {\n return (\n isEmptyUsage(usage) &&\n (usage.details === undefined || Object.values(usage.details).every((value) => value === 0))\n );\n },\n};\n\nfunction addUsageDetails(left: Usage, right: Usage): UsageDetails | undefined {\n if (isEmptyUsage(left) && left.details === undefined) {\n return right.details === undefined ? undefined : { ...right.details };\n }\n if (isEmptyUsage(right) && right.details === undefined) {\n return left.details === undefined ? undefined : { ...left.details };\n }\n if (left.details === undefined || right.details === undefined) {\n return undefined;\n }\n const details: UsageDetails = { ...left.details };\n for (const [key, value] of Object.entries(right.details)) {\n details[key] = (details[key] ?? 0) + value;\n }\n return details;\n}\n\nfunction isEmptyUsage(usage: Usage): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n\n/**\n * Reads the generation metadata the runtime embeds in assistant messages, when\n * present and structurally valid.\n */\nexport function getAssistantGenerationMetadata(\n message: Message,\n): AssistantGenerationMetadata | undefined {\n if (message.role !== \"assistant\" || !isJsonObjectValue(message.metadata)) {\n return undefined;\n }\n const frameworkMetadata = message.metadata.anvia;\n if (!isJsonObjectValue(frameworkMetadata)) {\n return undefined;\n }\n const generation = frameworkMetadata.generation;\n if (\n !isJsonObjectValue(generation) ||\n typeof generation.provider !== \"string\" ||\n typeof generation.modelId !== \"string\" ||\n !isUsageValue(generation.usage)\n ) {\n return undefined;\n }\n let usage: Usage = { ...generation.usage };\n if (generation.usage.details !== undefined) {\n usage = { ...usage, details: { ...generation.usage.details } };\n }\n const metadata: AssistantGenerationMetadata = {\n provider: generation.provider,\n modelId: generation.modelId,\n usage,\n };\n if (isCompletionFinishReason(generation.finishReason)) {\n metadata.finishReason = generation.finishReason;\n }\n if (typeof generation.providerFinishReason === \"string\") {\n metadata.providerFinishReason = generation.providerFinishReason;\n }\n if (isContextUsageValue(generation.contextUsage)) {\n metadata.contextUsage = {\n ...generation.contextUsage,\n model: {\n ...generation.contextUsage.model,\n context: { ...generation.contextUsage.model.context },\n },\n };\n }\n if (isCompletionSourceArray(generation.sources)) {\n metadata.sources = generation.sources.map((source) => ({ ...source }));\n }\n if (isProviderToolCallArray(generation.providerToolCalls)) {\n metadata.providerToolCalls = generation.providerToolCalls.map((toolCall) => {\n let copy: ProviderToolCall = { ...toolCall };\n if (toolCall.details !== undefined) {\n copy = { ...copy, details: { ...toolCall.details } };\n }\n return copy;\n });\n }\n return metadata;\n}\n\nfunction isJsonObjectValue(value: JsonValue | undefined): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isContextUsageValue(value: JsonValue | undefined): value is JsonObject & ContextUsage {\n if (!isJsonObjectValue(value) || !isJsonObjectValue(value.model)) {\n return false;\n }\n const context = value.model.context;\n if (\n typeof value.model.modelId === \"string\" &&\n isJsonObjectValue(context) &&\n isPositiveFiniteNumber(context.contextWindow) &&\n isOptionalPositiveFiniteNumber(context.maxInputTokens) &&\n isOptionalPositiveFiniteNumber(context.maxOutputTokens) &&\n isNonnegativeFiniteNumber(value.usedTokens) &&\n isNonnegativeFiniteNumber(value.remainingTokens) &&\n isPercentage(value.usedPercent) &&\n isPercentage(value.remainingPercent)\n ) {\n const contextWindow = context.contextWindow;\n const remainingTokens = Math.max(0, contextWindow - value.usedTokens);\n const usedPercent = Math.min(100, (value.usedTokens / contextWindow) * 100);\n const remainingPercent = (remainingTokens / contextWindow) * 100;\n return (\n value.remainingTokens === remainingTokens &&\n approximatelyEqual(value.usedPercent, usedPercent) &&\n approximatelyEqual(value.remainingPercent, remainingPercent)\n );\n }\n return false;\n}\n\nfunction approximatelyEqual(left: number, right: number): boolean {\n const scale = Math.max(1, Math.abs(left), Math.abs(right));\n return Math.abs(left - right) <= Number.EPSILON * scale * 8;\n}\n\nfunction isPositiveFiniteNumber(value: JsonValue | undefined): value is number {\n return isNonnegativeFiniteNumber(value) && value > 0;\n}\n\nfunction isOptionalPositiveFiniteNumber(value: JsonValue | undefined): boolean {\n return value === undefined || isPositiveFiniteNumber(value);\n}\n\nfunction isPercentage(value: JsonValue | undefined): value is number {\n return isNonnegativeFiniteNumber(value) && value <= 100;\n}\n\nfunction isUsageValue(value: JsonValue | undefined): value is JsonObject & Usage {\n if (!isJsonObjectValue(value)) {\n return false;\n }\n return (\n isNonnegativeFiniteNumber(value.inputTokens) &&\n isNonnegativeFiniteNumber(value.outputTokens) &&\n isNonnegativeFiniteNumber(value.totalTokens) &&\n isNonnegativeFiniteNumber(value.cachedInputTokens) &&\n isNonnegativeFiniteNumber(value.cacheCreationInputTokens) &&\n isUsageDetailsValue(value.details)\n );\n}\n\nfunction isNonnegativeFiniteNumber(value: JsonValue | undefined): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isUsageDetailsValue(value: JsonValue | undefined): value is JsonObject | undefined {\n if (value === undefined) {\n return true;\n }\n if (!isJsonObjectValue(value)) {\n return false;\n }\n let total: number | undefined;\n let bucketSum = 0;\n for (const [key, detail] of Object.entries(value)) {\n if (detail === undefined || !isNonnegativeFiniteNumber(detail)) {\n return false;\n }\n if (key === \"total\") {\n total = detail;\n } else {\n bucketSum += detail;\n }\n }\n return total !== undefined && total === bucketSum;\n}\n\nfunction isCompletionSourceArray(value: JsonValue | undefined): value is CompletionSource[] {\n return (\n Array.isArray(value) &&\n value.every(\n (source) =>\n isJsonObjectValue(source) &&\n source.type === \"url\" &&\n typeof source.url === \"string\" &&\n (source.title === undefined || typeof source.title === \"string\") &&\n (source.id === undefined || typeof source.id === \"string\") &&\n (source.startIndex === undefined || typeof source.startIndex === \"number\") &&\n (source.endIndex === undefined || typeof source.endIndex === \"number\"),\n )\n );\n}\n\nfunction isProviderToolCallArray(value: JsonValue | undefined): value is ProviderToolCall[] {\n return (\n Array.isArray(value) &&\n value.every(\n (toolCall) =>\n isJsonObjectValue(toolCall) &&\n typeof toolCall.id === \"string\" &&\n typeof toolCall.name === \"string\" &&\n (toolCall.status === undefined || typeof toolCall.status === \"string\") &&\n (toolCall.details === undefined || isJsonObjectValue(toolCall.details)),\n )\n );\n}\n\n/** Provider-agnostic completion request assembled by the runtime for adapters. */\nexport type CompletionRequest = {\n instructions?: string;\n chatHistory: Message[];\n documents: Document[];\n tools: ToolDefinition[];\n providerTools?: ProviderTool[];\n temperature?: number;\n maxTokens?: number;\n toolChoice?: ToolChoice;\n /** Values for the model's declared completion controls; validated before sending. */\n controls?: Readonly<Record<string, string>>;\n /** Provider-specific passthrough options; never validated by the core runtime. */\n providerOptions?: JsonObject;\n /** JSON Schema the output must conform to; requires the `outputSchema` capability. */\n outputSchema?: JsonObject;\n};\n\n/** Normalized finish reasons:\n *\n * - `stop`: the model finished naturally\n * - `length`: an output token limit was hit\n * - `content-filter`: output was blocked by a safety filter\n * - `tool-calls`: the model stopped to request tool calls\n * - `other`: any provider-specific reason\n */\nexport type CompletionFinishReason = \"stop\" | \"length\" | \"content-filter\" | \"tool-calls\" | \"other\";\n\n/** A provider's raw completion response: normalized parts plus usage and metadata. */\nexport type CompletionResponse<RawResponse = unknown> = {\n choice: AssistantContentPart[];\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n /** The provider SDK's original response object, unmodified. */\n rawResponse: RawResponse;\n messageId?: string;\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n};\n\n/** Final result of a completion: typed output, plain text, full content, and usage. */\nexport type CompletionResult<Output = string, RawResponse = unknown> = {\n /**\n * The typed output. When an output schema was requested this is the parsed,\n * validated object; otherwise it is the plain text.\n */\n output: Output;\n /** The generated text, joined from the response's text parts. */\n text: string;\n /** Every content part the model produced, including reasoning and tool calls. */\n content: readonly AssistantContentPart[];\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n rawResponse: RawResponse;\n messageId?: string;\n sources?: readonly CompletionSource[];\n providerToolCalls?: readonly ProviderToolCall[];\n};\n\nfunction isCompletionFinishReason(value: JsonValue | undefined): value is CompletionFinishReason {\n return (\n value === \"stop\" ||\n value === \"length\" ||\n value === \"content-filter\" ||\n value === \"tool-calls\" ||\n value === \"other\"\n );\n}\n\n/** Feature flags a model declares; requests are validated against these at runtime. */\nexport type CompletionModelCapabilities = {\n streaming: boolean;\n tools: boolean;\n toolChoice: boolean;\n imageInput: boolean;\n documentInput: boolean;\n outputSchema: boolean;\n reasoning: boolean;\n providerTools?: boolean;\n};\n\n/** A selectable model control exposed to applications (e.g. \"reasoning effort\"). */\nexport type CompletionModelSelectControl<Option extends string = string> = Readonly<{\n type: \"select\";\n label: string;\n options: readonly Option[];\n description?: string | undefined;\n defaultValue?: Option | undefined;\n}>;\n\n/** Named set of controls a model supports, keyed by control id. */\nexport type CompletionModelControls = Readonly<\n Record<string, CompletionModelSelectControl<string>>\n>;\n\n/** Marker type for models that accept no completion controls. */\nexport type NoCompletionModelControls = Readonly<Record<string, never>>;\n\n/** The option values a model's controls accept, keyed by control id. */\nexport type CompletionControlValues<Controls extends CompletionModelControls> = Readonly<\n Partial<{\n [Key in keyof Controls]: Controls[Key] extends CompletionModelSelectControl<infer Option>\n ? Option\n : never;\n }>\n>;\n\n/** Extracts a model's control types, defaulting to the open controls record. */\nexport type CompletionModelControlsOf<Model> =\n Model extends CompletionModel<unknown, infer Controls> ? Controls : CompletionModelControls;\n\n/**\n * The provider-agnostic model contract every adapter implements: non-streaming\n * completions plus capability, context, and control metadata.\n */\nexport interface CompletionModel<\n RawResponse = unknown,\n Controls extends CompletionModelControls = CompletionModelControls,\n> {\n readonly provider: string;\n readonly modelId: string;\n readonly contextLimits?: ModelContextLimits | undefined;\n readonly capabilities: CompletionModelCapabilities;\n readonly controls?: Controls | undefined;\n /**\n * Returns a JSON-safe representation of the outgoing request for\n * observability traces, or undefined to omit the trace payload. Errors\n * thrown here are swallowed by the runtime and recorded as a trace error.\n */\n traceRequest?(\n request: CompletionRequest,\n options?: { stream?: boolean | undefined },\n ): JsonObject | undefined;\n completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse<RawResponse>>;\n}\n\n/** How a `tool_call_delta` updates arguments: append to, or replace, accumulated JSON. */\nexport type ToolCallArgumentsMode = \"append\" | \"replace\";\n\n/**\n * Incremental completion stream content:\n *\n * - `text_delta` / `reasoning_delta`: incremental text or reasoning content\n * - `tool_call_delta`: partial tool call input; argument fragments accumulate\n * according to `argumentsMode` (`append` continues the JSON string, `replace`\n * restarts it)\n * - `tool_call`: a complete tool call\n * - `source`: a grounding source discovered during generation\n * - `provider_tool_call`: progress on a provider-executed tool\n * - `message_id`: the id of the message being generated\n */\nexport type CompletionStreamPart =\n | {\n type: \"text_delta\";\n delta: string;\n }\n | {\n type: \"reasoning_delta\";\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n /** Provider signature preserved for reasoning replay. */\n signature?: string;\n }\n | {\n type: \"tool_call_delta\";\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n argumentsMode?: ToolCallArgumentsMode;\n signature?: string;\n }\n | {\n type: \"tool_call\";\n toolCall: ToolCallPart;\n }\n | {\n type: \"source\";\n source: CompletionSource;\n }\n | {\n type: \"provider_tool_call\";\n toolCall: ProviderToolCall;\n }\n | {\n type: \"message_id\";\n id: string;\n };\n\n/** Raw model stream events: stream parts, the final response, or a terminal error. */\nexport type CompletionModelStreamEvent<RawResponse = unknown> =\n | CompletionStreamPart\n | {\n type: \"final\";\n response: CompletionResponse<RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n usage?: Usage;\n };\n\n/** High-level stream events: stream parts, the final typed result, or a terminal error. */\nexport type CompletionStreamEvent<Output = string, RawResponse = unknown> =\n | CompletionStreamPart\n | {\n type: \"final\";\n result: CompletionResult<Output, RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n usage: Usage;\n };\n\n/** A completion model that can additionally stream events as they are produced. */\nexport interface StreamingCompletionModel<\n RawResponse = unknown,\n Controls extends CompletionModelControls = CompletionModelControls,\n> extends CompletionModel<RawResponse, Controls> {\n streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent<RawResponse>>;\n}\n\n/** Thrown when a request uses a capability the target model does not declare. */\nexport class CompletionCapabilityError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n}\n\n/** Validates a request against a model's declared capabilities; throws {@link CompletionCapabilityError}. */\nexport function assertCompletionRequestSupported(\n model: CompletionModel,\n request: CompletionRequest,\n options: { streaming?: boolean | undefined } = {},\n): void {\n const modelLabel = `${model.provider}:${model.modelId}`;\n const capabilities = model.capabilities;\n\n assertCompletionControlsSupported(model, request.controls);\n\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n\n if ((request.providerTools?.length ?? 0) > 0 && capabilities.providerTools !== true) {\n throw new CompletionCapabilityError(`${modelLabel} does not support provider-executed tools.`);\n }\n\n if (request.toolChoice !== undefined && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n\n if (request.outputSchema !== undefined && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\n\n/** Validates control values against a model's controls; throws {@link CompletionCapabilityError}. */\nexport function assertCompletionControlsSupported(\n model: CompletionModel,\n controls: Readonly<Record<string, string | undefined>> | undefined,\n): void {\n const modelLabel = `${model.provider}:${model.modelId}`;\n for (const [controlId, value] of Object.entries(controls ?? {})) {\n if (value === undefined) continue;\n const modelControls = model.controls;\n const control =\n modelControls !== undefined && Object.hasOwn(modelControls, controlId)\n ? modelControls[controlId]\n : undefined;\n if (control === undefined) {\n throw new CompletionCapabilityError(\n `${modelLabel} does not support completion control \"${controlId}\".`,\n );\n }\n if (!control.options.includes(value)) {\n throw new CompletionCapabilityError(\n `${modelLabel} completion control \"${controlId}\" does not support value \"${value}\".`,\n );\n }\n }\n}\n\n/** Joins the text parts of assistant content with newlines. */\nexport function textFromAssistantContent(content: readonly AssistantContentPart[]): string {\n return content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n}\n\nfunction requestHasImageInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"system\" || typeof message.content === \"string\"\n ? false\n : message.content.some((content) => content.type === \"image\"),\n );\n}\n\nfunction requestHasFileDocumentInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"user\" && typeof message.content !== \"string\"\n ? message.content.some((content) => content.type === \"file\" && content.data.type !== \"text\")\n : false,\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createTool
3
- } from "./chunk-XV3DH5GC.js";
3
+ } from "./chunk-WUZG6B3Q.js";
4
4
 
5
5
  // src/tool/question-tool.ts
6
6
  import { z } from "zod";
@@ -44,4 +44,4 @@ export {
44
44
  createQuestionTool,
45
45
  isQuestionTool
46
46
  };
47
- //# sourceMappingURL=chunk-IV6YQTY2.js.map
47
+ //# sourceMappingURL=chunk-ICDPUAKN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isToolIndex
3
- } from "./chunk-23GEYG2X.js";
3
+ } from "./chunk-VCMBQTR4.js";
4
4
  import {
5
5
  isMcpTool
6
6
  } from "./chunk-PLDJCCVL.js";
@@ -165,4 +165,4 @@ function snapshotToolIndex(index) {
165
165
  export {
166
166
  prepareAgentTools
167
167
  };
168
- //# sourceMappingURL=chunk-JB3RFK6K.js.map
168
+ //# sourceMappingURL=chunk-KSVFGXS6.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  createMemoryCompactionSummary,
3
3
  cumulativeCompactedMessageCount
4
- } from "./chunk-HP34GRQX.js";
4
+ } from "./chunk-AS7A2LU5.js";
5
5
  import {
6
6
  MemoryCompactionConflictError,
7
7
  MemoryCompactionError
8
8
  } from "./chunk-LQJ4KHMY.js";
9
9
  import {
10
10
  Usage
11
- } from "./chunk-IDNL6IH4.js";
11
+ } from "./chunk-HJ6KTQTZ.js";
12
12
  import {
13
13
  throwIfAborted
14
14
  } from "./chunk-USRKPEQN.js";
@@ -339,4 +339,4 @@ function isEmptyUsage(usage) {
339
339
  export {
340
340
  AgentRunMemory
341
341
  };
342
- //# sourceMappingURL=chunk-F3E2RLC7.js.map
342
+ //# sourceMappingURL=chunk-KSXA7YK7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runEvalSuite
3
- } from "./chunk-JOQ2T3QP.js";
3
+ } from "./chunk-SIXS4CCU.js";
4
4
 
5
5
  // src/evals/cli.ts
6
6
  var EvalAssertionError = class extends Error {
@@ -352,4 +352,4 @@ export {
352
352
  assertEvalOutcomes,
353
353
  runEvalCli
354
354
  };
355
- //# sourceMappingURL=chunk-5P2YOQSA.js.map
355
+ //# sourceMappingURL=chunk-KX2TRKO2.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSkillTools
3
- } from "./chunk-BDDC72GF.js";
3
+ } from "./chunk-5HFXHKDD.js";
4
4
  import {
5
5
  skillInstructions
6
6
  } from "./chunk-JBQNCUXA.js";
@@ -26,4 +26,4 @@ async function loadSkills(loaders) {
26
26
  export {
27
27
  loadSkills
28
28
  };
29
- //# sourceMappingURL=chunk-KZGSXJKU.js.map
29
+ //# sourceMappingURL=chunk-LMZ54UNC.js.map
@@ -4,6 +4,9 @@ import {
4
4
  resolveExpected,
5
5
  resolveJudgePrompt
6
6
  } from "./chunk-ZPXOBQDS.js";
7
+ import {
8
+ extract
9
+ } from "./chunk-3P65RSBB.js";
7
10
  import {
8
11
  evalValuesEqual,
9
12
  formatValue
@@ -11,9 +14,6 @@ import {
11
14
  import {
12
15
  EvalOutcome
13
16
  } from "./chunk-EJR6VVB3.js";
14
- import {
15
- extract
16
- } from "./chunk-UOGM62JL.js";
17
17
  import {
18
18
  cosineSimilarity
19
19
  } from "./chunk-7F53DOML.js";
@@ -315,4 +315,4 @@ export {
315
315
  llmJudge,
316
316
  llmScore
317
317
  };
318
- //# sourceMappingURL=chunk-PYLPLFJZ.js.map
318
+ //# sourceMappingURL=chunk-N2AQUFGO.js.map
@@ -6,13 +6,13 @@ import {
6
6
  } from "./chunk-6BTJC3ES.js";
7
7
  import {
8
8
  isToolIndex
9
- } from "./chunk-23GEYG2X.js";
9
+ } from "./chunk-VCMBQTR4.js";
10
10
  import {
11
11
  isMcpTool
12
12
  } from "./chunk-PLDJCCVL.js";
13
13
  import {
14
14
  isProviderTool
15
- } from "./chunk-IDNL6IH4.js";
15
+ } from "./chunk-HJ6KTQTZ.js";
16
16
 
17
17
  // src/agent/resolve-options.ts
18
18
  var resolvedAgentOptions = /* @__PURE__ */ Symbol("resolvedAgentOptions");
@@ -109,4 +109,4 @@ export {
109
109
  resolveAgentOptions,
110
110
  markResolvedAgentOptions
111
111
  };
112
- //# sourceMappingURL=chunk-7KAGWJ5M.js.map
112
+ //# sourceMappingURL=chunk-NA44V5OE.js.map