@amplitude/ai 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/.cursor/skills/instrument-with-amplitude-ai/SKILL.md +50 -0
  2. package/AGENTS.md +79 -0
  3. package/LICENSE +21 -0
  4. package/README.md +2111 -0
  5. package/bin/amplitude-ai-completions.mjs +19 -0
  6. package/bin/amplitude-ai-doctor.mjs +26 -0
  7. package/bin/amplitude-ai-init.mjs +27 -0
  8. package/bin/amplitude-ai-instrument.mjs +52 -0
  9. package/bin/amplitude-ai-mcp.mjs +8 -0
  10. package/bin/amplitude-ai-register-catalog.mjs +156 -0
  11. package/bin/amplitude-ai-status.mjs +28 -0
  12. package/bin/amplitude-ai.mjs +43 -0
  13. package/bin/validate-catalog-constants.mjs +134 -0
  14. package/data/agent_event_catalog.json +1277 -0
  15. package/dist/_virtual/rolldown_runtime.js +31 -0
  16. package/dist/bound-agent.d.ts +56 -0
  17. package/dist/bound-agent.d.ts.map +1 -0
  18. package/dist/bound-agent.js +155 -0
  19. package/dist/bound-agent.js.map +1 -0
  20. package/dist/cli/doctor.d.ts +17 -0
  21. package/dist/cli/doctor.d.ts.map +1 -0
  22. package/dist/cli/doctor.js +89 -0
  23. package/dist/cli/doctor.js.map +1 -0
  24. package/dist/cli/init.d.ts +14 -0
  25. package/dist/cli/init.d.ts.map +1 -0
  26. package/dist/cli/init.js +40 -0
  27. package/dist/cli/init.js.map +1 -0
  28. package/dist/cli/providers.d.ts +32 -0
  29. package/dist/cli/providers.d.ts.map +1 -0
  30. package/dist/cli/providers.js +46 -0
  31. package/dist/cli/providers.js.map +1 -0
  32. package/dist/cli/status.d.ts +14 -0
  33. package/dist/cli/status.d.ts.map +1 -0
  34. package/dist/cli/status.js +38 -0
  35. package/dist/cli/status.js.map +1 -0
  36. package/dist/client.d.ts +246 -0
  37. package/dist/client.d.ts.map +1 -0
  38. package/dist/client.js +369 -0
  39. package/dist/client.js.map +1 -0
  40. package/dist/config.d.ts +60 -0
  41. package/dist/config.d.ts.map +1 -0
  42. package/dist/config.js +57 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/context.d.ts +44 -0
  45. package/dist/context.d.ts.map +1 -0
  46. package/dist/context.js +53 -0
  47. package/dist/context.js.map +1 -0
  48. package/dist/core/constants.d.ts +96 -0
  49. package/dist/core/constants.d.ts.map +1 -0
  50. package/dist/core/constants.js +105 -0
  51. package/dist/core/constants.js.map +1 -0
  52. package/dist/core/enrichments.d.ts +139 -0
  53. package/dist/core/enrichments.d.ts.map +1 -0
  54. package/dist/core/enrichments.js +177 -0
  55. package/dist/core/enrichments.js.map +1 -0
  56. package/dist/core/privacy.d.ts +53 -0
  57. package/dist/core/privacy.d.ts.map +1 -0
  58. package/dist/core/privacy.js +235 -0
  59. package/dist/core/privacy.js.map +1 -0
  60. package/dist/core/tracking.d.ts +242 -0
  61. package/dist/core/tracking.d.ts.map +1 -0
  62. package/dist/core/tracking.js +469 -0
  63. package/dist/core/tracking.js.map +1 -0
  64. package/dist/decorators.d.ts +109 -0
  65. package/dist/decorators.d.ts.map +1 -0
  66. package/dist/decorators.js +281 -0
  67. package/dist/decorators.js.map +1 -0
  68. package/dist/exceptions.d.ts +19 -0
  69. package/dist/exceptions.d.ts.map +1 -0
  70. package/dist/exceptions.js +35 -0
  71. package/dist/exceptions.js.map +1 -0
  72. package/dist/index.d.ts +37 -0
  73. package/dist/index.js +38 -0
  74. package/dist/integrations/anthropic-tools.d.ts +38 -0
  75. package/dist/integrations/anthropic-tools.d.ts.map +1 -0
  76. package/dist/integrations/anthropic-tools.js +175 -0
  77. package/dist/integrations/anthropic-tools.js.map +1 -0
  78. package/dist/integrations/crewai.d.ts +14 -0
  79. package/dist/integrations/crewai.d.ts.map +1 -0
  80. package/dist/integrations/crewai.js +19 -0
  81. package/dist/integrations/crewai.js.map +1 -0
  82. package/dist/integrations/langchain.d.ts +37 -0
  83. package/dist/integrations/langchain.d.ts.map +1 -0
  84. package/dist/integrations/langchain.js +189 -0
  85. package/dist/integrations/langchain.js.map +1 -0
  86. package/dist/integrations/llamaindex.d.ts +44 -0
  87. package/dist/integrations/llamaindex.d.ts.map +1 -0
  88. package/dist/integrations/llamaindex.js +144 -0
  89. package/dist/integrations/llamaindex.js.map +1 -0
  90. package/dist/integrations/openai-agents.d.ts +35 -0
  91. package/dist/integrations/openai-agents.d.ts.map +1 -0
  92. package/dist/integrations/openai-agents.js +248 -0
  93. package/dist/integrations/openai-agents.js.map +1 -0
  94. package/dist/integrations/opentelemetry.d.ts +40 -0
  95. package/dist/integrations/opentelemetry.d.ts.map +1 -0
  96. package/dist/integrations/opentelemetry.js +146 -0
  97. package/dist/integrations/opentelemetry.js.map +1 -0
  98. package/dist/internals.d.ts +5 -0
  99. package/dist/internals.js +5 -0
  100. package/dist/mcp/contract.d.ts +27 -0
  101. package/dist/mcp/contract.d.ts.map +1 -0
  102. package/dist/mcp/contract.js +25 -0
  103. package/dist/mcp/contract.js.map +1 -0
  104. package/dist/mcp/index.d.ts +4 -0
  105. package/dist/mcp/index.js +5 -0
  106. package/dist/mcp/patterns.d.ts +11 -0
  107. package/dist/mcp/patterns.d.ts.map +1 -0
  108. package/dist/mcp/patterns.js +38 -0
  109. package/dist/mcp/patterns.js.map +1 -0
  110. package/dist/mcp/server.d.ts +10 -0
  111. package/dist/mcp/server.d.ts.map +1 -0
  112. package/dist/mcp/server.js +241 -0
  113. package/dist/mcp/server.js.map +1 -0
  114. package/dist/mcp/validate-file.d.ts +20 -0
  115. package/dist/mcp/validate-file.d.ts.map +1 -0
  116. package/dist/mcp/validate-file.js +122 -0
  117. package/dist/mcp/validate-file.js.map +1 -0
  118. package/dist/middleware.d.ts +32 -0
  119. package/dist/middleware.d.ts.map +1 -0
  120. package/dist/middleware.js +67 -0
  121. package/dist/middleware.js.map +1 -0
  122. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +54 -0
  123. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js.map +1 -0
  124. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +20 -0
  125. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js.map +1 -0
  126. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js +34 -0
  127. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
  128. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js +225 -0
  129. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js.map +1 -0
  130. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +22 -0
  131. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -0
  132. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +351 -0
  133. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
  134. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +634 -0
  135. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -0
  136. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +60 -0
  137. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -0
  138. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +122 -0
  139. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +37 -0
  141. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  142. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +858 -0
  143. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
  144. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +32 -0
  145. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -0
  146. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +74 -0
  147. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js.map +1 -0
  148. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1262 -0
  149. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
  150. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +83 -0
  151. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +1 -0
  152. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/formats.js +195 -0
  153. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/formats.js.map +1 -0
  154. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/index.js +44 -0
  155. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/index.js.map +1 -0
  156. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/limit.js +88 -0
  157. package/dist/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/limit.js.map +1 -0
  158. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js +107 -0
  159. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js.map +1 -0
  160. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js +142 -0
  161. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
  162. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js +678 -0
  163. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
  164. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js +145 -0
  165. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
  166. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js +106 -0
  167. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js.map +1 -0
  168. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js +227 -0
  169. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js.map +1 -0
  170. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js +33 -0
  171. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js.map +1 -0
  172. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js +22 -0
  173. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
  174. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js +137 -0
  175. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js.map +1 -0
  176. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js +65 -0
  177. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js.map +1 -0
  178. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js +150 -0
  179. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js.map +1 -0
  180. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js +27 -0
  181. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
  182. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js +52 -0
  183. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
  184. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js +176 -0
  185. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
  186. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
  187. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
  188. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js +437 -0
  189. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
  190. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js +117 -0
  191. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
  192. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js +76 -0
  193. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
  194. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js +587 -0
  195. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js.map +1 -0
  196. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.js +22 -0
  197. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.js.map +1 -0
  198. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.js +145 -0
  199. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.js.map +1 -0
  200. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js +16 -0
  201. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js.map +1 -0
  202. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js +29 -0
  203. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
  204. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js +16 -0
  205. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js.map +1 -0
  206. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js +20 -0
  207. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
  208. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +61 -0
  209. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
  210. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +101 -0
  211. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
  212. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js +34 -0
  213. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
  214. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +21 -0
  215. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
  216. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js +94 -0
  217. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
  218. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +91 -0
  219. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
  220. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
  221. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
  222. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js +64 -0
  223. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
  224. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js +63 -0
  225. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
  226. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js +39 -0
  227. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
  228. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js +36 -0
  229. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
  230. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +56 -0
  231. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
  232. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +66 -0
  233. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
  234. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +22 -0
  235. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
  236. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js +57 -0
  237. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
  238. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +46 -0
  239. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
  240. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +22 -0
  241. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
  242. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js +134 -0
  243. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
  244. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js +19 -0
  245. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
  246. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js +27 -0
  247. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
  248. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js +116 -0
  249. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
  250. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js +106 -0
  251. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
  252. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js +18 -0
  253. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
  254. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js +31 -0
  255. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
  256. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js +97 -0
  257. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
  258. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js +15 -0
  259. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
  260. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js +27 -0
  261. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
  262. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js +32 -0
  263. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
  264. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js +54 -0
  265. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
  266. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js +53 -0
  267. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
  268. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js +33 -0
  269. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
  270. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js +38 -0
  271. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
  272. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +52 -0
  273. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
  274. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +33 -0
  275. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
  276. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +32 -0
  277. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
  278. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js +43 -0
  279. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
  280. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js +77 -0
  281. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
  282. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +75 -0
  283. package/dist/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
  284. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +37 -0
  285. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +1 -0
  286. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js +240 -0
  287. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js.map +1 -0
  288. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js +194 -0
  289. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js.map +1 -0
  290. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js +286 -0
  291. package/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js.map +1 -0
  292. package/dist/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js +82 -0
  293. package/dist/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js.map +1 -0
  294. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js +37 -0
  295. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  296. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js +30 -0
  297. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  298. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +16 -0
  299. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  300. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +10 -0
  301. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  302. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js +57 -0
  303. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  304. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +17 -0
  305. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  306. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +23 -0
  307. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  308. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +36 -0
  309. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  310. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  311. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  312. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +10 -0
  313. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  314. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +10 -0
  315. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  316. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +39 -0
  317. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  318. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +13 -0
  319. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  320. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +11 -0
  321. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  322. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +11 -0
  323. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  324. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +47 -0
  325. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  326. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +17 -0
  327. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  328. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +38 -0
  329. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  330. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +16 -0
  331. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  332. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +13 -0
  333. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  334. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +11 -0
  335. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  336. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +46 -0
  337. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  338. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +37 -0
  339. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  340. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +64 -0
  341. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  342. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +20 -0
  343. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  344. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +27 -0
  345. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  346. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +10 -0
  347. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  348. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +10 -0
  349. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  350. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +56 -0
  351. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  352. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +21 -0
  353. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  354. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +250 -0
  355. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  356. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +38 -0
  357. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  358. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +10 -0
  359. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  360. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +64 -0
  361. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  362. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +10 -0
  363. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  364. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js +78 -0
  365. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  366. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +70 -0
  367. package/dist/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  368. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +104 -0
  369. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  370. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +11 -0
  371. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  372. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
  373. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  374. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
  375. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  376. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
  377. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  378. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +84 -0
  379. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  380. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +3160 -0
  381. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  382. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.js +23 -0
  383. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.js.map +1 -0
  384. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js +38 -0
  385. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js.map +1 -0
  386. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.js +12 -0
  387. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.js.map +1 -0
  388. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js +611 -0
  389. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js.map +1 -0
  390. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.js +437 -0
  391. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.js.map +1 -0
  392. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.js +360 -0
  393. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.js.map +1 -0
  394. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js +50 -0
  395. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js.map +1 -0
  396. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.js +34 -0
  397. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.js.map +1 -0
  398. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.js +71 -0
  399. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.js.map +1 -0
  400. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js +74 -0
  401. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js.map +1 -0
  402. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.js +63 -0
  403. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.js.map +1 -0
  404. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js +50 -0
  405. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js.map +1 -0
  406. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.js +1098 -0
  407. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.js.map +1 -0
  408. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js +599 -0
  409. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
  410. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.js +267 -0
  411. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.js.map +1 -0
  412. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.js +10 -0
  413. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.js.map +1 -0
  414. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/mini/schemas.js +50 -0
  415. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/mini/schemas.js.map +1 -0
  416. package/dist/patching.d.ts +59 -0
  417. package/dist/patching.d.ts.map +1 -0
  418. package/dist/patching.js +891 -0
  419. package/dist/patching.js.map +1 -0
  420. package/dist/propagation.d.ts +8 -0
  421. package/dist/propagation.d.ts.map +1 -0
  422. package/dist/propagation.js +46 -0
  423. package/dist/propagation.js.map +1 -0
  424. package/dist/providers/anthropic.d.ts +44 -0
  425. package/dist/providers/anthropic.d.ts.map +1 -0
  426. package/dist/providers/anthropic.js +287 -0
  427. package/dist/providers/anthropic.js.map +1 -0
  428. package/dist/providers/azure-openai.d.ts +32 -0
  429. package/dist/providers/azure-openai.d.ts.map +1 -0
  430. package/dist/providers/azure-openai.js +39 -0
  431. package/dist/providers/azure-openai.js.map +1 -0
  432. package/dist/providers/base.d.ts +70 -0
  433. package/dist/providers/base.d.ts.map +1 -0
  434. package/dist/providers/base.js +141 -0
  435. package/dist/providers/base.js.map +1 -0
  436. package/dist/providers/bedrock.d.ts +41 -0
  437. package/dist/providers/bedrock.d.ts.map +1 -0
  438. package/dist/providers/bedrock.js +229 -0
  439. package/dist/providers/bedrock.js.map +1 -0
  440. package/dist/providers/gemini.d.ts +34 -0
  441. package/dist/providers/gemini.d.ts.map +1 -0
  442. package/dist/providers/gemini.js +225 -0
  443. package/dist/providers/gemini.js.map +1 -0
  444. package/dist/providers/mistral.d.ts +32 -0
  445. package/dist/providers/mistral.d.ts.map +1 -0
  446. package/dist/providers/mistral.js +218 -0
  447. package/dist/providers/mistral.js.map +1 -0
  448. package/dist/providers/openai.d.ts +61 -0
  449. package/dist/providers/openai.d.ts.map +1 -0
  450. package/dist/providers/openai.js +530 -0
  451. package/dist/providers/openai.js.map +1 -0
  452. package/dist/register.d.ts +1 -0
  453. package/dist/register.js +46 -0
  454. package/dist/register.js.map +1 -0
  455. package/dist/session.d.ts +46 -0
  456. package/dist/session.d.ts.map +1 -0
  457. package/dist/session.js +144 -0
  458. package/dist/session.js.map +1 -0
  459. package/dist/tenant.d.ts +30 -0
  460. package/dist/tenant.d.ts.map +1 -0
  461. package/dist/tenant.js +23 -0
  462. package/dist/tenant.js.map +1 -0
  463. package/dist/testing.d.ts +46 -0
  464. package/dist/testing.d.ts.map +1 -0
  465. package/dist/testing.js +120 -0
  466. package/dist/testing.js.map +1 -0
  467. package/dist/types.d.ts +384 -0
  468. package/dist/types.d.ts.map +1 -0
  469. package/dist/types.js +13 -0
  470. package/dist/types.js.map +1 -0
  471. package/dist/utils/costs.d.ts +27 -0
  472. package/dist/utils/costs.d.ts.map +1 -0
  473. package/dist/utils/costs.js +63 -0
  474. package/dist/utils/costs.js.map +1 -0
  475. package/dist/utils/debug.d.ts +6 -0
  476. package/dist/utils/debug.d.ts.map +1 -0
  477. package/dist/utils/debug.js +73 -0
  478. package/dist/utils/debug.js.map +1 -0
  479. package/dist/utils/logger.d.ts +11 -0
  480. package/dist/utils/logger.d.ts.map +1 -0
  481. package/dist/utils/logger.js +18 -0
  482. package/dist/utils/logger.js.map +1 -0
  483. package/dist/utils/model-tiers.d.ts +8 -0
  484. package/dist/utils/model-tiers.d.ts.map +1 -0
  485. package/dist/utils/model-tiers.js +76 -0
  486. package/dist/utils/model-tiers.js.map +1 -0
  487. package/dist/utils/providers.d.ts +5 -0
  488. package/dist/utils/providers.d.ts.map +1 -0
  489. package/dist/utils/providers.js +20 -0
  490. package/dist/utils/providers.js.map +1 -0
  491. package/dist/utils/resolve-module.d.ts +5 -0
  492. package/dist/utils/resolve-module.d.ts.map +1 -0
  493. package/dist/utils/resolve-module.js +29 -0
  494. package/dist/utils/resolve-module.js.map +1 -0
  495. package/dist/utils/streaming.d.ts +55 -0
  496. package/dist/utils/streaming.d.ts.map +1 -0
  497. package/dist/utils/streaming.js +72 -0
  498. package/dist/utils/streaming.js.map +1 -0
  499. package/dist/utils/tokens.d.ts +16 -0
  500. package/dist/utils/tokens.d.ts.map +1 -0
  501. package/dist/utils/tokens.js +80 -0
  502. package/dist/utils/tokens.js.map +1 -0
  503. package/dist/wrappers.d.ts +37 -0
  504. package/dist/wrappers.d.ts.map +1 -0
  505. package/dist/wrappers.js +61 -0
  506. package/dist/wrappers.js.map +1 -0
  507. package/llms-full.txt +127 -0
  508. package/llms.txt +28 -0
  509. package/mcp.schema.json +18 -0
  510. package/package.json +189 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patching.js","names":["_activePatches: PatchRecord[]","patched: string[]","providers: Array<{\n fn: (opts: { amplitudeAI: AmplitudeAI; module?: unknown }) => void;\n available: boolean;\n name: string;\n moduleKey: string;\n }>","toRemove: number[]","inputTokens: number | undefined","outputTokens: number | undefined","totalTokens: number | undefined","errorMessage: string | undefined","patchedExportKey: string | null","current: unknown"],"sources":["../src/patching.ts"],"sourcesContent":["/**\n * Monkey-patching for zero-code instrumentation.\n *\n * Port of Python's patch_openai, patch_anthropic, etc.\n * These wrap the provider SDK's methods with tracking instrumentation.\n */\n\nimport type { AmplitudeAI } from './client.js';\nimport { getActiveContext } from './context.js';\nimport {\n _AnthropicModule,\n ANTHROPIC_AVAILABLE,\n} from './providers/anthropic.js';\nimport { _BedrockModule, BEDROCK_AVAILABLE } from './providers/bedrock.js';\nimport { _GeminiModule, GEMINI_AVAILABLE } from './providers/gemini.js';\nimport { _MistralModule, MISTRAL_AVAILABLE } from './providers/mistral.js';\nimport { _OpenAIModule, OPENAI_AVAILABLE } from './providers/openai.js';\n\ntype PatchRecord = {\n module: unknown;\n method: string;\n original: unknown;\n provider: string;\n};\n\nclass PatchOwnershipError extends Error {}\n\nconst _activePatches: PatchRecord[] = [];\nconst _patchedProviders = new Set<string>();\nconst _providerOwners = new Map<string, AmplitudeAI>();\n\nexport function patchedProviders(): string[] {\n return [..._patchedProviders];\n}\n\nfunction _isMethodPatched(\n target: Record<string, unknown>,\n methodName: string,\n): boolean {\n const method = target[methodName] as Record<string, unknown> | undefined;\n return method?.__amplitudePatched === true;\n}\n\nfunction _patchMethod(\n target: Record<string, unknown>,\n methodName: string,\n wrapper: (\n original: (...args: unknown[]) => unknown,\n ...args: unknown[]\n ) => unknown,\n providerName: string,\n): void {\n const original = target[methodName];\n if (typeof original !== 'function') return;\n if (_isMethodPatched(target, methodName)) return;\n\n const patched = function (this: unknown, ...args: unknown[]) {\n return wrapper(original.bind(this), ...args);\n };\n (patched as unknown as Record<string, unknown>).__amplitudePatched = true;\n target[methodName] = patched;\n\n _activePatches.push({\n module: target,\n method: methodName,\n original,\n provider: providerName,\n });\n _patchedProviders.add(providerName);\n}\n\nfunction _assertPatchOwner(providerName: string, ai: AmplitudeAI): void {\n const existingOwner = _providerOwners.get(providerName);\n if (existingOwner == null) {\n _providerOwners.set(providerName, ai);\n return;\n }\n if (existingOwner !== ai) {\n throw new PatchOwnershipError(\n `Provider \"${providerName}\" is already patched by another AmplitudeAI instance. Call unpatch() before patching with a different instance.`,\n );\n }\n}\n\nexport function patchOpenAI(options: {\n amplitudeAI: AmplitudeAI;\n trackCompletions?: boolean;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _OpenAIModule;\n\n if (mod == null) {\n throw new Error(\n 'openai package is not installed. Install it with: npm install openai — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('openai', amplitudeAI);\n\n if (_patchOpenAIClass(mod.OpenAI, mod, 'OpenAI', amplitudeAI, 'openai')) {\n _patchedProviders.add('openai');\n }\n}\n\nexport function patchAnthropic(options: {\n amplitudeAI: AmplitudeAI;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _AnthropicModule;\n\n if (mod == null) {\n throw new Error(\n '@anthropic-ai/sdk package is not installed. Install it with: npm install @anthropic-ai/sdk — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('anthropic', amplitudeAI);\n\n const AnthropicClass = mod.Anthropic as\n | { prototype: Record<string, unknown> }\n | undefined;\n if (!AnthropicClass?.prototype) return;\n\n let didPatch = false;\n const messagesProto = _getNestedPrototype(AnthropicClass, ['messages']);\n if (messagesProto) {\n const target = messagesProto as Record<string, unknown>;\n _patchMethod(\n target,\n 'create',\n _makeCompletionWrapper(amplitudeAI, 'anthropic'),\n 'anthropic',\n );\n _patchMethod(\n target,\n 'stream',\n _makeAnthropicStreamWrapper(amplitudeAI),\n 'anthropic',\n );\n didPatch =\n _isMethodPatched(target, 'create') || _isMethodPatched(target, 'stream');\n }\n\n if (didPatch) {\n _patchedProviders.add('anthropic');\n }\n}\n\nexport function patchAzureOpenAI(options: {\n amplitudeAI: AmplitudeAI;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _OpenAIModule;\n if (mod == null) {\n throw new Error(\n 'openai package is not installed. Install it with: npm install openai — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('azure-openai', amplitudeAI);\n if (\n _patchOpenAIClass(\n mod.AzureOpenAI,\n mod,\n 'AzureOpenAI',\n amplitudeAI,\n 'azure-openai',\n )\n ) {\n _patchedProviders.add('azure-openai');\n }\n}\n\nexport function patchGemini(options: {\n amplitudeAI: AmplitudeAI;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _GeminiModule;\n\n if (mod == null) {\n throw new Error(\n '@google/generative-ai is not installed. Install it with: npm install @google/generative-ai — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('gemini', amplitudeAI);\n\n const GeminiClass = mod.GoogleGenerativeAI as\n | { prototype: Record<string, unknown> }\n | undefined;\n if (!GeminiClass?.prototype) return;\n const proto = GeminiClass.prototype as Record<string, unknown>;\n _patchMethod(\n proto,\n 'getGenerativeModel',\n (original, ...args) => {\n const modelObj = original(...args);\n if (modelObj == null || typeof modelObj !== 'object') return modelObj;\n const model = modelObj as Record<string, unknown>;\n if (\n typeof model.generateContent === 'function' &&\n !(\n (model.generateContent as unknown as Record<string, unknown>)\n .__amplitudePatched === true\n )\n ) {\n _patchMethod(\n model,\n 'generateContent',\n (innerOriginal, ...innerArgs) => {\n const startTime = performance.now();\n const result = innerOriginal(...innerArgs);\n if (result instanceof Promise) {\n return result\n .then((response) => {\n _trackGeminiResponse(amplitudeAI, response, startTime);\n return response;\n })\n .catch((err) => {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n innerArgs[0],\n 'gemini',\n );\n throw err;\n });\n }\n return result;\n },\n 'gemini',\n );\n }\n if (\n typeof model.generateContentStream === 'function' &&\n !(\n (model.generateContentStream as unknown as Record<string, unknown>)\n .__amplitudePatched === true\n )\n ) {\n _patchMethod(\n model,\n 'generateContentStream',\n (innerOriginal, ...innerArgs) => {\n const startTime = performance.now();\n const result = innerOriginal(...innerArgs);\n if (result instanceof Promise) {\n return result\n .then((response) => {\n const streamResp = response as Record<string, unknown>;\n const stream = streamResp.stream;\n if (_isAsyncIterable(stream)) {\n return {\n ...streamResp,\n stream: _wrapPatchedStream(\n amplitudeAI,\n stream as AsyncIterable<unknown>,\n startTime,\n innerArgs[0],\n 'gemini',\n ),\n };\n }\n return response;\n })\n .catch((err) => {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n innerArgs[0],\n 'gemini',\n );\n throw err;\n });\n }\n return result;\n },\n 'gemini',\n );\n }\n return modelObj;\n },\n 'gemini',\n );\n\n if (_isMethodPatched(proto, 'getGenerativeModel')) {\n _patchedProviders.add('gemini');\n }\n}\n\nexport function patchMistral(options: {\n amplitudeAI: AmplitudeAI;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _MistralModule;\n\n if (mod == null) {\n throw new Error(\n '@mistralai/mistralai is not installed. Install it with: npm install @mistralai/mistralai — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('mistral', amplitudeAI);\n\n const MistralClass = (mod.Mistral ?? mod.MistralClient ?? mod.default) as\n | { prototype: Record<string, unknown> }\n | undefined;\n if (!MistralClass?.prototype) return;\n\n const chatProto = _getNestedPrototype(MistralClass, ['chat']);\n let didPatch = false;\n if (chatProto) {\n const target = chatProto as Record<string, unknown>;\n _patchMethod(\n target,\n 'complete',\n _makeCompletionWrapper(amplitudeAI, 'mistral'),\n 'mistral',\n );\n _patchMethod(\n target,\n 'stream',\n _makeCompletionWrapper(amplitudeAI, 'mistral'),\n 'mistral',\n );\n didPatch =\n _isMethodPatched(target, 'complete') ||\n _isMethodPatched(target, 'stream');\n }\n\n if (didPatch) {\n _patchedProviders.add('mistral');\n }\n}\n\nexport function patchBedrock(options: {\n amplitudeAI: AmplitudeAI;\n module?: unknown;\n}): void {\n const { amplitudeAI } = options;\n const mod =\n (options.module as Record<string, unknown> | null) ?? _BedrockModule;\n\n if (mod == null) {\n throw new Error(\n '@aws-sdk/client-bedrock-runtime is not installed. Install it with: npm install @aws-sdk/client-bedrock-runtime — or pass the module via the modules option.',\n );\n }\n _assertPatchOwner('bedrock', amplitudeAI);\n\n const ClientClass = mod.BedrockRuntimeClient as\n | { prototype: Record<string, unknown> }\n | undefined;\n if (!ClientClass?.prototype) return;\n\n _patchMethod(\n ClientClass.prototype as Record<string, unknown>,\n 'send',\n (original, ...args) => {\n const command = args[0] as Record<string, unknown> | undefined;\n const commandName = String(command?.constructor?.name ?? '');\n const shouldTrack =\n commandName.includes('ConverseCommand') ||\n commandName.includes('ConverseStreamCommand');\n const startTime = performance.now();\n const result = original(...args);\n if (result instanceof Promise) {\n return result\n .then((response) => {\n if (!shouldTrack) {\n return response;\n }\n if (commandName.includes('ConverseStreamCommand')) {\n const streamResp = response as Record<string, unknown>;\n const stream = streamResp.stream;\n if (_isAsyncIterable(stream)) {\n return {\n ...streamResp,\n stream: _wrapPatchedBedrockStream(\n amplitudeAI,\n stream as AsyncIterable<unknown>,\n startTime,\n args[0],\n ),\n };\n }\n } else {\n _trackBedrockResponse(amplitudeAI, response, startTime, args[0]);\n }\n return response;\n })\n .catch((err) => {\n if (shouldTrack) {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n args[0],\n 'bedrock',\n );\n }\n throw err;\n });\n }\n return result;\n },\n 'bedrock',\n );\n\n if (\n _isMethodPatched(ClientClass.prototype as Record<string, unknown>, 'send')\n ) {\n _patchedProviders.add('bedrock');\n }\n}\n\n/**\n * Auto-detects installed provider SDKs and patches each supported surface.\n *\n * Returns the list of provider names that were successfully patched.\n * Ownership conflicts (same provider patched by a different `AmplitudeAI` instance)\n * throw immediately to prevent ambiguous instrumentation state.\n *\n * In bundler environments where `tryRequire` cannot resolve modules, pass them\n * explicitly via `modules`:\n * ```ts\n * import OpenAI from 'openai';\n * import Anthropic from '@anthropic-ai/sdk';\n * patch({ amplitudeAI: ai, modules: { openai: OpenAI, anthropic: Anthropic } });\n * ```\n */\nexport function patch(options: {\n amplitudeAI: AmplitudeAI;\n modules?: Record<string, unknown>;\n}): string[] {\n const patched: string[] = [];\n const mods = options.modules ?? {};\n const providers: Array<{\n fn: (opts: { amplitudeAI: AmplitudeAI; module?: unknown }) => void;\n available: boolean;\n name: string;\n moduleKey: string;\n }> = [\n {\n fn: patchOpenAI,\n available: OPENAI_AVAILABLE || mods.openai != null,\n name: 'openai',\n moduleKey: 'openai',\n },\n {\n fn: patchAzureOpenAI,\n available: OPENAI_AVAILABLE || mods.openai != null,\n name: 'azure-openai',\n moduleKey: 'openai',\n },\n {\n fn: patchAnthropic,\n available: ANTHROPIC_AVAILABLE || mods.anthropic != null,\n name: 'anthropic',\n moduleKey: 'anthropic',\n },\n {\n fn: patchGemini,\n available: GEMINI_AVAILABLE || mods.gemini != null,\n name: 'gemini',\n moduleKey: 'gemini',\n },\n {\n fn: patchMistral,\n available: MISTRAL_AVAILABLE || mods.mistral != null,\n name: 'mistral',\n moduleKey: 'mistral',\n },\n {\n fn: patchBedrock,\n available: BEDROCK_AVAILABLE || mods.bedrock != null,\n name: 'bedrock',\n moduleKey: 'bedrock',\n },\n ];\n for (const { fn, available, name, moduleKey } of providers) {\n if (!available) continue;\n try {\n fn({ amplitudeAI: options.amplitudeAI, module: mods[moduleKey] });\n if (_patchedProviders.has(name)) {\n patched.push(name);\n }\n } catch (error) {\n if (error instanceof PatchOwnershipError) {\n throw error;\n }\n // provider setup failed\n }\n }\n return patched;\n}\n\nexport function unpatch(): void {\n for (const record of _activePatches.reverse()) {\n const target = record.module as Record<string, unknown>;\n target[record.method] = record.original;\n }\n _activePatches.length = 0;\n _patchedProviders.clear();\n _providerOwners.clear();\n}\n\nexport function unpatchOpenAI(): void {\n _unpatchByProvider('openai');\n}\n\nexport function unpatchAnthropic(): void {\n _unpatchByProvider('anthropic');\n}\n\nexport function unpatchGemini(): void {\n _unpatchByProvider('gemini');\n}\n\nexport function unpatchMistral(): void {\n _unpatchByProvider('mistral');\n}\n\nexport function unpatchBedrock(): void {\n _unpatchByProvider('bedrock');\n}\n\nexport function unpatchAzureOpenAI(): void {\n _unpatchByProvider('azure-openai');\n}\n\nfunction _unpatchByProvider(providerName: string): void {\n const toRemove: number[] = [];\n for (let i = _activePatches.length - 1; i >= 0; i--) {\n const record = _activePatches[i];\n if (record == null) continue;\n if (\n (record as unknown as { provider?: string }).provider === providerName\n ) {\n const target = record.module as Record<string, unknown>;\n target[record.method] = record.original;\n toRemove.push(i);\n }\n }\n for (const idx of toRemove) {\n _activePatches.splice(idx, 1);\n }\n _patchedProviders.delete(providerName);\n _providerOwners.delete(providerName);\n}\n\n// ---------------------------------------------------------------\n// Shared wrapper factory for completion-style endpoints\n// ---------------------------------------------------------------\n\nfunction _makeCompletionWrapper(\n amplitudeAI: AmplitudeAI,\n providerName: string,\n): (original: (...args: unknown[]) => unknown, ...args: unknown[]) => unknown {\n return (original, ...args) => {\n const startTime = performance.now();\n const result = original(...args);\n if (result instanceof Promise) {\n return result\n .then((response) => {\n if (_isAsyncIterable(response)) {\n if (providerName === 'anthropic') {\n return _wrapPatchedAnthropicStream(\n amplitudeAI,\n response as AsyncIterable<unknown>,\n startTime,\n args[0],\n );\n }\n return _wrapPatchedStream(\n amplitudeAI,\n response as AsyncIterable<unknown>,\n startTime,\n args[0],\n providerName,\n );\n }\n if (providerName === 'anthropic') {\n _trackAnthropicResponse(amplitudeAI, response, startTime, args[0]);\n } else {\n _trackCompletionResponse(\n amplitudeAI,\n response,\n startTime,\n args[0],\n providerName,\n );\n }\n return response;\n })\n .catch((err) => {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n args[0],\n providerName,\n );\n throw err;\n });\n }\n return result;\n };\n}\n\nfunction _makeAnthropicStreamWrapper(\n amplitudeAI: AmplitudeAI,\n): (original: (...args: unknown[]) => unknown, ...args: unknown[]) => unknown {\n return (original, ...args) => {\n const startTime = performance.now();\n const result = original(...args);\n if (!(result instanceof Promise)) return result;\n return result\n .then((response) => {\n if (_isAsyncIterable(response)) {\n return _wrapPatchedAnthropicStream(\n amplitudeAI,\n response as AsyncIterable<unknown>,\n startTime,\n args[0],\n );\n }\n const respObj = response as Record<string, unknown>;\n const stream = respObj.stream;\n if (_isAsyncIterable(stream)) {\n return {\n ...respObj,\n stream: _wrapPatchedAnthropicStream(\n amplitudeAI,\n stream as AsyncIterable<unknown>,\n startTime,\n args[0],\n ),\n };\n }\n return response;\n })\n .catch((err) => {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n args[0],\n 'anthropic',\n );\n throw err;\n });\n };\n}\n\nfunction _isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n value != null &&\n typeof (value as Record<symbol, unknown>)[Symbol.asyncIterator] ===\n 'function'\n );\n}\n\nasync function* _wrapPatchedStream(\n ai: AmplitudeAI,\n stream: AsyncIterable<unknown>,\n startTime: number,\n requestOpts: unknown,\n providerName: string,\n): AsyncGenerator<unknown> {\n if (providerName === 'gemini') {\n yield* _wrapPatchedGeminiStream(ai, stream, startTime, requestOpts);\n return;\n }\n const ctx = getActiveContext();\n if (ctx == null) {\n yield* stream;\n return;\n }\n\n let content = '';\n let model = 'unknown';\n let finishReason = '';\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let totalTokens: number | undefined;\n let isError = false;\n let errorMessage: string | undefined;\n\n try {\n for await (const chunk of stream) {\n const c = chunk as Record<string, unknown>;\n const choices = c.choices as Array<Record<string, unknown>> | undefined;\n const delta = choices?.[0]?.delta as Record<string, unknown> | undefined;\n if (delta?.content != null) content += String(delta.content);\n if (c.model != null) model = String(c.model);\n if (choices?.[0]?.finish_reason != null)\n finishReason = String(choices[0].finish_reason);\n const usage = c.usage as Record<string, number> | undefined;\n if (usage != null) {\n inputTokens = usage.prompt_tokens;\n outputTokens = usage.completion_tokens;\n totalTokens = usage.total_tokens;\n }\n yield chunk;\n }\n } catch (error) {\n isError = true;\n errorMessage = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n const latencyMs = performance.now() - startTime;\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content,\n sessionId: ctx.sessionId,\n model,\n provider: providerName,\n latencyMs,\n traceId: ctx.traceId,\n inputTokens,\n outputTokens,\n totalTokens,\n finishReason,\n agentId: ctx.agentId,\n env: ctx.env,\n isStreaming: true,\n isError,\n errorMessage,\n ..._contextExtras(ctx),\n });\n }\n}\n\nasync function* _wrapPatchedAnthropicStream(\n ai: AmplitudeAI,\n stream: AsyncIterable<unknown>,\n startTime: number,\n requestOpts: unknown,\n): AsyncGenerator<unknown> {\n const ctx = getActiveContext();\n if (ctx == null) {\n yield* stream;\n return;\n }\n const req = requestOpts as Record<string, unknown> | undefined;\n let content = '';\n let model = String(req?.model ?? 'unknown');\n let finishReason = '';\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let isError = false;\n let errorMessage: string | undefined;\n try {\n for await (const chunk of stream) {\n const c = chunk as Record<string, unknown>;\n if (c.type === 'message_start') {\n const message = c.message as Record<string, unknown> | undefined;\n if (typeof message?.model === 'string') model = message.model;\n const usage = message?.usage as Record<string, unknown> | undefined;\n if (typeof usage?.input_tokens === 'number') {\n inputTokens = usage.input_tokens;\n }\n }\n if (c.type === 'content_block_delta') {\n const delta = c.delta as Record<string, unknown> | undefined;\n if (typeof delta?.text === 'string') content += delta.text;\n }\n if (c.type === 'message_delta') {\n const delta = c.delta as Record<string, unknown> | undefined;\n if (typeof delta?.stop_reason === 'string') {\n finishReason = delta.stop_reason;\n } else if (typeof c.stop_reason === 'string') {\n // Backward-compatible fallback for alternate SDK payload shapes.\n finishReason = c.stop_reason;\n }\n const usage = c.usage as Record<string, unknown> | undefined;\n if (typeof usage?.output_tokens === 'number') {\n outputTokens = usage.output_tokens;\n }\n }\n if (c.type === 'message_stop') {\n const usage = c.usage as Record<string, unknown> | undefined;\n if (typeof usage?.output_tokens === 'number')\n outputTokens = usage.output_tokens;\n }\n yield chunk;\n }\n } catch (error) {\n isError = true;\n errorMessage = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n const latencyMs = performance.now() - startTime;\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content,\n sessionId: ctx.sessionId,\n model,\n provider: 'anthropic',\n latencyMs,\n traceId: ctx.traceId,\n inputTokens,\n outputTokens,\n finishReason,\n agentId: ctx.agentId,\n env: ctx.env,\n isStreaming: true,\n isError,\n errorMessage,\n ..._contextExtras(ctx),\n });\n }\n}\n\nasync function* _wrapPatchedGeminiStream(\n ai: AmplitudeAI,\n stream: AsyncIterable<unknown>,\n startTime: number,\n _requestOpts: unknown,\n): AsyncGenerator<unknown> {\n const ctx = getActiveContext();\n if (ctx == null) {\n yield* stream;\n return;\n }\n let content = '';\n const model = 'gemini';\n let finishReason = '';\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let totalTokens: number | undefined;\n let isError = false;\n let errorMessage: string | undefined;\n try {\n for await (const chunk of stream) {\n const c = chunk as Record<string, unknown>;\n const respObj = (c.response ?? c) as Record<string, unknown>;\n const textFn = respObj.text;\n if (typeof textFn === 'function') content += String(textFn());\n const usage = respObj.usageMetadata as\n | Record<string, unknown>\n | undefined;\n if (typeof usage?.promptTokenCount === 'number') {\n inputTokens = usage.promptTokenCount;\n }\n if (typeof usage?.candidatesTokenCount === 'number') {\n outputTokens = usage.candidatesTokenCount;\n }\n if (typeof usage?.totalTokenCount === 'number') {\n totalTokens = usage.totalTokenCount;\n }\n const candidates = respObj.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (typeof candidates?.[0]?.finishReason === 'string') {\n finishReason = candidates[0].finishReason;\n }\n yield chunk;\n }\n } catch (error) {\n isError = true;\n errorMessage = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content,\n sessionId: ctx.sessionId,\n model,\n provider: 'gemini',\n latencyMs: performance.now() - startTime,\n traceId: ctx.traceId,\n inputTokens,\n outputTokens,\n totalTokens,\n finishReason,\n agentId: ctx.agentId,\n env: ctx.env,\n isStreaming: true,\n isError,\n errorMessage,\n ..._contextExtras(ctx),\n });\n }\n}\n\nasync function* _wrapPatchedBedrockStream(\n ai: AmplitudeAI,\n stream: AsyncIterable<unknown>,\n startTime: number,\n requestOpts: unknown,\n): AsyncGenerator<unknown> {\n const ctx = getActiveContext();\n if (ctx == null) {\n yield* stream;\n return;\n }\n const opts = requestOpts as Record<string, unknown> | undefined;\n let model = String(opts?.modelId ?? 'unknown');\n let content = '';\n let finishReason = '';\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let totalTokens: number | undefined;\n let isError = false;\n let errorMessage: string | undefined;\n try {\n for await (const rawEvent of stream) {\n const event = rawEvent as Record<string, unknown>;\n const delta = (\n event.contentBlockDelta as Record<string, unknown> | undefined\n )?.delta as Record<string, unknown> | undefined;\n if (typeof delta?.text === 'string') content += delta.text;\n const messageStart = event.messageStart as\n | Record<string, unknown>\n | undefined;\n if (typeof messageStart?.model === 'string') model = messageStart.model;\n const messageStop = event.messageStop as\n | Record<string, unknown>\n | undefined;\n if (typeof messageStop?.stopReason === 'string') {\n finishReason = messageStop.stopReason;\n }\n const usage = (event.metadata as Record<string, unknown> | undefined)\n ?.usage as Record<string, unknown> | undefined;\n if (typeof usage?.inputTokens === 'number')\n inputTokens = usage.inputTokens;\n if (typeof usage?.outputTokens === 'number')\n outputTokens = usage.outputTokens;\n if (typeof usage?.totalTokens === 'number')\n totalTokens = usage.totalTokens;\n yield rawEvent;\n }\n } catch (error) {\n isError = true;\n errorMessage = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content,\n sessionId: ctx.sessionId,\n model,\n provider: 'bedrock',\n latencyMs: performance.now() - startTime,\n traceId: ctx.traceId,\n inputTokens,\n outputTokens,\n totalTokens,\n finishReason,\n agentId: ctx.agentId,\n env: ctx.env,\n isStreaming: true,\n isError,\n errorMessage,\n ..._contextExtras(ctx),\n });\n }\n}\n\n// ---------------------------------------------------------------\n// Constructor patching for SDKs with lazy getters (e.g., OpenAI v5+)\n// ---------------------------------------------------------------\n\nfunction _patchConstructor(\n cls: { prototype: Record<string, unknown> },\n moduleExports: Record<string, unknown>,\n exportKey: string,\n amplitudeAI: AmplitudeAI,\n providerName: string,\n): void {\n if (\n (moduleExports[exportKey] as Record<string, unknown> | undefined)\n ?.__amplitudeCtorPatched === true\n ) {\n return;\n }\n const originalCtor = cls as unknown as new (...args: unknown[]) => unknown;\n const handler: ProxyHandler<typeof originalCtor> = {\n construct(target, args, newTarget) {\n const instance = Reflect.construct(target, args, newTarget) as Record<\n string,\n unknown\n >;\n _patchInstanceCompletions(instance, amplitudeAI, providerName);\n return instance;\n },\n };\n const proxy = new Proxy(originalCtor, handler);\n (proxy as unknown as Record<string, unknown>).__amplitudeCtorPatched = true;\n\n const mod = moduleExports;\n let patchedExportKey: string | null = null;\n if (mod[exportKey] === originalCtor) {\n mod[exportKey] = proxy;\n patchedExportKey = exportKey;\n } else {\n for (const key of Object.keys(mod)) {\n if (mod[key] === originalCtor) {\n mod[key] = proxy;\n patchedExportKey = key;\n }\n }\n }\n if (patchedExportKey != null) {\n _activePatches.push({\n module: mod,\n method: patchedExportKey,\n original: originalCtor,\n provider: providerName,\n });\n }\n}\n\nfunction _patchOpenAIClass(\n maybeClass: unknown,\n moduleExports: Record<string, unknown>,\n exportKey: string,\n amplitudeAI: AmplitudeAI,\n providerName: string,\n): boolean {\n const OpenAIClass = maybeClass as\n | { prototype: Record<string, unknown> }\n | undefined;\n if (!OpenAIClass?.prototype) return false;\n\n const completionsProto = _getNestedPrototype(OpenAIClass, [\n 'chat',\n 'completions',\n ]);\n if (completionsProto) {\n const target = completionsProto as Record<string, unknown>;\n _patchMethod(\n target,\n 'create',\n _makeCompletionWrapper(amplitudeAI, providerName),\n providerName,\n );\n _patchMethod(\n target,\n 'parse',\n _makeCompletionWrapper(amplitudeAI, providerName),\n providerName,\n );\n } else {\n _patchConstructor(\n OpenAIClass,\n moduleExports,\n exportKey,\n amplitudeAI,\n providerName,\n );\n }\n\n const responsesProto = _getNestedPrototype(OpenAIClass, ['responses']);\n if (responsesProto) {\n const target = responsesProto as Record<string, unknown>;\n _patchMethod(\n target,\n 'create',\n _makeResponsesWrapper(amplitudeAI, providerName),\n providerName,\n );\n _patchMethod(\n target,\n 'stream',\n _makeResponsesWrapper(amplitudeAI, providerName),\n providerName,\n );\n }\n return true;\n}\n\nfunction _patchInstanceCompletions(\n instance: Record<string, unknown>,\n amplitudeAI: AmplitudeAI,\n providerName: string,\n): void {\n try {\n const chat = instance.chat as Record<string, unknown> | undefined;\n const completions = chat?.completions as\n | Record<string, unknown>\n | undefined;\n if (completions && typeof completions.create === 'function') {\n const original = completions.create.bind(completions);\n completions.create = (...args: unknown[]) =>\n _makeCompletionWrapper(amplitudeAI, providerName)(original, ...args);\n }\n if (completions && typeof completions.parse === 'function') {\n const originalParse = completions.parse.bind(completions);\n completions.parse = (...args: unknown[]) =>\n _makeCompletionWrapper(amplitudeAI, providerName)(\n originalParse,\n ...args,\n );\n }\n\n const responses = instance.responses as Record<string, unknown> | undefined;\n if (responses && typeof responses.create === 'function') {\n const originalResponses = responses.create.bind(responses);\n responses.create = (...args: unknown[]) =>\n _makeResponsesWrapper(amplitudeAI, providerName)(\n originalResponses,\n ...args,\n );\n }\n if (responses && typeof responses.stream === 'function') {\n const originalResponsesStream = responses.stream.bind(responses);\n responses.stream = (...args: unknown[]) =>\n _makeResponsesWrapper(amplitudeAI, providerName)(\n originalResponsesStream,\n ...args,\n );\n }\n } catch {\n // Instance structure doesn't match expectations — skip silently\n }\n}\n\nfunction _makeResponsesWrapper(\n amplitudeAI: AmplitudeAI,\n providerName: string,\n): (original: (...args: unknown[]) => unknown, ...args: unknown[]) => unknown {\n return (original, ...args) => {\n const startTime = performance.now();\n const result = original(...args);\n if (result instanceof Promise) {\n return result\n .then((response) => {\n if (_isAsyncIterable(response)) {\n return _wrapPatchedResponsesStream(\n amplitudeAI,\n response as AsyncIterable<unknown>,\n startTime,\n args[0],\n providerName,\n );\n }\n _trackResponsesResponse(\n amplitudeAI,\n response,\n startTime,\n args[0],\n providerName,\n );\n return response;\n })\n .catch((err) => {\n _trackCompletionError(\n amplitudeAI,\n err,\n startTime,\n args[0],\n providerName,\n );\n throw err;\n });\n }\n return result;\n };\n}\n\n// ---------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------\n\nfunction _getNestedPrototype(\n cls: { prototype: Record<string, unknown> },\n path: string[],\n): unknown {\n let current: unknown = cls.prototype;\n for (const key of path) {\n if (current == null || typeof current !== 'object') return null;\n const obj = current as Record<string, unknown>;\n if (typeof obj[key] === 'object' && obj[key] != null) {\n current = obj[key];\n } else {\n return null;\n }\n }\n return current;\n}\n\nfunction _trackCompletionResponse(\n ai: AmplitudeAI,\n response: unknown,\n startTime: number,\n _requestOpts: unknown,\n providerName: string,\n): void {\n if (response == null || typeof response !== 'object') return;\n\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const resp = response as Record<string, unknown>;\n const usage = resp.usage as Record<string, number> | undefined;\n const choices = resp.choices as Array<Record<string, unknown>> | undefined;\n const choice = choices?.[0];\n const message = choice?.message as Record<string, unknown> | undefined;\n\n const latencyMs = performance.now() - startTime;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: String(message?.content ?? ''),\n sessionId: ctx.sessionId,\n model: String(resp.model ?? 'unknown'),\n provider: providerName,\n latencyMs,\n traceId: ctx.traceId,\n inputTokens: usage?.prompt_tokens,\n outputTokens: usage?.completion_tokens,\n totalTokens: usage?.total_tokens,\n finishReason: String(choice?.finish_reason ?? ''),\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nfunction _trackAnthropicResponse(\n ai: AmplitudeAI,\n response: unknown,\n startTime: number,\n _requestOpts: unknown,\n): void {\n if (response == null || typeof response !== 'object') return;\n\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const resp = response as Record<string, unknown>;\n const usage = resp.usage as Record<string, number> | undefined;\n const content = resp.content as Array<Record<string, unknown>> | undefined;\n const textBlock = content?.find((b) => b.type === 'text');\n\n const latencyMs = performance.now() - startTime;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: String(textBlock?.text ?? ''),\n sessionId: ctx.sessionId,\n model: String(resp.model ?? 'unknown'),\n provider: 'anthropic',\n latencyMs,\n traceId: ctx.traceId,\n inputTokens: usage?.input_tokens,\n outputTokens: usage?.output_tokens,\n finishReason: String(resp.stop_reason ?? ''),\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nfunction _trackCompletionError(\n ai: AmplitudeAI,\n error: unknown,\n startTime: number,\n requestOpts: unknown,\n providerName: string,\n): void {\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const opts = requestOpts as Record<string, unknown> | undefined;\n const latencyMs = performance.now() - startTime;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: '',\n sessionId: ctx.sessionId,\n model: String(opts?.model ?? opts?.modelId ?? 'unknown'),\n provider: providerName,\n latencyMs,\n traceId: ctx.traceId,\n isError: true,\n errorMessage: error instanceof Error ? error.message : String(error),\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nfunction _trackGeminiResponse(\n ai: AmplitudeAI,\n response: unknown,\n startTime: number,\n): void {\n if (response == null || typeof response !== 'object') return;\n\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const resp = response as Record<string, unknown>;\n const respObj = (resp.response ?? resp) as Record<string, unknown>;\n const text = typeof respObj.text === 'function' ? String(respObj.text()) : '';\n const usage = respObj.usageMetadata as Record<string, number> | undefined;\n\n const latencyMs = performance.now() - startTime;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: text,\n sessionId: ctx.sessionId,\n model: 'gemini',\n provider: 'gemini',\n latencyMs,\n traceId: ctx.traceId,\n inputTokens: usage?.promptTokenCount,\n outputTokens: usage?.candidatesTokenCount,\n totalTokens: usage?.totalTokenCount,\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nfunction _trackBedrockResponse(\n ai: AmplitudeAI,\n response: unknown,\n startTime: number,\n requestOpts: unknown,\n): void {\n if (response == null || typeof response !== 'object') return;\n\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const resp = response as Record<string, unknown>;\n const output = resp.output as Record<string, unknown> | undefined;\n const message = output?.message as Record<string, unknown> | undefined;\n const content = message?.content as\n | Array<Record<string, unknown>>\n | undefined;\n const textBlock = content?.find((b) => b.text != null);\n const usage = resp.usage as Record<string, number> | undefined;\n const opts = requestOpts as Record<string, unknown> | undefined;\n\n const latencyMs = performance.now() - startTime;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: String(textBlock?.text ?? ''),\n sessionId: ctx.sessionId,\n model: String(opts?.modelId ?? 'unknown'),\n provider: 'bedrock',\n latencyMs,\n traceId: ctx.traceId,\n inputTokens: usage?.inputTokens,\n outputTokens: usage?.outputTokens,\n totalTokens: usage?.totalTokens,\n finishReason: String(resp.stopReason ?? ''),\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nfunction _trackResponsesResponse(\n ai: AmplitudeAI,\n response: unknown,\n startTime: number,\n requestOpts: unknown,\n providerName: string,\n): void {\n if (response == null || typeof response !== 'object') return;\n const ctx = getActiveContext();\n if (ctx == null) return;\n\n const resp = response as Record<string, unknown>;\n const usage = resp.usage as Record<string, unknown> | undefined;\n const outputText =\n typeof resp.output_text === 'string'\n ? resp.output_text\n : _extractResponsesText(resp.output);\n const opts = requestOpts as Record<string, unknown> | undefined;\n\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content: outputText,\n sessionId: ctx.sessionId,\n model: String(resp.model ?? opts?.model ?? 'unknown'),\n provider: providerName,\n latencyMs: performance.now() - startTime,\n traceId: ctx.traceId,\n inputTokens:\n typeof usage?.input_tokens === 'number'\n ? (usage.input_tokens as number)\n : undefined,\n outputTokens:\n typeof usage?.output_tokens === 'number'\n ? (usage.output_tokens as number)\n : undefined,\n totalTokens:\n typeof usage?.total_tokens === 'number'\n ? (usage.total_tokens as number)\n : undefined,\n reasoningTokens:\n typeof (\n usage?.output_tokens_details as Record<string, unknown> | undefined\n )?.reasoning_tokens === 'number'\n ? ((usage?.output_tokens_details as Record<string, unknown>)\n .reasoning_tokens as number)\n : undefined,\n finishReason: _extractResponsesFinishReason(resp),\n agentId: ctx.agentId,\n env: ctx.env,\n ..._contextExtras(ctx),\n });\n}\n\nasync function* _wrapPatchedResponsesStream(\n ai: AmplitudeAI,\n stream: AsyncIterable<unknown>,\n startTime: number,\n requestOpts: unknown,\n providerName: string,\n): AsyncGenerator<unknown> {\n const ctx = getActiveContext();\n if (ctx == null) {\n yield* stream;\n return;\n }\n const opts = requestOpts as Record<string, unknown> | undefined;\n const model = String(opts?.model ?? 'unknown');\n let content = '';\n let finishReason = '';\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let totalTokens: number | undefined;\n let isError = false;\n let errorMessage: string | undefined;\n\n try {\n for await (const event of stream) {\n const e = event as Record<string, unknown>;\n const type = e.type as string | undefined;\n if (type === 'response.output_text.delta') {\n const delta = e.delta;\n if (typeof delta === 'string') content += delta;\n } else if (type === 'response.completed') {\n const response = e.response as Record<string, unknown> | undefined;\n const usage = response?.usage as Record<string, unknown> | undefined;\n const outputText = response?.output_text;\n if (typeof outputText === 'string' && outputText.length > 0) {\n content = outputText;\n }\n if (typeof usage?.input_tokens === 'number')\n inputTokens = usage.input_tokens;\n if (typeof usage?.output_tokens === 'number')\n outputTokens = usage.output_tokens;\n if (typeof usage?.total_tokens === 'number')\n totalTokens = usage.total_tokens;\n const status = response?.status;\n if (typeof status === 'string') finishReason = status;\n }\n yield event;\n }\n } catch (error) {\n isError = true;\n errorMessage = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n ai.trackAiMessage({\n userId: ctx.userId ?? 'unknown',\n content,\n sessionId: ctx.sessionId,\n model,\n provider: providerName,\n latencyMs: performance.now() - startTime,\n traceId: ctx.traceId,\n inputTokens,\n outputTokens,\n totalTokens,\n finishReason,\n agentId: ctx.agentId,\n env: ctx.env,\n isStreaming: true,\n isError,\n errorMessage,\n ..._contextExtras(ctx),\n });\n }\n}\n\nfunction _extractResponsesText(output: unknown): string {\n if (!Array.isArray(output)) return '';\n let text = '';\n for (const item of output) {\n if (item == null || typeof item !== 'object') continue;\n const content = (item as Record<string, unknown>).content;\n if (!Array.isArray(content)) continue;\n for (const part of content) {\n if (part == null || typeof part !== 'object') continue;\n const partText = (part as Record<string, unknown>).text;\n if (typeof partText === 'string') text += partText;\n }\n }\n return text;\n}\n\nfunction _extractResponsesFinishReason(\n response: Record<string, unknown>,\n): string | undefined {\n if (typeof response.status === 'string' && response.status.length > 0) {\n return response.status;\n }\n const output = response.output;\n if (!Array.isArray(output) || output.length === 0) return undefined;\n const first = output[0] as Record<string, unknown> | undefined;\n return typeof first?.status === 'string' ? first.status : undefined;\n}\n\nfunction _contextExtras(ctx: {\n parentAgentId?: string | null;\n customerOrgId?: string | null;\n agentVersion?: string | null;\n context?: Record<string, unknown> | null;\n groups?: Record<string, unknown> | null;\n}): Record<string, unknown> {\n return {\n parentAgentId: ctx.parentAgentId ?? undefined,\n customerOrgId: ctx.customerOrgId ?? undefined,\n agentVersion: ctx.agentVersion ?? undefined,\n context: ctx.context ?? undefined,\n groups: ctx.groups ?? undefined,\n };\n}\n"],"mappings":";;;;;;;;AAyBA,IAAM,sBAAN,cAAkC,MAAM;AAExC,MAAMA,iBAAgC,EAAE;AACxC,MAAM,oCAAoB,IAAI,KAAa;AAC3C,MAAM,kCAAkB,IAAI,KAA0B;AAEtD,SAAgB,mBAA6B;AAC3C,QAAO,CAAC,GAAG,kBAAkB;;AAG/B,SAAS,iBACP,QACA,YACS;AAET,QADe,OAAO,aACP,uBAAuB;;AAGxC,SAAS,aACP,QACA,YACA,SAIA,cACM;CACN,MAAM,WAAW,OAAO;AACxB,KAAI,OAAO,aAAa,WAAY;AACpC,KAAI,iBAAiB,QAAQ,WAAW,CAAE;CAE1C,MAAM,UAAU,SAAyB,GAAG,MAAiB;AAC3D,SAAO,QAAQ,SAAS,KAAK,KAAK,EAAE,GAAG,KAAK;;AAE9C,CAAC,QAA+C,qBAAqB;AACrE,QAAO,cAAc;AAErB,gBAAe,KAAK;EAClB,QAAQ;EACR,QAAQ;EACR;EACA,UAAU;EACX,CAAC;AACF,mBAAkB,IAAI,aAAa;;AAGrC,SAAS,kBAAkB,cAAsB,IAAuB;CACtE,MAAM,gBAAgB,gBAAgB,IAAI,aAAa;AACvD,KAAI,iBAAiB,MAAM;AACzB,kBAAgB,IAAI,cAAc,GAAG;AACrC;;AAEF,KAAI,kBAAkB,GACpB,OAAM,IAAI,oBACR,aAAa,aAAa,iHAC3B;;AAIL,SAAgB,YAAY,SAInB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AAExD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,oHACD;AAEH,mBAAkB,UAAU,YAAY;AAExC,KAAI,kBAAkB,IAAI,QAAQ,KAAK,UAAU,aAAa,SAAS,CACrE,mBAAkB,IAAI,SAAS;;AAInC,SAAgB,eAAe,SAGtB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AAExD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,0IACD;AAEH,mBAAkB,aAAa,YAAY;CAE3C,MAAM,iBAAiB,IAAI;AAG3B,KAAI,CAAC,gBAAgB,UAAW;CAEhC,IAAI,WAAW;CACf,MAAM,gBAAgB,oBAAoB,gBAAgB,CAAC,WAAW,CAAC;AACvE,KAAI,eAAe;EACjB,MAAM,SAAS;AACf,eACE,QACA,UACA,uBAAuB,aAAa,YAAY,EAChD,YACD;AACD,eACE,QACA,UACA,4BAA4B,YAAY,EACxC,YACD;AACD,aACE,iBAAiB,QAAQ,SAAS,IAAI,iBAAiB,QAAQ,SAAS;;AAG5E,KAAI,SACF,mBAAkB,IAAI,YAAY;;AAItC,SAAgB,iBAAiB,SAGxB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AACxD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,oHACD;AAEH,mBAAkB,gBAAgB,YAAY;AAC9C,KACE,kBACE,IAAI,aACJ,KACA,eACA,aACA,eACD,CAED,mBAAkB,IAAI,eAAe;;AAIzC,SAAgB,YAAY,SAGnB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AAExD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,0IACD;AAEH,mBAAkB,UAAU,YAAY;CAExC,MAAM,cAAc,IAAI;AAGxB,KAAI,CAAC,aAAa,UAAW;CAC7B,MAAM,QAAQ,YAAY;AAC1B,cACE,OACA,uBACC,UAAU,GAAG,SAAS;EACrB,MAAM,WAAW,SAAS,GAAG,KAAK;AAClC,MAAI,YAAY,QAAQ,OAAO,aAAa,SAAU,QAAO;EAC7D,MAAM,QAAQ;AACd,MACE,OAAO,MAAM,oBAAoB,cACjC,EACG,MAAM,gBACJ,uBAAuB,MAG5B,cACE,OACA,oBACC,eAAe,GAAG,cAAc;GAC/B,MAAM,YAAY,YAAY,KAAK;GACnC,MAAM,SAAS,cAAc,GAAG,UAAU;AAC1C,OAAI,kBAAkB,QACpB,QAAO,OACJ,MAAM,aAAa;AAClB,yBAAqB,aAAa,UAAU,UAAU;AACtD,WAAO;KACP,CACD,OAAO,QAAQ;AACd,0BACE,aACA,KACA,WACA,UAAU,IACV,SACD;AACD,UAAM;KACN;AAEN,UAAO;KAET,SACD;AAEH,MACE,OAAO,MAAM,0BAA0B,cACvC,EACG,MAAM,sBACJ,uBAAuB,MAG5B,cACE,OACA,0BACC,eAAe,GAAG,cAAc;GAC/B,MAAM,YAAY,YAAY,KAAK;GACnC,MAAM,SAAS,cAAc,GAAG,UAAU;AAC1C,OAAI,kBAAkB,QACpB,QAAO,OACJ,MAAM,aAAa;IAClB,MAAM,aAAa;IACnB,MAAM,SAAS,WAAW;AAC1B,QAAI,iBAAiB,OAAO,CAC1B,QAAO;KACL,GAAG;KACH,QAAQ,mBACN,aACA,QACA,WACA,UAAU,IACV,SACD;KACF;AAEH,WAAO;KACP,CACD,OAAO,QAAQ;AACd,0BACE,aACA,KACA,WACA,UAAU,IACV,SACD;AACD,UAAM;KACN;AAEN,UAAO;KAET,SACD;AAEH,SAAO;IAET,SACD;AAED,KAAI,iBAAiB,OAAO,qBAAqB,CAC/C,mBAAkB,IAAI,SAAS;;AAInC,SAAgB,aAAa,SAGpB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AAExD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,wIACD;AAEH,mBAAkB,WAAW,YAAY;CAEzC,MAAM,eAAgB,IAAI,WAAW,IAAI,iBAAiB,IAAI;AAG9D,KAAI,CAAC,cAAc,UAAW;CAE9B,MAAM,YAAY,oBAAoB,cAAc,CAAC,OAAO,CAAC;CAC7D,IAAI,WAAW;AACf,KAAI,WAAW;EACb,MAAM,SAAS;AACf,eACE,QACA,YACA,uBAAuB,aAAa,UAAU,EAC9C,UACD;AACD,eACE,QACA,UACA,uBAAuB,aAAa,UAAU,EAC9C,UACD;AACD,aACE,iBAAiB,QAAQ,WAAW,IACpC,iBAAiB,QAAQ,SAAS;;AAGtC,KAAI,SACF,mBAAkB,IAAI,UAAU;;AAIpC,SAAgB,aAAa,SAGpB;CACP,MAAM,EAAE,gBAAgB;CACxB,MAAM,MACH,QAAQ,UAA6C;AAExD,KAAI,OAAO,KACT,OAAM,IAAI,MACR,8JACD;AAEH,mBAAkB,WAAW,YAAY;CAEzC,MAAM,cAAc,IAAI;AAGxB,KAAI,CAAC,aAAa,UAAW;AAE7B,cACE,YAAY,WACZ,SACC,UAAU,GAAG,SAAS;EACrB,MAAM,UAAU,KAAK;EACrB,MAAM,cAAc,OAAO,SAAS,aAAa,QAAQ,GAAG;EAC5D,MAAM,cACJ,YAAY,SAAS,kBAAkB,IACvC,YAAY,SAAS,wBAAwB;EAC/C,MAAM,YAAY,YAAY,KAAK;EACnC,MAAM,SAAS,SAAS,GAAG,KAAK;AAChC,MAAI,kBAAkB,QACpB,QAAO,OACJ,MAAM,aAAa;AAClB,OAAI,CAAC,YACH,QAAO;AAET,OAAI,YAAY,SAAS,wBAAwB,EAAE;IACjD,MAAM,aAAa;IACnB,MAAM,SAAS,WAAW;AAC1B,QAAI,iBAAiB,OAAO,CAC1B,QAAO;KACL,GAAG;KACH,QAAQ,0BACN,aACA,QACA,WACA,KAAK,GACN;KACF;SAGH,uBAAsB,aAAa,UAAU,WAAW,KAAK,GAAG;AAElE,UAAO;IACP,CACD,OAAO,QAAQ;AACd,OAAI,YACF,uBACE,aACA,KACA,WACA,KAAK,IACL,UACD;AAEH,SAAM;IACN;AAEN,SAAO;IAET,UACD;AAED,KACE,iBAAiB,YAAY,WAAsC,OAAO,CAE1E,mBAAkB,IAAI,UAAU;;;;;;;;;;;;;;;;;AAmBpC,SAAgB,MAAM,SAGT;CACX,MAAMC,UAAoB,EAAE;CAC5B,MAAM,OAAO,QAAQ,WAAW,EAAE;CAClC,MAAMC,YAKD;EACH;GACE,IAAI;GACJ,WAAW,oBAAoB,KAAK,UAAU;GAC9C,MAAM;GACN,WAAW;GACZ;EACD;GACE,IAAI;GACJ,WAAW,oBAAoB,KAAK,UAAU;GAC9C,MAAM;GACN,WAAW;GACZ;EACD;GACE,IAAI;GACJ,WAAW,uBAAuB,KAAK,aAAa;GACpD,MAAM;GACN,WAAW;GACZ;EACD;GACE,IAAI;GACJ,WAAW,oBAAoB,KAAK,UAAU;GAC9C,MAAM;GACN,WAAW;GACZ;EACD;GACE,IAAI;GACJ,WAAW,qBAAqB,KAAK,WAAW;GAChD,MAAM;GACN,WAAW;GACZ;EACD;GACE,IAAI;GACJ,WAAW,qBAAqB,KAAK,WAAW;GAChD,MAAM;GACN,WAAW;GACZ;EACF;AACD,MAAK,MAAM,EAAE,IAAI,WAAW,MAAM,eAAe,WAAW;AAC1D,MAAI,CAAC,UAAW;AAChB,MAAI;AACF,MAAG;IAAE,aAAa,QAAQ;IAAa,QAAQ,KAAK;IAAY,CAAC;AACjE,OAAI,kBAAkB,IAAI,KAAK,CAC7B,SAAQ,KAAK,KAAK;WAEb,OAAO;AACd,OAAI,iBAAiB,oBACnB,OAAM;;;AAKZ,QAAO;;AAGT,SAAgB,UAAgB;AAC9B,MAAK,MAAM,UAAU,eAAe,SAAS,EAAE;EAC7C,MAAM,SAAS,OAAO;AACtB,SAAO,OAAO,UAAU,OAAO;;AAEjC,gBAAe,SAAS;AACxB,mBAAkB,OAAO;AACzB,iBAAgB,OAAO;;AAGzB,SAAgB,gBAAsB;AACpC,oBAAmB,SAAS;;AAG9B,SAAgB,mBAAyB;AACvC,oBAAmB,YAAY;;AAGjC,SAAgB,gBAAsB;AACpC,oBAAmB,SAAS;;AAG9B,SAAgB,iBAAuB;AACrC,oBAAmB,UAAU;;AAG/B,SAAgB,iBAAuB;AACrC,oBAAmB,UAAU;;AAG/B,SAAgB,qBAA2B;AACzC,oBAAmB,eAAe;;AAGpC,SAAS,mBAAmB,cAA4B;CACtD,MAAMC,WAAqB,EAAE;AAC7B,MAAK,IAAI,IAAI,eAAe,SAAS,GAAG,KAAK,GAAG,KAAK;EACnD,MAAM,SAAS,eAAe;AAC9B,MAAI,UAAU,KAAM;AACpB,MACG,OAA4C,aAAa,cAC1D;GACA,MAAM,SAAS,OAAO;AACtB,UAAO,OAAO,UAAU,OAAO;AAC/B,YAAS,KAAK,EAAE;;;AAGpB,MAAK,MAAM,OAAO,SAChB,gBAAe,OAAO,KAAK,EAAE;AAE/B,mBAAkB,OAAO,aAAa;AACtC,iBAAgB,OAAO,aAAa;;AAOtC,SAAS,uBACP,aACA,cAC4E;AAC5E,SAAQ,UAAU,GAAG,SAAS;EAC5B,MAAM,YAAY,YAAY,KAAK;EACnC,MAAM,SAAS,SAAS,GAAG,KAAK;AAChC,MAAI,kBAAkB,QACpB,QAAO,OACJ,MAAM,aAAa;AAClB,OAAI,iBAAiB,SAAS,EAAE;AAC9B,QAAI,iBAAiB,YACnB,QAAO,4BACL,aACA,UACA,WACA,KAAK,GACN;AAEH,WAAO,mBACL,aACA,UACA,WACA,KAAK,IACL,aACD;;AAEH,OAAI,iBAAiB,YACnB,yBAAwB,aAAa,UAAU,WAAW,KAAK,GAAG;OAElE,0BACE,aACA,UACA,WACA,KAAK,IACL,aACD;AAEH,UAAO;IACP,CACD,OAAO,QAAQ;AACd,yBACE,aACA,KACA,WACA,KAAK,IACL,aACD;AACD,SAAM;IACN;AAEN,SAAO;;;AAIX,SAAS,4BACP,aAC4E;AAC5E,SAAQ,UAAU,GAAG,SAAS;EAC5B,MAAM,YAAY,YAAY,KAAK;EACnC,MAAM,SAAS,SAAS,GAAG,KAAK;AAChC,MAAI,EAAE,kBAAkB,SAAU,QAAO;AACzC,SAAO,OACJ,MAAM,aAAa;AAClB,OAAI,iBAAiB,SAAS,CAC5B,QAAO,4BACL,aACA,UACA,WACA,KAAK,GACN;GAEH,MAAM,UAAU;GAChB,MAAM,SAAS,QAAQ;AACvB,OAAI,iBAAiB,OAAO,CAC1B,QAAO;IACL,GAAG;IACH,QAAQ,4BACN,aACA,QACA,WACA,KAAK,GACN;IACF;AAEH,UAAO;IACP,CACD,OAAO,QAAQ;AACd,yBACE,aACA,KACA,WACA,KAAK,IACL,YACD;AACD,SAAM;IACN;;;AAIR,SAAS,iBAAiB,OAAiD;AACzE,QACE,SAAS,QACT,OAAQ,MAAkC,OAAO,mBAC/C;;AAIN,gBAAgB,mBACd,IACA,QACA,WACA,aACA,cACyB;AACzB,KAAI,iBAAiB,UAAU;AAC7B,SAAO,yBAAyB,IAAI,QAAQ,WAAW,YAAY;AACnE;;CAEF,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,MAAM;AACf,SAAO;AACP;;CAGF,IAAI,UAAU;CACd,IAAI,QAAQ;CACZ,IAAI,eAAe;CACnB,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAI,UAAU;CACd,IAAIC;AAEJ,KAAI;AACF,aAAW,MAAM,SAAS,QAAQ;GAChC,MAAM,IAAI;GACV,MAAM,UAAU,EAAE;GAClB,MAAM,QAAQ,UAAU,IAAI;AAC5B,OAAI,OAAO,WAAW,KAAM,YAAW,OAAO,MAAM,QAAQ;AAC5D,OAAI,EAAE,SAAS,KAAM,SAAQ,OAAO,EAAE,MAAM;AAC5C,OAAI,UAAU,IAAI,iBAAiB,KACjC,gBAAe,OAAO,QAAQ,GAAG,cAAc;GACjD,MAAM,QAAQ,EAAE;AAChB,OAAI,SAAS,MAAM;AACjB,kBAAc,MAAM;AACpB,mBAAe,MAAM;AACrB,kBAAc,MAAM;;AAEtB,SAAM;;UAED,OAAO;AACd,YAAU;AACV,iBAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACrE,QAAM;WACE;EACR,MAAM,YAAY,YAAY,KAAK,GAAG;AACtC,KAAG,eAAe;GAChB,QAAQ,IAAI,UAAU;GACtB;GACA,WAAW,IAAI;GACf;GACA,UAAU;GACV;GACA,SAAS,IAAI;GACb;GACA;GACA;GACA;GACA,SAAS,IAAI;GACb,KAAK,IAAI;GACT,aAAa;GACb;GACA;GACA,GAAG,eAAe,IAAI;GACvB,CAAC;;;AAIN,gBAAgB,4BACd,IACA,QACA,WACA,aACyB;CACzB,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,MAAM;AACf,SAAO;AACP;;CAEF,MAAM,MAAM;CACZ,IAAI,UAAU;CACd,IAAI,QAAQ,OAAO,KAAK,SAAS,UAAU;CAC3C,IAAI,eAAe;CACnB,IAAIH;CACJ,IAAIC;CACJ,IAAI,UAAU;CACd,IAAIE;AACJ,KAAI;AACF,aAAW,MAAM,SAAS,QAAQ;GAChC,MAAM,IAAI;AACV,OAAI,EAAE,SAAS,iBAAiB;IAC9B,MAAM,UAAU,EAAE;AAClB,QAAI,OAAO,SAAS,UAAU,SAAU,SAAQ,QAAQ;IACxD,MAAM,QAAQ,SAAS;AACvB,QAAI,OAAO,OAAO,iBAAiB,SACjC,eAAc,MAAM;;AAGxB,OAAI,EAAE,SAAS,uBAAuB;IACpC,MAAM,QAAQ,EAAE;AAChB,QAAI,OAAO,OAAO,SAAS,SAAU,YAAW,MAAM;;AAExD,OAAI,EAAE,SAAS,iBAAiB;IAC9B,MAAM,QAAQ,EAAE;AAChB,QAAI,OAAO,OAAO,gBAAgB,SAChC,gBAAe,MAAM;aACZ,OAAO,EAAE,gBAAgB,SAElC,gBAAe,EAAE;IAEnB,MAAM,QAAQ,EAAE;AAChB,QAAI,OAAO,OAAO,kBAAkB,SAClC,gBAAe,MAAM;;AAGzB,OAAI,EAAE,SAAS,gBAAgB;IAC7B,MAAM,QAAQ,EAAE;AAChB,QAAI,OAAO,OAAO,kBAAkB,SAClC,gBAAe,MAAM;;AAEzB,SAAM;;UAED,OAAO;AACd,YAAU;AACV,iBAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACrE,QAAM;WACE;EACR,MAAM,YAAY,YAAY,KAAK,GAAG;AACtC,KAAG,eAAe;GAChB,QAAQ,IAAI,UAAU;GACtB;GACA,WAAW,IAAI;GACf;GACA,UAAU;GACV;GACA,SAAS,IAAI;GACb;GACA;GACA;GACA,SAAS,IAAI;GACb,KAAK,IAAI;GACT,aAAa;GACb;GACA;GACA,GAAG,eAAe,IAAI;GACvB,CAAC;;;AAIN,gBAAgB,yBACd,IACA,QACA,WACA,cACyB;CACzB,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,MAAM;AACf,SAAO;AACP;;CAEF,IAAI,UAAU;CACd,MAAM,QAAQ;CACd,IAAI,eAAe;CACnB,IAAIH;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAI,UAAU;CACd,IAAIC;AACJ,KAAI;AACF,aAAW,MAAM,SAAS,QAAQ;GAChC,MAAM,IAAI;GACV,MAAM,UAAW,EAAE,YAAY;GAC/B,MAAM,SAAS,QAAQ;AACvB,OAAI,OAAO,WAAW,WAAY,YAAW,OAAO,QAAQ,CAAC;GAC7D,MAAM,QAAQ,QAAQ;AAGtB,OAAI,OAAO,OAAO,qBAAqB,SACrC,eAAc,MAAM;AAEtB,OAAI,OAAO,OAAO,yBAAyB,SACzC,gBAAe,MAAM;AAEvB,OAAI,OAAO,OAAO,oBAAoB,SACpC,eAAc,MAAM;GAEtB,MAAM,aAAa,QAAQ;AAG3B,OAAI,OAAO,aAAa,IAAI,iBAAiB,SAC3C,gBAAe,WAAW,GAAG;AAE/B,SAAM;;UAED,OAAO;AACd,YAAU;AACV,iBAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACrE,QAAM;WACE;AACR,KAAG,eAAe;GAChB,QAAQ,IAAI,UAAU;GACtB;GACA,WAAW,IAAI;GACf;GACA,UAAU;GACV,WAAW,YAAY,KAAK,GAAG;GAC/B,SAAS,IAAI;GACb;GACA;GACA;GACA;GACA,SAAS,IAAI;GACb,KAAK,IAAI;GACT,aAAa;GACb;GACA;GACA,GAAG,eAAe,IAAI;GACvB,CAAC;;;AAIN,gBAAgB,0BACd,IACA,QACA,WACA,aACyB;CACzB,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,MAAM;AACf,SAAO;AACP;;CAEF,MAAM,OAAO;CACb,IAAI,QAAQ,OAAO,MAAM,WAAW,UAAU;CAC9C,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAIH;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAI,UAAU;CACd,IAAIC;AACJ,KAAI;AACF,aAAW,MAAM,YAAY,QAAQ;GACnC,MAAM,QAAQ;GACd,MAAM,QACJ,MAAM,mBACL;AACH,OAAI,OAAO,OAAO,SAAS,SAAU,YAAW,MAAM;GACtD,MAAM,eAAe,MAAM;AAG3B,OAAI,OAAO,cAAc,UAAU,SAAU,SAAQ,aAAa;GAClE,MAAM,cAAc,MAAM;AAG1B,OAAI,OAAO,aAAa,eAAe,SACrC,gBAAe,YAAY;GAE7B,MAAM,QAAS,MAAM,UACjB;AACJ,OAAI,OAAO,OAAO,gBAAgB,SAChC,eAAc,MAAM;AACtB,OAAI,OAAO,OAAO,iBAAiB,SACjC,gBAAe,MAAM;AACvB,OAAI,OAAO,OAAO,gBAAgB,SAChC,eAAc,MAAM;AACtB,SAAM;;UAED,OAAO;AACd,YAAU;AACV,iBAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACrE,QAAM;WACE;AACR,KAAG,eAAe;GAChB,QAAQ,IAAI,UAAU;GACtB;GACA,WAAW,IAAI;GACf;GACA,UAAU;GACV,WAAW,YAAY,KAAK,GAAG;GAC/B,SAAS,IAAI;GACb;GACA;GACA;GACA;GACA,SAAS,IAAI;GACb,KAAK,IAAI;GACT,aAAa;GACb;GACA;GACA,GAAG,eAAe,IAAI;GACvB,CAAC;;;AAQN,SAAS,kBACP,KACA,eACA,WACA,aACA,cACM;AACN,KACG,cAAc,YACX,2BAA2B,KAE/B;CAEF,MAAM,eAAe;CAWrB,MAAM,QAAQ,IAAI,MAAM,cAV2B,EACjD,UAAU,QAAQ,MAAM,WAAW;EACjC,MAAM,WAAW,QAAQ,UAAU,QAAQ,MAAM,UAAU;AAI3D,4BAA0B,UAAU,aAAa,aAAa;AAC9D,SAAO;IAEV,CAC6C;AAC9C,CAAC,MAA6C,yBAAyB;CAEvE,MAAM,MAAM;CACZ,IAAIC,mBAAkC;AACtC,KAAI,IAAI,eAAe,cAAc;AACnC,MAAI,aAAa;AACjB,qBAAmB;OAEnB,MAAK,MAAM,OAAO,OAAO,KAAK,IAAI,CAChC,KAAI,IAAI,SAAS,cAAc;AAC7B,MAAI,OAAO;AACX,qBAAmB;;AAIzB,KAAI,oBAAoB,KACtB,gBAAe,KAAK;EAClB,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,UAAU;EACX,CAAC;;AAIN,SAAS,kBACP,YACA,eACA,WACA,aACA,cACS;CACT,MAAM,cAAc;AAGpB,KAAI,CAAC,aAAa,UAAW,QAAO;CAEpC,MAAM,mBAAmB,oBAAoB,aAAa,CACxD,QACA,cACD,CAAC;AACF,KAAI,kBAAkB;EACpB,MAAM,SAAS;AACf,eACE,QACA,UACA,uBAAuB,aAAa,aAAa,EACjD,aACD;AACD,eACE,QACA,SACA,uBAAuB,aAAa,aAAa,EACjD,aACD;OAED,mBACE,aACA,eACA,WACA,aACA,aACD;CAGH,MAAM,iBAAiB,oBAAoB,aAAa,CAAC,YAAY,CAAC;AACtE,KAAI,gBAAgB;EAClB,MAAM,SAAS;AACf,eACE,QACA,UACA,sBAAsB,aAAa,aAAa,EAChD,aACD;AACD,eACE,QACA,UACA,sBAAsB,aAAa,aAAa,EAChD,aACD;;AAEH,QAAO;;AAGT,SAAS,0BACP,UACA,aACA,cACM;AACN,KAAI;EAEF,MAAM,cADO,SAAS,MACI;AAG1B,MAAI,eAAe,OAAO,YAAY,WAAW,YAAY;GAC3D,MAAM,WAAW,YAAY,OAAO,KAAK,YAAY;AACrD,eAAY,UAAU,GAAG,SACvB,uBAAuB,aAAa,aAAa,CAAC,UAAU,GAAG,KAAK;;AAExE,MAAI,eAAe,OAAO,YAAY,UAAU,YAAY;GAC1D,MAAM,gBAAgB,YAAY,MAAM,KAAK,YAAY;AACzD,eAAY,SAAS,GAAG,SACtB,uBAAuB,aAAa,aAAa,CAC/C,eACA,GAAG,KACJ;;EAGL,MAAM,YAAY,SAAS;AAC3B,MAAI,aAAa,OAAO,UAAU,WAAW,YAAY;GACvD,MAAM,oBAAoB,UAAU,OAAO,KAAK,UAAU;AAC1D,aAAU,UAAU,GAAG,SACrB,sBAAsB,aAAa,aAAa,CAC9C,mBACA,GAAG,KACJ;;AAEL,MAAI,aAAa,OAAO,UAAU,WAAW,YAAY;GACvD,MAAM,0BAA0B,UAAU,OAAO,KAAK,UAAU;AAChE,aAAU,UAAU,GAAG,SACrB,sBAAsB,aAAa,aAAa,CAC9C,yBACA,GAAG,KACJ;;SAEC;;AAKV,SAAS,sBACP,aACA,cAC4E;AAC5E,SAAQ,UAAU,GAAG,SAAS;EAC5B,MAAM,YAAY,YAAY,KAAK;EACnC,MAAM,SAAS,SAAS,GAAG,KAAK;AAChC,MAAI,kBAAkB,QACpB,QAAO,OACJ,MAAM,aAAa;AAClB,OAAI,iBAAiB,SAAS,CAC5B,QAAO,4BACL,aACA,UACA,WACA,KAAK,IACL,aACD;AAEH,2BACE,aACA,UACA,WACA,KAAK,IACL,aACD;AACD,UAAO;IACP,CACD,OAAO,QAAQ;AACd,yBACE,aACA,KACA,WACA,KAAK,IACL,aACD;AACD,SAAM;IACN;AAEN,SAAO;;;AAQX,SAAS,oBACP,KACA,MACS;CACT,IAAIC,UAAmB,IAAI;AAC3B,MAAK,MAAM,OAAO,MAAM;AACtB,MAAI,WAAW,QAAQ,OAAO,YAAY,SAAU,QAAO;EAC3D,MAAM,MAAM;AACZ,MAAI,OAAO,IAAI,SAAS,YAAY,IAAI,QAAQ,KAC9C,WAAU,IAAI;MAEd,QAAO;;AAGX,QAAO;;AAGT,SAAS,yBACP,IACA,UACA,WACA,cACA,cACM;AACN,KAAI,YAAY,QAAQ,OAAO,aAAa,SAAU;CAEtD,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CACb,MAAM,QAAQ,KAAK;CAEnB,MAAM,SADU,KAAK,UACI;CACzB,MAAM,UAAU,QAAQ;CAExB,MAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS,OAAO,SAAS,WAAW,GAAG;EACvC,WAAW,IAAI;EACf,OAAO,OAAO,KAAK,SAAS,UAAU;EACtC,UAAU;EACV;EACA,SAAS,IAAI;EACb,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,aAAa,OAAO;EACpB,cAAc,OAAO,QAAQ,iBAAiB,GAAG;EACjD,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,SAAS,wBACP,IACA,UACA,WACA,cACM;AACN,KAAI,YAAY,QAAQ,OAAO,aAAa,SAAU;CAEtD,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CACb,MAAM,QAAQ,KAAK;CAEnB,MAAM,YADU,KAAK,SACM,MAAM,MAAM,EAAE,SAAS,OAAO;CAEzD,MAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS,OAAO,WAAW,QAAQ,GAAG;EACtC,WAAW,IAAI;EACf,OAAO,OAAO,KAAK,SAAS,UAAU;EACtC,UAAU;EACV;EACA,SAAS,IAAI;EACb,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,cAAc,OAAO,KAAK,eAAe,GAAG;EAC5C,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,SAAS,sBACP,IACA,OACA,WACA,aACA,cACM;CACN,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CACb,MAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS;EACT,WAAW,IAAI;EACf,OAAO,OAAO,MAAM,SAAS,MAAM,WAAW,UAAU;EACxD,UAAU;EACV;EACA,SAAS,IAAI;EACb,SAAS;EACT,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EACpE,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,SAAS,qBACP,IACA,UACA,WACM;AACN,KAAI,YAAY,QAAQ,OAAO,aAAa,SAAU;CAEtD,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CACb,MAAM,UAAW,KAAK,YAAY;CAClC,MAAM,OAAO,OAAO,QAAQ,SAAS,aAAa,OAAO,QAAQ,MAAM,CAAC,GAAG;CAC3E,MAAM,QAAQ,QAAQ;CAEtB,MAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS;EACT,WAAW,IAAI;EACf,OAAO;EACP,UAAU;EACV;EACA,SAAS,IAAI;EACb,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,aAAa,OAAO;EACpB,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,SAAS,sBACP,IACA,UACA,WACA,aACM;AACN,KAAI,YAAY,QAAQ,OAAO,aAAa,SAAU;CAEtD,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CAMb,MAAM,cALS,KAAK,QACI,UACC,UAGE,MAAM,MAAM,EAAE,QAAQ,KAAK;CACtD,MAAM,QAAQ,KAAK;CACnB,MAAM,OAAO;CAEb,MAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS,OAAO,WAAW,QAAQ,GAAG;EACtC,WAAW,IAAI;EACf,OAAO,OAAO,MAAM,WAAW,UAAU;EACzC,UAAU;EACV;EACA,SAAS,IAAI;EACb,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,aAAa,OAAO;EACpB,cAAc,OAAO,KAAK,cAAc,GAAG;EAC3C,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,SAAS,wBACP,IACA,UACA,WACA,aACA,cACM;AACN,KAAI,YAAY,QAAQ,OAAO,aAAa,SAAU;CACtD,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM;CAEjB,MAAM,OAAO;CACb,MAAM,QAAQ,KAAK;CACnB,MAAM,aACJ,OAAO,KAAK,gBAAgB,WACxB,KAAK,cACL,sBAAsB,KAAK,OAAO;CACxC,MAAM,OAAO;AAEb,IAAG,eAAe;EAChB,QAAQ,IAAI,UAAU;EACtB,SAAS;EACT,WAAW,IAAI;EACf,OAAO,OAAO,KAAK,SAAS,MAAM,SAAS,UAAU;EACrD,UAAU;EACV,WAAW,YAAY,KAAK,GAAG;EAC/B,SAAS,IAAI;EACb,aACE,OAAO,OAAO,iBAAiB,WAC1B,MAAM,eACP;EACN,cACE,OAAO,OAAO,kBAAkB,WAC3B,MAAM,gBACP;EACN,aACE,OAAO,OAAO,iBAAiB,WAC1B,MAAM,eACP;EACN,iBACE,QACE,OAAO,wBACN,qBAAqB,YAClB,OAAO,uBACN,mBACH;EACN,cAAc,8BAA8B,KAAK;EACjD,SAAS,IAAI;EACb,KAAK,IAAI;EACT,GAAG,eAAe,IAAI;EACvB,CAAC;;AAGJ,gBAAgB,4BACd,IACA,QACA,WACA,aACA,cACyB;CACzB,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,MAAM;AACf,SAAO;AACP;;CAEF,MAAM,OAAO;CACb,MAAM,QAAQ,OAAO,MAAM,SAAS,UAAU;CAC9C,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAIL;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAI,UAAU;CACd,IAAIC;AAEJ,KAAI;AACF,aAAW,MAAM,SAAS,QAAQ;GAChC,MAAM,IAAI;GACV,MAAM,OAAO,EAAE;AACf,OAAI,SAAS,8BAA8B;IACzC,MAAM,QAAQ,EAAE;AAChB,QAAI,OAAO,UAAU,SAAU,YAAW;cACjC,SAAS,sBAAsB;IACxC,MAAM,WAAW,EAAE;IACnB,MAAM,QAAQ,UAAU;IACxB,MAAM,aAAa,UAAU;AAC7B,QAAI,OAAO,eAAe,YAAY,WAAW,SAAS,EACxD,WAAU;AAEZ,QAAI,OAAO,OAAO,iBAAiB,SACjC,eAAc,MAAM;AACtB,QAAI,OAAO,OAAO,kBAAkB,SAClC,gBAAe,MAAM;AACvB,QAAI,OAAO,OAAO,iBAAiB,SACjC,eAAc,MAAM;IACtB,MAAM,SAAS,UAAU;AACzB,QAAI,OAAO,WAAW,SAAU,gBAAe;;AAEjD,SAAM;;UAED,OAAO;AACd,YAAU;AACV,iBAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACrE,QAAM;WACE;AACR,KAAG,eAAe;GAChB,QAAQ,IAAI,UAAU;GACtB;GACA,WAAW,IAAI;GACf;GACA,UAAU;GACV,WAAW,YAAY,KAAK,GAAG;GAC/B,SAAS,IAAI;GACb;GACA;GACA;GACA;GACA,SAAS,IAAI;GACb,KAAK,IAAI;GACT,aAAa;GACb;GACA;GACA,GAAG,eAAe,IAAI;GACvB,CAAC;;;AAIN,SAAS,sBAAsB,QAAyB;AACtD,KAAI,CAAC,MAAM,QAAQ,OAAO,CAAE,QAAO;CACnC,IAAI,OAAO;AACX,MAAK,MAAM,QAAQ,QAAQ;AACzB,MAAI,QAAQ,QAAQ,OAAO,SAAS,SAAU;EAC9C,MAAM,UAAW,KAAiC;AAClD,MAAI,CAAC,MAAM,QAAQ,QAAQ,CAAE;AAC7B,OAAK,MAAM,QAAQ,SAAS;AAC1B,OAAI,QAAQ,QAAQ,OAAO,SAAS,SAAU;GAC9C,MAAM,WAAY,KAAiC;AACnD,OAAI,OAAO,aAAa,SAAU,SAAQ;;;AAG9C,QAAO;;AAGT,SAAS,8BACP,UACoB;AACpB,KAAI,OAAO,SAAS,WAAW,YAAY,SAAS,OAAO,SAAS,EAClE,QAAO,SAAS;CAElB,MAAM,SAAS,SAAS;AACxB,KAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,OAAO,WAAW,EAAG,QAAO;CAC1D,MAAM,QAAQ,OAAO;AACrB,QAAO,OAAO,OAAO,WAAW,WAAW,MAAM,SAAS;;AAG5D,SAAS,eAAe,KAMI;AAC1B,QAAO;EACL,eAAe,IAAI,iBAAiB;EACpC,eAAe,IAAI,iBAAiB;EACpC,cAAc,IAAI,gBAAgB;EAClC,SAAS,IAAI,WAAW;EACxB,QAAQ,IAAI,UAAU;EACvB"}
@@ -0,0 +1,8 @@
1
+ //#region src/propagation.d.ts
2
+ declare function setDefaultPropagateContext(enabled: boolean): void;
3
+ declare function getDefaultPropagateContext(): boolean;
4
+ declare function injectContext(headers?: Record<string, string>): Record<string, string>;
5
+ declare function extractContext(headers: Record<string, string>): Record<string, string>;
6
+ //#endregion
7
+ export { extractContext, getDefaultPropagateContext, injectContext, setDefaultPropagateContext };
8
+ //# sourceMappingURL=propagation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagation.d.ts","names":[],"sources":["../src/propagation.ts"],"sourcesContent":[],"mappings":";iBAKgB,0BAAA;AAAA,iBAIA,0BAAA,CAAA,CAJ0B,EAAA,OAAA;AAI1B,iBAIA,aAAA,CAJ0B,OAAA,CAAA,EAK9B,MAL8B,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAMvC,MANuC,CAAA,MAAA,EAAA,MAAA,CAAA;AAI1B,iBAoBA,cAAA,CAnBJ,OACT,EAmBQ,MAnBF,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAoBN,MApBM,CAAA,MAAA,EAAA,MAAA,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { getActiveContext } from "./context.js";
2
+ import { randomUUID } from "node:crypto";
3
+
4
+ //#region src/propagation.ts
5
+ let _defaultPropagateContext = false;
6
+ function setDefaultPropagateContext(enabled) {
7
+ _defaultPropagateContext = enabled;
8
+ }
9
+ function getDefaultPropagateContext() {
10
+ return _defaultPropagateContext;
11
+ }
12
+ function injectContext(headers) {
13
+ const result = headers ? { ...headers } : {};
14
+ const ctx = getActiveContext();
15
+ if (ctx == null) return result;
16
+ result.traceparent = `00-${(ctx.traceId ?? randomUUID()).replace(/-/g, "").slice(0, 32).padEnd(32, "0")}-${randomUUID().replace(/-/g, "").slice(0, 16)}-01`;
17
+ if (ctx.sessionId) result["x-amplitude-session-id"] = ctx.sessionId;
18
+ if (ctx.agentId) result["x-amplitude-agent-id"] = ctx.agentId;
19
+ if (ctx.userId) result["x-amplitude-user-id"] = ctx.userId;
20
+ return result;
21
+ }
22
+ function extractContext(headers) {
23
+ const result = {};
24
+ const traceparent = headers.traceparent ?? "";
25
+ if (traceparent) {
26
+ const parts = traceparent.split("-");
27
+ if (parts.length >= 2 && parts[1]) result.traceId = parts[1];
28
+ }
29
+ if (!result.traceId) {
30
+ const xTrace = headers["x-trace-id"];
31
+ if (xTrace) result.traceId = xTrace;
32
+ }
33
+ for (const [header, key] of [
34
+ ["x-amplitude-session-id", "sessionId"],
35
+ ["x-amplitude-agent-id", "agentId"],
36
+ ["x-amplitude-user-id", "userId"]
37
+ ]) {
38
+ const val = headers[header];
39
+ if (val) result[key] = val;
40
+ }
41
+ return result;
42
+ }
43
+
44
+ //#endregion
45
+ export { extractContext, getDefaultPropagateContext, injectContext, setDefaultPropagateContext };
46
+ //# sourceMappingURL=propagation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagation.js","names":["result: Record<string, string>"],"sources":["../src/propagation.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { getActiveContext } from './context.js';\n\nlet _defaultPropagateContext = false;\n\nexport function setDefaultPropagateContext(enabled: boolean): void {\n _defaultPropagateContext = enabled;\n}\n\nexport function getDefaultPropagateContext(): boolean {\n return _defaultPropagateContext;\n}\n\nexport function injectContext(\n headers?: Record<string, string>,\n): Record<string, string> {\n const result = headers ? { ...headers } : {};\n\n const ctx = getActiveContext();\n if (ctx == null) return result;\n\n const traceId = ctx.traceId ?? randomUUID();\n const hexTrace = traceId.replace(/-/g, '').slice(0, 32).padEnd(32, '0');\n const parentId = randomUUID().replace(/-/g, '').slice(0, 16);\n result.traceparent = `00-${hexTrace}-${parentId}-01`;\n\n if (ctx.sessionId) result['x-amplitude-session-id'] = ctx.sessionId;\n if (ctx.agentId) result['x-amplitude-agent-id'] = ctx.agentId;\n if (ctx.userId) result['x-amplitude-user-id'] = ctx.userId;\n\n return result;\n}\n\nexport function extractContext(\n headers: Record<string, string>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n\n const traceparent = headers.traceparent ?? '';\n if (traceparent) {\n const parts = traceparent.split('-');\n if (parts.length >= 2 && parts[1]) result.traceId = parts[1];\n }\n if (!result.traceId) {\n const xTrace = headers['x-trace-id'];\n if (xTrace) result.traceId = xTrace;\n }\n\n const headerMap: Array<[string, string]> = [\n ['x-amplitude-session-id', 'sessionId'],\n ['x-amplitude-agent-id', 'agentId'],\n ['x-amplitude-user-id', 'userId'],\n ];\n\n for (const [header, key] of headerMap) {\n const val = headers[header];\n if (val) result[key] = val;\n }\n\n return result;\n}\n"],"mappings":";;;;AAGA,IAAI,2BAA2B;AAE/B,SAAgB,2BAA2B,SAAwB;AACjE,4BAA2B;;AAG7B,SAAgB,6BAAsC;AACpD,QAAO;;AAGT,SAAgB,cACd,SACwB;CACxB,MAAM,SAAS,UAAU,EAAE,GAAG,SAAS,GAAG,EAAE;CAE5C,MAAM,MAAM,kBAAkB;AAC9B,KAAI,OAAO,KAAM,QAAO;AAKxB,QAAO,cAAc,OAHL,IAAI,WAAW,YAAY,EAClB,QAAQ,MAAM,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAEnC,GADnB,YAAY,CAAC,QAAQ,MAAM,GAAG,CAAC,MAAM,GAAG,GAAG,CACZ;AAEhD,KAAI,IAAI,UAAW,QAAO,4BAA4B,IAAI;AAC1D,KAAI,IAAI,QAAS,QAAO,0BAA0B,IAAI;AACtD,KAAI,IAAI,OAAQ,QAAO,yBAAyB,IAAI;AAEpD,QAAO;;AAGT,SAAgB,eACd,SACwB;CACxB,MAAMA,SAAiC,EAAE;CAEzC,MAAM,cAAc,QAAQ,eAAe;AAC3C,KAAI,aAAa;EACf,MAAM,QAAQ,YAAY,MAAM,IAAI;AACpC,MAAI,MAAM,UAAU,KAAK,MAAM,GAAI,QAAO,UAAU,MAAM;;AAE5D,KAAI,CAAC,OAAO,SAAS;EACnB,MAAM,SAAS,QAAQ;AACvB,MAAI,OAAQ,QAAO,UAAU;;AAS/B,MAAK,MAAM,CAAC,QAAQ,QANuB;EACzC,CAAC,0BAA0B,YAAY;EACvC,CAAC,wBAAwB,UAAU;EACnC,CAAC,uBAAuB,SAAS;EAClC,EAEsC;EACrC,MAAM,MAAM,QAAQ;AACpB,MAAI,IAAK,QAAO,OAAO;;AAGzB,QAAO"}
@@ -0,0 +1,44 @@
1
+ import { PrivacyConfig } from "../core/privacy.js";
2
+ import { AmplitudeLike, AmplitudeOrAI, AnthropicResponse, TrackFn } from "../types.js";
3
+ import { BaseAIProvider, ProviderTrackOptions } from "./base.js";
4
+
5
+ //#region src/providers/anthropic.d.ts
6
+
7
+ declare const ANTHROPIC_AVAILABLE: boolean;
8
+ declare const _AnthropicModule: Record<string, unknown> | null;
9
+ interface AnthropicOptions {
10
+ amplitude: AmplitudeOrAI;
11
+ apiKey?: string;
12
+ privacyConfig?: PrivacyConfig | null;
13
+ propagateContext?: boolean;
14
+ /** Pass the `@anthropic-ai/sdk` module directly to bypass `tryRequire` (required in bundler environments). */
15
+ anthropicModule?: unknown;
16
+ }
17
+ declare class Anthropic<TClient extends Record<string, unknown> = Record<string, unknown>> extends BaseAIProvider {
18
+ private _client;
19
+ readonly messages: WrappedMessages;
20
+ private _propagateContext;
21
+ constructor(options: AnthropicOptions);
22
+ get client(): TClient;
23
+ }
24
+ declare class WrappedMessages {
25
+ _original: Record<string, unknown>;
26
+ private _trackFn;
27
+ private _amplitude;
28
+ private _privacyConfig;
29
+ private _propagateContext;
30
+ constructor(client: unknown, trackFn: TrackFn, amplitude: AmplitudeLike, privacyConfig: PrivacyConfig | null, propagateContext: boolean);
31
+ create(params: Record<string, unknown>, amplitudeOverrides?: ProviderTrackOptions): Promise<AnthropicResponse | AsyncIterable<unknown>>;
32
+ private _wrapStream;
33
+ private _withContextHeaders;
34
+ private _trackInputMessages;
35
+ }
36
+ declare function extractAnthropicSystemPrompt(system: unknown): string | undefined;
37
+ declare function extractAnthropicContent(content: Array<Record<string, unknown>> | undefined): {
38
+ text: string;
39
+ reasoning: string | undefined;
40
+ toolCalls: Array<Record<string, unknown>>;
41
+ };
42
+ //#endregion
43
+ export { ANTHROPIC_AVAILABLE, Anthropic, AnthropicOptions, WrappedMessages, _AnthropicModule, extractAnthropicContent, extractAnthropicSystemPrompt };
44
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","names":[],"sources":["../../src/providers/anthropic.ts"],"sourcesContent":[],"mappings":";;;;;;AAyBM,cADO,mBACW,EAAM,OAAA;AAI9B,cAJM,gBAI2B,EAJT,MAKX,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAOA,UAVD,gBAAA,CAUC;EAA0B,SAAA,EAT/B,aAS+B;EAGvB,MAAA,CAAA,EAAA,MAAA;EAGE,aAAA,CAAA,EAbL,aAaK,GAAA,IAAA;EAmCP,gBAAA,CAAA,EAAA,OAAA;EAxCN;EAAc,eAAA,CAAA,EAAA,OAAA;AA6CxB;AACa,cAhDA,SAgDA,CAAA,gBA/CK,MA+CL,CAAA,MAAA,EAAA,OAAA,CAAA,GA/C+B,MA+C/B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SA9CH,cAAA,CA8CG;EAQA,QAAA,OAAA;EACE,SAAA,QAAA,EArDM,eAqDN;EACI,QAAA,iBAAA;EAeP,WAAA,CAAA,OAAA,EAlEW,gBAkEX;EACa,IAAA,MAAA,CAAA,CAAA,EAhCT,OAgCS;;AACQ,cA5BpB,eAAA,CA4BoB;EAA5B,SAAA,EA3BQ,MA2BR,CAAA,MAAA,EAAA,OAAA,CAAA;EAAO,QAAA,QAAA;EA+SI,QAAA,UAAA;EAmBA,QAAA,cAAA;EACC,QAAA,iBAAA;EAAN,WAAA,CAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAtVE,OAsVF,EAAA,SAAA,EArVI,aAqVJ,EAAA,aAAA,EApVQ,aAoVR,GAAA,IAAA,EAAA,gBAAA,EAAA,OAAA;EAIQ,MAAA,CAAA,MAAA,EAzUP,MAyUO,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,kBAAA,CAAA,EAxUM,oBAwUN,CAAA,EAvUd,OAuUc,CAvUN,iBAuUM,GAvUc,aAuUd,CAAA,OAAA,CAAA,CAAA;EAAN,QAAA,WAAA;EAAK,QAAA,mBAAA;;;iBAxBF,4BAAA;iBAmBA,uBAAA,UACL,MAAM;;;aAIJ,MAAM"}
@@ -0,0 +1,287 @@
1
+ import { trackUserMessage } from "../core/tracking.js";
2
+ import { getDefaultPropagateContext, injectContext } from "../propagation.js";
3
+ import { tryRequire } from "../utils/resolve-module.js";
4
+ import { calculateCost } from "../utils/costs.js";
5
+ import { StreamingAccumulator } from "../utils/streaming.js";
6
+ import { BaseAIProvider, applySessionContext } from "./base.js";
7
+
8
+ //#region src/providers/anthropic.ts
9
+ const _resolved = tryRequire("@anthropic-ai/sdk");
10
+ const ANTHROPIC_AVAILABLE = _resolved != null;
11
+ const _AnthropicModule = _resolved;
12
+ var Anthropic = class extends BaseAIProvider {
13
+ _client;
14
+ messages;
15
+ _propagateContext;
16
+ constructor(options) {
17
+ super({
18
+ amplitude: options.amplitude,
19
+ privacyConfig: options.privacyConfig,
20
+ providerName: "anthropic"
21
+ });
22
+ const mod = options.anthropicModule ?? _AnthropicModule;
23
+ if (mod == null) throw new Error("@anthropic-ai/sdk package is required. Install it with: npm install @anthropic-ai/sdk — or pass the module directly via the anthropicModule option.");
24
+ const AnthropicSDK = mod.Anthropic;
25
+ const clientOpts = {};
26
+ if (options.apiKey) clientOpts.apiKey = options.apiKey;
27
+ this._client = new AnthropicSDK(clientOpts);
28
+ this._propagateContext = options.propagateContext ?? getDefaultPropagateContext();
29
+ this.messages = new WrappedMessages(this._client, this.trackFn(), this._amplitude, this._privacyConfig, this._propagateContext);
30
+ }
31
+ get client() {
32
+ return this._client;
33
+ }
34
+ };
35
+ var WrappedMessages = class {
36
+ _original;
37
+ _trackFn;
38
+ _amplitude;
39
+ _privacyConfig;
40
+ _propagateContext;
41
+ constructor(client, trackFn, amplitude, privacyConfig, propagateContext) {
42
+ this._original = client.messages;
43
+ this._trackFn = typeof trackFn === "function" ? trackFn : trackFn.trackFn();
44
+ this._amplitude = amplitude;
45
+ this._privacyConfig = privacyConfig;
46
+ this._propagateContext = propagateContext;
47
+ }
48
+ async create(params, amplitudeOverrides) {
49
+ const createFn = this._original.create;
50
+ const startTime = performance.now();
51
+ const requestParams = this._withContextHeaders(params);
52
+ const ctx = applySessionContext(amplitudeOverrides);
53
+ try {
54
+ this._trackInputMessages(requestParams.messages, ctx, amplitudeOverrides?.trackInputMessages ?? true);
55
+ const response = await createFn.call(this._original, requestParams);
56
+ if (requestParams.stream === true && _isAsyncIterable(response)) return this._wrapStream(response, requestParams, startTime, ctx);
57
+ const latencyMs = performance.now() - startTime;
58
+ const resp = response;
59
+ const usage = resp.usage;
60
+ const extracted = extractAnthropicContent(resp.content);
61
+ const firstTextBlock = resp.content?.find((b) => b.type === "text");
62
+ const modelName = String(resp.model ?? requestParams.model ?? "unknown");
63
+ const cacheRead = usage?.cache_read_input_tokens ?? 0;
64
+ const cacheCreation = usage?.cache_creation_input_tokens ?? 0;
65
+ const rawInput = usage?.input_tokens ?? 0;
66
+ const normalizedInput = cacheRead || cacheCreation ? rawInput + cacheRead + cacheCreation : rawInput;
67
+ let costUsd = null;
68
+ if (usage?.input_tokens != null && usage?.output_tokens != null) try {
69
+ costUsd = calculateCost({
70
+ modelName,
71
+ inputTokens: normalizedInput,
72
+ outputTokens: usage.output_tokens,
73
+ cacheReadInputTokens: cacheRead,
74
+ cacheCreationInputTokens: cacheCreation
75
+ });
76
+ } catch {}
77
+ this._trackFn({
78
+ userId: ctx.userId ?? "unknown",
79
+ modelName,
80
+ provider: "anthropic",
81
+ responseContent: String(firstTextBlock?.text ?? ""),
82
+ reasoningContent: extracted.reasoning,
83
+ latencyMs,
84
+ sessionId: ctx.sessionId,
85
+ traceId: ctx.traceId,
86
+ turnId: ctx.turnId ?? void 0,
87
+ agentId: ctx.agentId,
88
+ env: ctx.env,
89
+ inputTokens: normalizedInput || void 0,
90
+ outputTokens: usage?.output_tokens,
91
+ cacheReadInputTokens: cacheRead || void 0,
92
+ cacheCreationInputTokens: cacheCreation || void 0,
93
+ totalCostUsd: costUsd,
94
+ finishReason: resp.stop_reason,
95
+ toolCalls: extracted.toolCalls.length > 0 ? extracted.toolCalls : void 0,
96
+ isStreaming: false,
97
+ systemPrompt: extractAnthropicSystemPrompt(requestParams.system),
98
+ temperature: requestParams.temperature,
99
+ maxOutputTokens: requestParams.max_tokens,
100
+ topP: requestParams.top_p
101
+ });
102
+ return response;
103
+ } catch (error) {
104
+ const latencyMs = performance.now() - startTime;
105
+ this._trackFn({
106
+ userId: ctx.userId ?? "unknown",
107
+ modelName: String(requestParams.model ?? "unknown"),
108
+ provider: "anthropic",
109
+ responseContent: "",
110
+ latencyMs,
111
+ sessionId: ctx.sessionId,
112
+ traceId: ctx.traceId,
113
+ agentId: ctx.agentId,
114
+ env: ctx.env,
115
+ isError: true,
116
+ errorMessage: error instanceof Error ? error.message : String(error)
117
+ });
118
+ throw error;
119
+ }
120
+ }
121
+ async *_wrapStream(stream, params, _startTime, sessionCtx) {
122
+ const accumulator = new StreamingAccumulator();
123
+ accumulator.model = String(params.model ?? "unknown");
124
+ let reasoningContent = "";
125
+ try {
126
+ for await (const event of stream) {
127
+ const evt = event;
128
+ const type = evt.type;
129
+ if (type === "content_block_delta") {
130
+ const delta = evt.delta;
131
+ if (delta?.type === "text_delta" && delta.text != null) accumulator.addContent(String(delta.text));
132
+ else if (delta?.type === "thinking_delta" && delta.thinking != null) reasoningContent += String(delta.thinking);
133
+ } else if (type === "content_block_start") {
134
+ const block = evt.content_block;
135
+ if (block?.type === "tool_use") accumulator.addToolCall({
136
+ type: "function",
137
+ id: block.id,
138
+ function: {
139
+ name: String(block.name ?? ""),
140
+ arguments: typeof block.input === "string" ? block.input : JSON.stringify(block.input ?? {})
141
+ }
142
+ });
143
+ } else if (type === "message_delta") {
144
+ const delta = evt.delta;
145
+ if (delta?.stop_reason != null) accumulator.finishReason = String(delta.stop_reason);
146
+ const usage = evt.usage;
147
+ if (usage != null) accumulator.setUsage({ outputTokens: usage.output_tokens });
148
+ } else if (type === "message_start") {
149
+ const message = evt.message;
150
+ if (message?.model != null) accumulator.model = String(message.model);
151
+ const usage = message?.usage;
152
+ if (usage != null) accumulator.setUsage({
153
+ inputTokens: usage.input_tokens,
154
+ cacheReadTokens: usage.cache_read_input_tokens,
155
+ cacheCreationTokens: usage.cache_creation_input_tokens
156
+ });
157
+ }
158
+ yield event;
159
+ }
160
+ } catch (error) {
161
+ accumulator.setError(error instanceof Error ? error.message : String(error));
162
+ throw error;
163
+ } finally {
164
+ const state = accumulator.getState();
165
+ const modelName = String(accumulator.model ?? params.model ?? "unknown");
166
+ const streamCacheRead = state.cacheReadTokens ?? 0;
167
+ const streamCacheCreation = state.cacheCreationTokens ?? 0;
168
+ const streamRawInput = state.inputTokens ?? 0;
169
+ const streamNormalizedInput = streamCacheRead || streamCacheCreation ? streamRawInput + streamCacheRead + streamCacheCreation : streamRawInput;
170
+ let costUsd = null;
171
+ if (state.inputTokens != null && state.outputTokens != null) try {
172
+ costUsd = calculateCost({
173
+ modelName,
174
+ inputTokens: streamNormalizedInput,
175
+ outputTokens: state.outputTokens,
176
+ cacheReadInputTokens: streamCacheRead,
177
+ cacheCreationInputTokens: streamCacheCreation
178
+ });
179
+ } catch {}
180
+ this._trackFn({
181
+ userId: sessionCtx.userId ?? "unknown",
182
+ modelName,
183
+ provider: "anthropic",
184
+ responseContent: state.content,
185
+ latencyMs: accumulator.elapsedMs,
186
+ sessionId: sessionCtx.sessionId,
187
+ traceId: sessionCtx.traceId,
188
+ turnId: sessionCtx.turnId ?? void 0,
189
+ agentId: sessionCtx.agentId,
190
+ env: sessionCtx.env,
191
+ inputTokens: streamNormalizedInput || void 0,
192
+ outputTokens: state.outputTokens,
193
+ cacheReadInputTokens: streamCacheRead || void 0,
194
+ cacheCreationInputTokens: streamCacheCreation || void 0,
195
+ totalCostUsd: costUsd,
196
+ finishReason: state.finishReason,
197
+ toolCalls: state.toolCalls.length > 0 ? state.toolCalls : void 0,
198
+ providerTtfbMs: state.ttfbMs,
199
+ isStreaming: true,
200
+ isError: state.isError,
201
+ errorMessage: state.errorMessage,
202
+ reasoningContent: reasoningContent || void 0,
203
+ systemPrompt: extractAnthropicSystemPrompt(params.system),
204
+ temperature: params.temperature,
205
+ maxOutputTokens: params.max_tokens,
206
+ topP: params.top_p
207
+ });
208
+ }
209
+ }
210
+ _withContextHeaders(params) {
211
+ if (!this._propagateContext) return params;
212
+ const injected = injectContext(params.extra_headers ?? params.headers);
213
+ return {
214
+ ...params,
215
+ extra_headers: injected
216
+ };
217
+ }
218
+ _trackInputMessages(messages, ctx, shouldTrackInputMessages) {
219
+ if (!shouldTrackInputMessages) return;
220
+ if (ctx.userId == null || ctx.sessionId == null) return;
221
+ if (!Array.isArray(messages)) return;
222
+ for (const msg of messages) {
223
+ if (msg?.role !== "user") continue;
224
+ const rawContent = msg?.content;
225
+ const content = Array.isArray(rawContent) ? rawContent.map((part) => {
226
+ if (typeof part === "string") return part;
227
+ const text = part?.text;
228
+ return typeof text === "string" ? text : "";
229
+ }).join("") : typeof rawContent === "string" ? rawContent : "";
230
+ if (!content) continue;
231
+ trackUserMessage({
232
+ amplitude: this._amplitude,
233
+ userId: ctx.userId,
234
+ messageContent: content,
235
+ sessionId: ctx.sessionId,
236
+ traceId: ctx.traceId,
237
+ turnId: ctx.turnId ?? void 0,
238
+ agentId: ctx.agentId,
239
+ parentAgentId: ctx.parentAgentId,
240
+ customerOrgId: ctx.customerOrgId,
241
+ env: ctx.env,
242
+ groups: ctx.groups,
243
+ privacyConfig: this._privacyConfig
244
+ });
245
+ }
246
+ }
247
+ };
248
+ function _isAsyncIterable(value) {
249
+ return value != null && typeof value[Symbol.asyncIterator] === "function";
250
+ }
251
+ function extractAnthropicSystemPrompt(system) {
252
+ if (typeof system === "string") return system;
253
+ if (Array.isArray(system)) return system.map((block) => {
254
+ if (typeof block === "string") return block;
255
+ if (typeof block === "object" && block != null) return String(block.text ?? "");
256
+ return "";
257
+ }).filter(Boolean).join("\n");
258
+ }
259
+ function extractAnthropicContent(content) {
260
+ let text = "";
261
+ let reasoning;
262
+ const toolCalls = [];
263
+ if (!content) return {
264
+ text,
265
+ reasoning,
266
+ toolCalls
267
+ };
268
+ for (const block of content) if (block.type === "text") text += String(block.text ?? "");
269
+ else if (block.type === "thinking") reasoning = String(block.thinking ?? "");
270
+ else if (block.type === "tool_use") toolCalls.push({
271
+ type: "function",
272
+ id: block.id,
273
+ function: {
274
+ name: String(block.name ?? ""),
275
+ arguments: typeof block.input === "string" ? block.input : JSON.stringify(block.input ?? {})
276
+ }
277
+ });
278
+ return {
279
+ text,
280
+ reasoning,
281
+ toolCalls
282
+ };
283
+ }
284
+
285
+ //#endregion
286
+ export { ANTHROPIC_AVAILABLE, Anthropic, WrappedMessages, _AnthropicModule, extractAnthropicContent, extractAnthropicSystemPrompt };
287
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","names":["_AnthropicModule: Record<string, unknown> | null","clientOpts: Record<string, unknown>","costUsd: number | null","reasoning: string | undefined","toolCalls: Array<Record<string, unknown>>"],"sources":["../../src/providers/anthropic.ts"],"sourcesContent":["/**\n * Anthropic provider wrapper with automatic tracking.\n */\n\nimport type { PrivacyConfig } from '../core/privacy.js';\nimport { trackUserMessage } from '../core/tracking.js';\nimport { getDefaultPropagateContext, injectContext } from '../propagation.js';\nimport {\n resolveAmplitude,\n type AmplitudeLike,\n type AmplitudeOrAI,\n type AnthropicResponse,\n type TrackFn,\n} from '../types.js';\nimport { calculateCost } from '../utils/costs.js';\nimport { tryRequire } from '../utils/resolve-module.js';\nimport { StreamingAccumulator } from '../utils/streaming.js';\nimport {\n applySessionContext,\n BaseAIProvider,\n type ProviderTrackOptions,\n} from './base.js';\n\nconst _resolved = tryRequire('@anthropic-ai/sdk');\nexport const ANTHROPIC_AVAILABLE = _resolved != null;\nconst _AnthropicModule: Record<string, unknown> | null = _resolved;\n\nexport { _AnthropicModule };\n\nexport interface AnthropicOptions {\n amplitude: AmplitudeOrAI;\n apiKey?: string;\n privacyConfig?: PrivacyConfig | null;\n propagateContext?: boolean;\n /** Pass the `@anthropic-ai/sdk` module directly to bypass `tryRequire` (required in bundler environments). */\n anthropicModule?: unknown;\n}\n\nexport class Anthropic<\n TClient extends Record<string, unknown> = Record<string, unknown>,\n> extends BaseAIProvider {\n private _client: TClient;\n readonly messages: WrappedMessages;\n private _propagateContext: boolean;\n\n constructor(options: AnthropicOptions) {\n super({\n amplitude: options.amplitude,\n privacyConfig: options.privacyConfig,\n providerName: 'anthropic',\n });\n\n const mod =\n (options.anthropicModule as Record<string, unknown> | null) ??\n _AnthropicModule;\n if (mod == null) {\n throw new Error(\n '@anthropic-ai/sdk package is required. Install it with: npm install @anthropic-ai/sdk — or pass the module directly via the anthropicModule option.',\n );\n }\n\n const AnthropicSDK = mod.Anthropic as new (\n opts: Record<string, unknown>,\n ) => unknown;\n\n const clientOpts: Record<string, unknown> = {};\n if (options.apiKey) clientOpts.apiKey = options.apiKey;\n\n this._client = new AnthropicSDK(clientOpts) as TClient;\n this._propagateContext =\n options.propagateContext ?? getDefaultPropagateContext();\n this.messages = new WrappedMessages(\n this._client,\n this.trackFn(),\n this._amplitude,\n this._privacyConfig,\n this._propagateContext,\n );\n }\n\n get client(): TClient {\n return this._client;\n }\n}\n\nexport class WrappedMessages {\n _original: Record<string, unknown>;\n private _trackFn: TrackFn;\n private _amplitude: AmplitudeLike;\n private _privacyConfig: PrivacyConfig | null;\n private _propagateContext: boolean;\n\n constructor(\n client: unknown,\n trackFn: TrackFn,\n amplitude: AmplitudeLike,\n privacyConfig: PrivacyConfig | null,\n propagateContext: boolean,\n ) {\n const clientObj = client as Record<string, unknown>;\n this._original = clientObj.messages as Record<string, unknown>;\n this._trackFn =\n typeof trackFn === 'function'\n ? trackFn\n : (trackFn as unknown as { trackFn(): TrackFn }).trackFn();\n this._amplitude = amplitude;\n this._privacyConfig = privacyConfig;\n this._propagateContext = propagateContext;\n }\n\n async create(\n params: Record<string, unknown>,\n amplitudeOverrides?: ProviderTrackOptions,\n ): Promise<AnthropicResponse | AsyncIterable<unknown>> {\n const createFn = this._original.create as (\n ...args: unknown[]\n ) => Promise<unknown>;\n const startTime = performance.now();\n const requestParams = this._withContextHeaders(params);\n const ctx = applySessionContext(amplitudeOverrides);\n\n try {\n this._trackInputMessages(\n requestParams.messages as unknown,\n ctx,\n amplitudeOverrides?.trackInputMessages ?? true,\n );\n const response = await createFn.call(this._original, requestParams);\n\n if (requestParams.stream === true && _isAsyncIterable(response)) {\n return this._wrapStream(\n response as AsyncIterable<unknown>,\n requestParams,\n startTime,\n ctx,\n );\n }\n\n const latencyMs = performance.now() - startTime;\n\n const resp = response as AnthropicResponse;\n const usage = resp.usage;\n const extracted = extractAnthropicContent(\n resp.content as unknown as Array<Record<string, unknown>> | undefined,\n );\n const firstTextBlock = resp.content?.find((b) => b.type === 'text');\n const modelName = String(resp.model ?? requestParams.model ?? 'unknown');\n\n const cacheRead = usage?.cache_read_input_tokens ?? 0;\n const cacheCreation = usage?.cache_creation_input_tokens ?? 0;\n const rawInput = usage?.input_tokens ?? 0;\n const normalizedInput =\n cacheRead || cacheCreation\n ? rawInput + cacheRead + cacheCreation\n : rawInput;\n\n let costUsd: number | null = null;\n if (usage?.input_tokens != null && usage?.output_tokens != null) {\n try {\n costUsd = calculateCost({\n modelName,\n inputTokens: normalizedInput,\n outputTokens: usage.output_tokens,\n cacheReadInputTokens: cacheRead,\n cacheCreationInputTokens: cacheCreation,\n });\n } catch {\n // cost calculation is best-effort\n }\n }\n\n this._trackFn({\n userId: ctx.userId ?? 'unknown',\n modelName,\n provider: 'anthropic',\n responseContent: String(firstTextBlock?.text ?? ''),\n reasoningContent: extracted.reasoning,\n latencyMs,\n sessionId: ctx.sessionId,\n traceId: ctx.traceId,\n turnId: ctx.turnId ?? undefined,\n agentId: ctx.agentId,\n env: ctx.env,\n inputTokens: normalizedInput || undefined,\n outputTokens: usage?.output_tokens,\n cacheReadInputTokens: cacheRead || undefined,\n cacheCreationInputTokens: cacheCreation || undefined,\n totalCostUsd: costUsd,\n finishReason: resp.stop_reason,\n toolCalls:\n extracted.toolCalls.length > 0 ? extracted.toolCalls : undefined,\n isStreaming: false,\n systemPrompt: extractAnthropicSystemPrompt(requestParams.system),\n temperature: requestParams.temperature as number | undefined,\n maxOutputTokens: requestParams.max_tokens as number | undefined,\n topP: requestParams.top_p as number | undefined,\n });\n\n return response as AnthropicResponse;\n } catch (error) {\n const latencyMs = performance.now() - startTime;\n this._trackFn({\n userId: ctx.userId ?? 'unknown',\n modelName: String(requestParams.model ?? 'unknown'),\n provider: 'anthropic',\n responseContent: '',\n latencyMs,\n sessionId: ctx.sessionId,\n traceId: ctx.traceId,\n agentId: ctx.agentId,\n env: ctx.env,\n isError: true,\n errorMessage: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n }\n }\n\n private async *_wrapStream(\n stream: AsyncIterable<unknown>,\n params: Record<string, unknown>,\n _startTime: number,\n sessionCtx: ProviderTrackOptions,\n ): AsyncGenerator<unknown> {\n const accumulator = new StreamingAccumulator();\n accumulator.model = String(params.model ?? 'unknown');\n let reasoningContent = '';\n\n try {\n for await (const event of stream) {\n const evt = event as Record<string, unknown>;\n const type = evt.type as string | undefined;\n\n if (type === 'content_block_delta') {\n const delta = evt.delta as Record<string, unknown> | undefined;\n if (delta?.type === 'text_delta' && delta.text != null) {\n accumulator.addContent(String(delta.text));\n } else if (\n delta?.type === 'thinking_delta' &&\n delta.thinking != null\n ) {\n reasoningContent += String(delta.thinking);\n }\n } else if (type === 'content_block_start') {\n const block = evt.content_block as\n | Record<string, unknown>\n | undefined;\n if (block?.type === 'tool_use') {\n accumulator.addToolCall({\n type: 'function',\n id: block.id,\n function: {\n name: String(block.name ?? ''),\n arguments:\n typeof block.input === 'string'\n ? block.input\n : JSON.stringify(block.input ?? {}),\n },\n });\n }\n } else if (type === 'message_delta') {\n const delta = evt.delta as Record<string, unknown> | undefined;\n if (delta?.stop_reason != null) {\n accumulator.finishReason = String(delta.stop_reason);\n }\n const usage = evt.usage as Record<string, number> | undefined;\n if (usage != null) {\n accumulator.setUsage({\n outputTokens: usage.output_tokens,\n });\n }\n } else if (type === 'message_start') {\n const message = evt.message as Record<string, unknown> | undefined;\n if (message?.model != null) {\n accumulator.model = String(message.model);\n }\n const usage = message?.usage as Record<string, number> | undefined;\n if (usage != null) {\n accumulator.setUsage({\n inputTokens: usage.input_tokens,\n cacheReadTokens: usage.cache_read_input_tokens,\n cacheCreationTokens: usage.cache_creation_input_tokens,\n });\n }\n }\n\n yield event;\n }\n } catch (error) {\n accumulator.setError(\n error instanceof Error ? error.message : String(error),\n );\n throw error;\n } finally {\n const state = accumulator.getState();\n const modelName = String(accumulator.model ?? params.model ?? 'unknown');\n\n const streamCacheRead = state.cacheReadTokens ?? 0;\n const streamCacheCreation = state.cacheCreationTokens ?? 0;\n const streamRawInput = state.inputTokens ?? 0;\n const streamNormalizedInput =\n streamCacheRead || streamCacheCreation\n ? streamRawInput + streamCacheRead + streamCacheCreation\n : streamRawInput;\n\n let costUsd: number | null = null;\n if (state.inputTokens != null && state.outputTokens != null) {\n try {\n costUsd = calculateCost({\n modelName,\n inputTokens: streamNormalizedInput,\n outputTokens: state.outputTokens,\n cacheReadInputTokens: streamCacheRead,\n cacheCreationInputTokens: streamCacheCreation,\n });\n } catch {\n // cost calculation is best-effort\n }\n }\n\n this._trackFn({\n userId: sessionCtx.userId ?? 'unknown',\n modelName,\n provider: 'anthropic',\n responseContent: state.content,\n latencyMs: accumulator.elapsedMs,\n sessionId: sessionCtx.sessionId,\n traceId: sessionCtx.traceId,\n turnId: sessionCtx.turnId ?? undefined,\n agentId: sessionCtx.agentId,\n env: sessionCtx.env,\n inputTokens: streamNormalizedInput || undefined,\n outputTokens: state.outputTokens,\n cacheReadInputTokens: streamCacheRead || undefined,\n cacheCreationInputTokens: streamCacheCreation || undefined,\n totalCostUsd: costUsd,\n finishReason: state.finishReason,\n toolCalls: state.toolCalls.length > 0 ? state.toolCalls : undefined,\n providerTtfbMs: state.ttfbMs,\n isStreaming: true,\n isError: state.isError,\n errorMessage: state.errorMessage,\n reasoningContent: reasoningContent || undefined,\n systemPrompt: extractAnthropicSystemPrompt(params.system),\n temperature: params.temperature as number | undefined,\n maxOutputTokens: params.max_tokens as number | undefined,\n topP: params.top_p as number | undefined,\n });\n }\n }\n\n private _withContextHeaders(\n params: Record<string, unknown>,\n ): Record<string, unknown> {\n if (!this._propagateContext) return params;\n const existing = (params.extra_headers ?? params.headers) as\n | Record<string, string>\n | undefined;\n const injected = injectContext(existing);\n return {\n ...params,\n extra_headers: injected,\n };\n }\n\n private _trackInputMessages(\n messages: unknown,\n ctx: ProviderTrackOptions,\n shouldTrackInputMessages: boolean,\n ): void {\n if (!shouldTrackInputMessages) return;\n if (ctx.userId == null || ctx.sessionId == null) return;\n if (!Array.isArray(messages)) return;\n for (const msg of messages) {\n const role = (msg as Record<string, unknown>)?.role;\n if (role !== 'user') continue;\n const rawContent = (msg as Record<string, unknown>)?.content;\n const content = Array.isArray(rawContent)\n ? rawContent\n .map((part) => {\n if (typeof part === 'string') return part;\n const text = (part as Record<string, unknown>)?.text;\n return typeof text === 'string' ? text : '';\n })\n .join('')\n : typeof rawContent === 'string'\n ? rawContent\n : '';\n if (!content) continue;\n trackUserMessage({\n amplitude: this._amplitude,\n userId: ctx.userId,\n messageContent: content,\n sessionId: ctx.sessionId,\n traceId: ctx.traceId,\n turnId: ctx.turnId ?? undefined,\n agentId: ctx.agentId,\n parentAgentId: ctx.parentAgentId,\n customerOrgId: ctx.customerOrgId,\n env: ctx.env,\n groups: ctx.groups,\n privacyConfig: this._privacyConfig,\n });\n }\n }\n}\n\nfunction _isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n value != null &&\n typeof (value as Record<symbol, unknown>)[Symbol.asyncIterator] ===\n 'function'\n );\n}\n\nexport function extractAnthropicSystemPrompt(\n system: unknown,\n): string | undefined {\n if (typeof system === 'string') return system;\n if (Array.isArray(system)) {\n return system\n .map((block) => {\n if (typeof block === 'string') return block;\n if (typeof block === 'object' && block != null) {\n return String((block as Record<string, unknown>).text ?? '');\n }\n return '';\n })\n .filter(Boolean)\n .join('\\n');\n }\n return undefined;\n}\n\nexport function extractAnthropicContent(\n content: Array<Record<string, unknown>> | undefined,\n): {\n text: string;\n reasoning: string | undefined;\n toolCalls: Array<Record<string, unknown>>;\n} {\n let text = '';\n let reasoning: string | undefined;\n const toolCalls: Array<Record<string, unknown>> = [];\n\n if (!content) return { text, reasoning, toolCalls };\n\n for (const block of content) {\n if (block.type === 'text') {\n text += String(block.text ?? '');\n } else if (block.type === 'thinking') {\n reasoning = String(block.thinking ?? '');\n } else if (block.type === 'tool_use') {\n toolCalls.push({\n type: 'function',\n id: block.id,\n function: {\n name: String(block.name ?? ''),\n arguments:\n typeof block.input === 'string'\n ? block.input\n : JSON.stringify(block.input ?? {}),\n },\n });\n }\n }\n\n return { text, reasoning, toolCalls };\n}\n"],"mappings":"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"}