@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,146 @@
1
+ import { calculateCost } from "../utils/costs.js";
2
+
3
+ //#region src/integrations/opentelemetry.ts
4
+ var AmplitudeAgentExporter = class {
5
+ _ai;
6
+ _defaultUserId;
7
+ constructor(options) {
8
+ this._ai = options.amplitudeAI;
9
+ this._defaultUserId = options.defaultUserId ?? "otel-user";
10
+ }
11
+ export(spans, resultCallback) {
12
+ for (const span of spans) try {
13
+ this._processSpan(span);
14
+ } catch {}
15
+ resultCallback({ code: 0 });
16
+ }
17
+ shutdown() {
18
+ return Promise.resolve();
19
+ }
20
+ forceFlush() {
21
+ this._ai.flush();
22
+ return Promise.resolve();
23
+ }
24
+ _processSpan(span) {
25
+ const attrs = span.attributes ?? {};
26
+ const providerName = attrs["gen_ai.provider.name"] ?? attrs["gen_ai.system"];
27
+ if (!providerName) return;
28
+ const startNanos = Number(span.startTimeUnixNano ?? 0);
29
+ const latencyMs = (Number(span.endTimeUnixNano ?? 0) - startNanos) / 1e6;
30
+ const isError = span.status?.code === 2;
31
+ const spanCtx = span.spanContext?.();
32
+ const operation = attrs["gen_ai.operation.name"] ?? attrs["gen_ai.operation"];
33
+ const userId = _normalizeOtelString(attrs["amplitude.user_id"]) ?? this._defaultUserId;
34
+ const sessionId = _normalizeOtelString(attrs["amplitude.session_id"]) ?? "otel-session";
35
+ const modelName = String(attrs["gen_ai.response.model"] ?? attrs["gen_ai.request.model"] ?? "unknown");
36
+ if (operation === "tool" || operation === "tool_call" || operation === "execute_tool") {
37
+ this._ai.trackToolCall({
38
+ userId,
39
+ toolName: String(attrs["gen_ai.tool.name"] ?? span.name ?? "tool"),
40
+ latencyMs,
41
+ success: !isError,
42
+ sessionId,
43
+ traceId: spanCtx?.traceId,
44
+ input: attrs["gen_ai.tool.arguments"] ?? attrs["gen_ai.request.prompt"] ?? void 0,
45
+ output: attrs["gen_ai.response.text"] ?? void 0,
46
+ errorMessage: isError ? span.status?.message : void 0
47
+ });
48
+ return;
49
+ }
50
+ if (operation === "embedding" || operation === "embeddings") {
51
+ this._ai.trackEmbedding({
52
+ userId,
53
+ model: modelName,
54
+ provider: providerName,
55
+ latencyMs,
56
+ sessionId,
57
+ traceId: spanCtx?.traceId,
58
+ inputTokens: attrs["gen_ai.usage.input_tokens"],
59
+ dimensions: attrs["gen_ai.embedding.vector_size"] ?? attrs["gen_ai.response.embedding_dimensions"] ?? attrs["gen_ai.embeddings.dimension.count"]
60
+ });
61
+ return;
62
+ }
63
+ const inputMessages = attrs["gen_ai.input.messages"];
64
+ if (inputMessages != null) {
65
+ const messages = typeof inputMessages === "string" ? _tryParseJsonArray(inputMessages) : Array.isArray(inputMessages) ? inputMessages : [];
66
+ for (const msg of messages) {
67
+ const m = msg;
68
+ if (m?.role === "user" && typeof m.content === "string" && m.content.length > 0) this._ai.trackUserMessage({
69
+ userId,
70
+ content: m.content,
71
+ sessionId,
72
+ traceId: spanCtx?.traceId
73
+ });
74
+ }
75
+ }
76
+ const inputTokens = _toOtelNumber(attrs["gen_ai.usage.input_tokens"]);
77
+ const outputTokens = _toOtelNumber(attrs["gen_ai.usage.output_tokens"]);
78
+ const totalTokens = inputTokens != null || outputTokens != null ? (inputTokens ?? 0) + (outputTokens ?? 0) : void 0;
79
+ const cacheReadTokens = _toOtelNumber(attrs["gen_ai.usage.cache_read.input_tokens"]);
80
+ const cacheCreationTokens = _toOtelNumber(attrs["gen_ai.usage.cache_creation.input_tokens"]);
81
+ let costUsd = _toOtelNumber(attrs["gen_ai.usage.cost"]);
82
+ if (costUsd == null && modelName !== "unknown" && inputTokens != null && outputTokens != null) try {
83
+ const computed = calculateCost({
84
+ modelName,
85
+ inputTokens,
86
+ outputTokens,
87
+ cacheReadInputTokens: cacheReadTokens ?? 0,
88
+ cacheCreationInputTokens: cacheCreationTokens ?? 0
89
+ });
90
+ if (computed > 0) costUsd = computed;
91
+ } catch {}
92
+ this._ai.trackAiMessage({
93
+ userId,
94
+ content: String(attrs["gen_ai.response.text"] ?? ""),
95
+ sessionId,
96
+ model: modelName,
97
+ provider: providerName,
98
+ latencyMs,
99
+ traceId: spanCtx?.traceId,
100
+ inputTokens,
101
+ outputTokens,
102
+ totalTokens,
103
+ cacheReadTokens,
104
+ cacheCreationTokens,
105
+ totalCostUsd: costUsd,
106
+ finishReason: _normalizeFinishReason(attrs["gen_ai.response.finish_reasons"]),
107
+ isError,
108
+ errorMessage: isError ? span.status?.message : void 0,
109
+ temperature: _toOtelNumber(attrs["gen_ai.request.temperature"]),
110
+ maxOutputTokens: _toOtelNumber(attrs["gen_ai.request.max_tokens"]),
111
+ topP: _toOtelNumber(attrs["gen_ai.request.top_p"])
112
+ });
113
+ }
114
+ };
115
+ const AmplitudeGenAIExporter = AmplitudeAgentExporter;
116
+ const AmplitudeSpanExporter = AmplitudeAgentExporter;
117
+ function _normalizeFinishReason(value) {
118
+ if (typeof value === "string") return value;
119
+ if (Array.isArray(value)) {
120
+ const first = value[0];
121
+ return typeof first === "string" ? first : void 0;
122
+ }
123
+ }
124
+ function _toOtelNumber(value) {
125
+ if (typeof value === "number") return value;
126
+ if (typeof value === "string") {
127
+ const parsed = Number(value);
128
+ return Number.isNaN(parsed) ? void 0 : parsed;
129
+ }
130
+ }
131
+ function _tryParseJsonArray(value) {
132
+ try {
133
+ const parsed = JSON.parse(value);
134
+ return Array.isArray(parsed) ? parsed : [];
135
+ } catch {
136
+ return [];
137
+ }
138
+ }
139
+ function _normalizeOtelString(value) {
140
+ if (typeof value === "string" && value.length > 0) return value;
141
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
142
+ }
143
+
144
+ //#endregion
145
+ export { AmplitudeAgentExporter, AmplitudeGenAIExporter, AmplitudeSpanExporter };
146
+ //# sourceMappingURL=opentelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.js","names":[],"sources":["../../src/integrations/opentelemetry.ts"],"sourcesContent":["/**\n * OpenTelemetry integration — maps GenAI OTEL spans to Amplitude events.\n *\n * Provides AmplitudeAgentExporter (SpanExporter) that converts\n * OpenTelemetry spans with GenAI semantic conventions into\n * Amplitude [Agent] events.\n */\n\nimport type { AmplitudeAI } from '../client.js';\nimport { calculateCost } from '../utils/costs.js';\n\nexport interface ExporterOptions {\n amplitudeAI: AmplitudeAI;\n defaultUserId?: string;\n}\n\ninterface OTELSpan {\n name: string;\n kind?: number;\n attributes?: Record<string, unknown>;\n startTimeUnixNano?: bigint | number;\n endTimeUnixNano?: bigint | number;\n status?: { code?: number; message?: string };\n parentSpanId?: string;\n spanContext?: () => { traceId: string; spanId: string };\n}\n\nexport class AmplitudeAgentExporter {\n private _ai: AmplitudeAI;\n private _defaultUserId: string;\n\n constructor(options: ExporterOptions) {\n this._ai = options.amplitudeAI;\n this._defaultUserId = options.defaultUserId ?? 'otel-user';\n }\n\n export(\n spans: OTELSpan[],\n resultCallback: (result: { code: number }) => void,\n ): void {\n for (const span of spans) {\n try {\n this._processSpan(span);\n } catch {\n // Skip individual span failures\n }\n }\n resultCallback({ code: 0 });\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n this._ai.flush();\n return Promise.resolve();\n }\n\n private _processSpan(span: OTELSpan): void {\n const attrs = span.attributes ?? {};\n const providerName =\n (attrs['gen_ai.provider.name'] as string | undefined) ??\n (attrs['gen_ai.system'] as string | undefined);\n\n if (!providerName) return; // Not a GenAI span\n\n const startNanos = Number(span.startTimeUnixNano ?? 0);\n const endNanos = Number(span.endTimeUnixNano ?? 0);\n const latencyMs = (endNanos - startNanos) / 1_000_000;\n const isError = span.status?.code === 2;\n const spanCtx = span.spanContext?.();\n const operation =\n (attrs['gen_ai.operation.name'] as string | undefined) ??\n (attrs['gen_ai.operation'] as string | undefined);\n const userId =\n _normalizeOtelString(attrs['amplitude.user_id']) ?? this._defaultUserId;\n const sessionId =\n _normalizeOtelString(attrs['amplitude.session_id']) ?? 'otel-session';\n\n // Prefer response.model (actual versioned model) over request.model\n const modelName = String(\n attrs['gen_ai.response.model'] ??\n attrs['gen_ai.request.model'] ??\n 'unknown',\n );\n\n if (\n operation === 'tool' ||\n operation === 'tool_call' ||\n operation === 'execute_tool'\n ) {\n this._ai.trackToolCall({\n userId,\n toolName: String(attrs['gen_ai.tool.name'] ?? span.name ?? 'tool'),\n latencyMs,\n success: !isError,\n sessionId,\n traceId: spanCtx?.traceId,\n input:\n attrs['gen_ai.tool.arguments'] ??\n attrs['gen_ai.request.prompt'] ??\n undefined,\n output: attrs['gen_ai.response.text'] ?? undefined,\n errorMessage: isError ? span.status?.message : undefined,\n });\n return;\n }\n\n if (operation === 'embedding' || operation === 'embeddings') {\n this._ai.trackEmbedding({\n userId,\n model: modelName,\n provider: providerName,\n latencyMs,\n sessionId,\n traceId: spanCtx?.traceId,\n inputTokens: attrs['gen_ai.usage.input_tokens'] as number | undefined,\n dimensions:\n (attrs['gen_ai.embedding.vector_size'] as number | undefined) ??\n (attrs['gen_ai.response.embedding_dimensions'] as\n | number\n | undefined) ??\n (attrs['gen_ai.embeddings.dimension.count'] as number | undefined),\n });\n return;\n }\n\n // Track user messages from gen_ai.input.messages when available\n const inputMessages = attrs['gen_ai.input.messages'];\n if (inputMessages != null) {\n const messages =\n typeof inputMessages === 'string'\n ? _tryParseJsonArray(inputMessages)\n : Array.isArray(inputMessages)\n ? inputMessages\n : [];\n for (const msg of messages) {\n const m = msg as Record<string, unknown> | undefined;\n if (\n m?.role === 'user' &&\n typeof m.content === 'string' &&\n m.content.length > 0\n ) {\n this._ai.trackUserMessage({\n userId,\n content: m.content,\n sessionId,\n traceId: spanCtx?.traceId,\n });\n }\n }\n }\n\n const inputTokens = _toOtelNumber(attrs['gen_ai.usage.input_tokens']);\n const outputTokens = _toOtelNumber(attrs['gen_ai.usage.output_tokens']);\n const totalTokens =\n inputTokens != null || outputTokens != null\n ? (inputTokens ?? 0) + (outputTokens ?? 0)\n : undefined;\n const cacheReadTokens = _toOtelNumber(\n attrs['gen_ai.usage.cache_read.input_tokens'],\n );\n const cacheCreationTokens = _toOtelNumber(\n attrs['gen_ai.usage.cache_creation.input_tokens'],\n );\n\n let costUsd = _toOtelNumber(attrs['gen_ai.usage.cost']);\n if (\n costUsd == null &&\n modelName !== 'unknown' &&\n inputTokens != null &&\n outputTokens != null\n ) {\n try {\n const computed = calculateCost({\n modelName,\n inputTokens,\n outputTokens,\n cacheReadInputTokens: cacheReadTokens ?? 0,\n cacheCreationInputTokens: cacheCreationTokens ?? 0,\n });\n if (computed > 0) costUsd = computed;\n } catch {\n // cost calculation is best-effort\n }\n }\n\n this._ai.trackAiMessage({\n userId,\n content: String(attrs['gen_ai.response.text'] ?? ''),\n sessionId,\n model: modelName,\n provider: providerName,\n latencyMs,\n traceId: spanCtx?.traceId,\n inputTokens,\n outputTokens,\n totalTokens,\n cacheReadTokens,\n cacheCreationTokens,\n totalCostUsd: costUsd,\n finishReason: _normalizeFinishReason(\n attrs['gen_ai.response.finish_reasons'],\n ),\n isError,\n errorMessage: isError ? span.status?.message : undefined,\n temperature: _toOtelNumber(attrs['gen_ai.request.temperature']),\n maxOutputTokens: _toOtelNumber(attrs['gen_ai.request.max_tokens']),\n topP: _toOtelNumber(attrs['gen_ai.request.top_p']),\n });\n }\n}\n\nexport const AmplitudeGenAIExporter = AmplitudeAgentExporter;\nexport const AmplitudeSpanExporter = AmplitudeAgentExporter;\n\nfunction _normalizeFinishReason(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) {\n const first = value[0];\n return typeof first === 'string' ? first : undefined;\n }\n return undefined;\n}\n\nfunction _toOtelNumber(value: unknown): number | undefined {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n return undefined;\n}\n\nfunction _tryParseJsonArray(value: string): unknown[] {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\nfunction _normalizeOtelString(value: unknown): string | undefined {\n if (typeof value === 'string' && value.length > 0) return value;\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return undefined;\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { TrackAiMessageOptions, TrackConversationOptions, TrackEmbeddingOptions, TrackScoreOptions, TrackSessionEndOptions, TrackSessionEnrichmentOptions, TrackSpanOptions, TrackToolCallOptions, TrackUserMessageOptions } from "./core/tracking.js";
2
+ import { StreamingAccumulator } from "./utils/streaming.js";
3
+ import { BaseAIProvider, ProviderTrackOptions, SimpleStreamingTracker, applySessionContext } from "./providers/base.js";
4
+ import { inferProvider, stripProviderPrefix } from "./utils/costs.js";
5
+ export { BaseAIProvider, type ProviderTrackOptions, SimpleStreamingTracker, StreamingAccumulator, type TrackAiMessageOptions, type TrackConversationOptions, type TrackEmbeddingOptions, type TrackScoreOptions, type TrackSessionEndOptions, type TrackSessionEnrichmentOptions, type TrackSpanOptions, type TrackToolCallOptions, type TrackUserMessageOptions, applySessionContext, inferProvider, stripProviderPrefix };
@@ -0,0 +1,5 @@
1
+ import { inferProvider, stripProviderPrefix } from "./utils/costs.js";
2
+ import { StreamingAccumulator } from "./utils/streaming.js";
3
+ import { BaseAIProvider, SimpleStreamingTracker, applySessionContext } from "./providers/base.js";
4
+
5
+ export { BaseAIProvider, SimpleStreamingTracker, StreamingAccumulator, applySessionContext, inferProvider, stripProviderPrefix };
@@ -0,0 +1,27 @@
1
+ //#region src/mcp/contract.d.ts
2
+ declare const MCP_SERVER_NAME = "amplitude-ai-mcp";
3
+ declare const MCP_TOOLS: {
4
+ readonly getEventSchema: "get_event_schema";
5
+ readonly getIntegrationPattern: "get_integration_pattern";
6
+ readonly validateSetup: "validate_setup";
7
+ readonly suggestInstrumentation: "suggest_instrumentation";
8
+ readonly validateFile: "validate_file";
9
+ readonly searchDocs: "search_docs";
10
+ };
11
+ declare const MCP_RESOURCES: {
12
+ readonly eventSchema: "amplitude-ai://event-schema";
13
+ readonly integrationPatterns: "amplitude-ai://integration-patterns";
14
+ };
15
+ declare const MCP_PROMPTS: {
16
+ readonly instrumentApp: "instrument_app";
17
+ };
18
+ declare const GENERATED_FILES: {
19
+ readonly agents: "AGENTS.md";
20
+ readonly llms: "llms.txt";
21
+ readonly llmsFull: "llms-full.txt";
22
+ readonly mcpSchema: "mcp.schema.json";
23
+ };
24
+ type MToolName = (typeof MCP_TOOLS)[keyof typeof MCP_TOOLS];
25
+ //#endregion
26
+ export { GENERATED_FILES, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS, MToolName };
27
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","names":[],"sources":["../../src/mcp/contract.ts"],"sourcesContent":[],"mappings":";cAAa,eAAA;AAAA,cAEA,SAFe,EAAA;EAEf,SAAA,cAOH,EAAA,kBAAA;EAEG,SAAA,qBAGH,EAAA,yBAAA;EAEG,SAAA,aAEH,EAAA,gBAAA;EAEG,SAAA,sBAKH,EAAA,yBAAA;EAEE,SAAA,YAAS,EAAA,eAAmC;;;cAhB3C;;;;cAKA;;;cAIA;;;;;;KAOD,SAAA,WAAoB,wBAAwB"}
@@ -0,0 +1,25 @@
1
+ //#region src/mcp/contract.ts
2
+ const MCP_SERVER_NAME = "amplitude-ai-mcp";
3
+ const MCP_TOOLS = {
4
+ getEventSchema: "get_event_schema",
5
+ getIntegrationPattern: "get_integration_pattern",
6
+ validateSetup: "validate_setup",
7
+ suggestInstrumentation: "suggest_instrumentation",
8
+ validateFile: "validate_file",
9
+ searchDocs: "search_docs"
10
+ };
11
+ const MCP_RESOURCES = {
12
+ eventSchema: "amplitude-ai://event-schema",
13
+ integrationPatterns: "amplitude-ai://integration-patterns"
14
+ };
15
+ const MCP_PROMPTS = { instrumentApp: "instrument_app" };
16
+ const GENERATED_FILES = {
17
+ agents: "AGENTS.md",
18
+ llms: "llms.txt",
19
+ llmsFull: "llms-full.txt",
20
+ mcpSchema: "mcp.schema.json"
21
+ };
22
+
23
+ //#endregion
24
+ export { GENERATED_FILES, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS };
25
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","names":[],"sources":["../../src/mcp/contract.ts"],"sourcesContent":["export const MCP_SERVER_NAME = 'amplitude-ai-mcp';\n\nexport const MCP_TOOLS = {\n getEventSchema: 'get_event_schema',\n getIntegrationPattern: 'get_integration_pattern',\n validateSetup: 'validate_setup',\n suggestInstrumentation: 'suggest_instrumentation',\n validateFile: 'validate_file',\n searchDocs: 'search_docs',\n} as const;\n\nexport const MCP_RESOURCES = {\n eventSchema: 'amplitude-ai://event-schema',\n integrationPatterns: 'amplitude-ai://integration-patterns',\n} as const;\n\nexport const MCP_PROMPTS = {\n instrumentApp: 'instrument_app',\n} as const;\n\nexport const GENERATED_FILES = {\n agents: 'AGENTS.md',\n llms: 'llms.txt',\n llmsFull: 'llms-full.txt',\n mcpSchema: 'mcp.schema.json',\n} as const;\n\nexport type MToolName = (typeof MCP_TOOLS)[keyof typeof MCP_TOOLS];\n"],"mappings":";AAAA,MAAa,kBAAkB;AAE/B,MAAa,YAAY;CACvB,gBAAgB;CAChB,uBAAuB;CACvB,eAAe;CACf,wBAAwB;CACxB,cAAc;CACd,YAAY;CACb;AAED,MAAa,gBAAgB;CAC3B,aAAa;CACb,qBAAqB;CACtB;AAED,MAAa,cAAc,EACzB,eAAe,kBAChB;AAED,MAAa,kBAAkB;CAC7B,QAAQ;CACR,MAAM;CACN,UAAU;CACV,WAAW;CACZ"}
@@ -0,0 +1,4 @@
1
+ import { GENERATED_FILES, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS, MToolName } from "./contract.js";
2
+ import { IntegrationPattern, getIntegrationPatterns } from "./patterns.js";
3
+ import { buildInstrumentationGuidance, createServer, runMcpServer } from "./server.js";
4
+ export { GENERATED_FILES, IntegrationPattern, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS, MToolName, buildInstrumentationGuidance, createServer, getIntegrationPatterns, runMcpServer };
@@ -0,0 +1,5 @@
1
+ import { GENERATED_FILES, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS } from "./contract.js";
2
+ import { getIntegrationPatterns } from "./patterns.js";
3
+ import { buildInstrumentationGuidance, createServer, runMcpServer } from "./server.js";
4
+
5
+ export { GENERATED_FILES, MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS, buildInstrumentationGuidance, createServer, getIntegrationPatterns, runMcpServer };
@@ -0,0 +1,11 @@
1
+ //#region src/mcp/patterns.d.ts
2
+ type IntegrationPattern = {
3
+ id: string;
4
+ title: string;
5
+ whenToUse: string;
6
+ snippet: string;
7
+ };
8
+ declare const getIntegrationPatterns: () => IntegrationPattern[];
9
+ //#endregion
10
+ export { type IntegrationPattern, getIntegrationPatterns };
11
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","names":[],"sources":["../../src/mcp/patterns.ts"],"sourcesContent":[],"mappings":";KAAK,kBAAA;EAAA,EAAA,EAAA,MAAA;EAgDC,KAAA,EAAA,MAAA;;;;cAAA,8BAA6B"}
@@ -0,0 +1,38 @@
1
+ //#region src/mcp/patterns.ts
2
+ const INTEGRATION_PATTERNS = [
3
+ {
4
+ id: "wrap-openai",
5
+ title: "Recommended production default: wrap provider + session context",
6
+ whenToUse: "Best balance of effort and value: high-fidelity provider telemetry plus session lineage.",
7
+ snippet: "import { AmplitudeAI, OpenAI } from \"@amplitude/ai\";\nconst ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY!, contentMode: \"full\", redactPii: true });\nconst client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY!, amplitude: ai });\nconst session = ai.agent(\"assistant\", { userId: \"u1\" }).session({ sessionId: \"s1\" });\nawait session.run(async () => client.chat.completions.create({ model: \"gpt-4o\", messages: [{ role: \"user\", content: \"hi\" }] }));"
8
+ },
9
+ {
10
+ id: "bound-agent-session",
11
+ title: "Bound agent + session lifecycle",
12
+ whenToUse: "Need strong user/session lineage, multi-agent orchestration, and session-level analytics.",
13
+ snippet: "const ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY! });\nconst agent = ai.agent(\"assistant\", { userId: \"u1\" });\nconst session = agent.session({ sessionId: \"s1\" });"
14
+ },
15
+ {
16
+ id: "zero-code",
17
+ title: "Zero-code patching (migration fallback)",
18
+ whenToUse: "Existing codebase; want immediate coverage before upgrading to wrapper + session context.",
19
+ snippet: "import { AmplitudeAI, patch } from \"@amplitude/ai\";\nconst ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY! });\npatch({ amplitudeAI: ai });"
20
+ },
21
+ {
22
+ id: "tool-decorator",
23
+ title: "Tool instrumentation",
24
+ whenToUse: "Need explicit visibility into tool calls and outcomes.",
25
+ snippet: "import { tool } from \"@amplitude/ai\";\nconst searchProducts = tool(async (query: string) => ({ items: [] }), {\n name: \"search_products\",\n inputSchema: { type: \"object\", properties: { query: { type: \"string\" } }, required: [\"query\"] },\n});"
26
+ },
27
+ {
28
+ id: "express-middleware",
29
+ title: "Express middleware propagation",
30
+ whenToUse: "Server app needs per-request context propagation.",
31
+ snippet: "import { createAmplitudeAIMiddleware } from \"@amplitude/ai\";\napp.use(createAmplitudeAIMiddleware());"
32
+ }
33
+ ];
34
+ const getIntegrationPatterns = () => INTEGRATION_PATTERNS.map((pattern) => ({ ...pattern }));
35
+
36
+ //#endregion
37
+ export { getIntegrationPatterns };
38
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","names":["INTEGRATION_PATTERNS: IntegrationPattern[]"],"sources":["../../src/mcp/patterns.ts"],"sourcesContent":["type IntegrationPattern = {\n id: string;\n title: string;\n whenToUse: string;\n snippet: string;\n};\n\nconst INTEGRATION_PATTERNS: IntegrationPattern[] = [\n {\n id: 'wrap-openai',\n title: 'Recommended production default: wrap provider + session context',\n whenToUse:\n 'Best balance of effort and value: high-fidelity provider telemetry plus session lineage.',\n snippet:\n 'import { AmplitudeAI, OpenAI } from \"@amplitude/ai\";\\nconst ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY!, contentMode: \"full\", redactPii: true });\\nconst client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY!, amplitude: ai });\\nconst session = ai.agent(\"assistant\", { userId: \"u1\" }).session({ sessionId: \"s1\" });\\nawait session.run(async () => client.chat.completions.create({ model: \"gpt-4o\", messages: [{ role: \"user\", content: \"hi\" }] }));',\n },\n {\n id: 'bound-agent-session',\n title: 'Bound agent + session lifecycle',\n whenToUse:\n 'Need strong user/session lineage, multi-agent orchestration, and session-level analytics.',\n snippet:\n 'const ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY! });\\nconst agent = ai.agent(\"assistant\", { userId: \"u1\" });\\nconst session = agent.session({ sessionId: \"s1\" });',\n },\n {\n id: 'zero-code',\n title: 'Zero-code patching (migration fallback)',\n whenToUse:\n 'Existing codebase; want immediate coverage before upgrading to wrapper + session context.',\n snippet:\n 'import { AmplitudeAI, patch } from \"@amplitude/ai\";\\nconst ai = new AmplitudeAI({ apiKey: process.env.AMPLITUDE_AI_API_KEY! });\\npatch({ amplitudeAI: ai });',\n },\n {\n id: 'tool-decorator',\n title: 'Tool instrumentation',\n whenToUse: 'Need explicit visibility into tool calls and outcomes.',\n snippet:\n 'import { tool } from \"@amplitude/ai\";\\nconst searchProducts = tool(async (query: string) => ({ items: [] }), {\\n name: \"search_products\",\\n inputSchema: { type: \"object\", properties: { query: { type: \"string\" } }, required: [\"query\"] },\\n});',\n },\n {\n id: 'express-middleware',\n title: 'Express middleware propagation',\n whenToUse: 'Server app needs per-request context propagation.',\n snippet:\n 'import { createAmplitudeAIMiddleware } from \"@amplitude/ai\";\\napp.use(createAmplitudeAIMiddleware());',\n },\n];\n\nconst getIntegrationPatterns = (): IntegrationPattern[] =>\n INTEGRATION_PATTERNS.map((pattern) => ({ ...pattern }));\n\nexport { getIntegrationPatterns, type IntegrationPattern };\n"],"mappings":";AAOA,MAAMA,uBAA6C;CACjD;EACE,IAAI;EACJ,OAAO;EACP,WACE;EACF,SACE;EACH;CACD;EACE,IAAI;EACJ,OAAO;EACP,WACE;EACF,SACE;EACH;CACD;EACE,IAAI;EACJ,OAAO;EACP,WACE;EACF,SACE;EACH;CACD;EACE,IAAI;EACJ,OAAO;EACP,WAAW;EACX,SACE;EACH;CACD;EACE,IAAI;EACJ,OAAO;EACP,WAAW;EACX,SACE;EACH;CACF;AAED,MAAM,+BACJ,qBAAqB,KAAK,aAAa,EAAE,GAAG,SAAS,EAAE"}
@@ -0,0 +1,10 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+
3
+ //#region src/mcp/server.d.ts
4
+ type ContentTier = 'full' | 'metadata_only' | 'customer_enriched';
5
+ declare const buildInstrumentationGuidance: (framework: string, provider: string, contentTier: ContentTier) => string[];
6
+ declare const createServer: () => McpServer;
7
+ declare const runMcpServer: () => Promise<void>;
8
+ //#endregion
9
+ export { buildInstrumentationGuidance, createServer, runMcpServer };
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","names":[],"sources":["../../src/mcp/server.ts"],"sourcesContent":[],"mappings":";;;KAqCK,WAAA;cAaC,iFAGS;AAlDqD,cA2H9D,YAzFU,EAAA,GAAA,GAyFS,SAzFT;AAAA,cAqaV,YAxZA,EAAA,GAAA,GAwZyB,OAhW9B,CAAA,IAAA,CArDc"}
@@ -0,0 +1,241 @@
1
+ import { MCP_PROMPTS, MCP_RESOURCES, MCP_SERVER_NAME, MCP_TOOLS } from "./contract.js";
2
+ import { getIntegrationPatterns } from "./patterns.js";
3
+ import { enumType, numberType, stringType } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
4
+ import { McpServer } from "../node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js";
5
+ import { StdioServerTransport } from "../node_modules/.pnpm/@modelcontextprotocol_sdk@1.27.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js";
6
+ import { analyzeFileInstrumentation } from "./validate-file.js";
7
+ import { readFileSync } from "node:fs";
8
+ import { dirname, join } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+
11
+ //#region src/mcp/server.ts
12
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
13
+ let _catalogCache;
14
+ const readEventCatalog = () => {
15
+ if (_catalogCache) return _catalogCache;
16
+ const raw = readFileSync(join(packageRoot, "data", "agent_event_catalog.json"), "utf8");
17
+ _catalogCache = JSON.parse(raw);
18
+ return _catalogCache;
19
+ };
20
+ const normalizeContentTier = (value) => {
21
+ if (value === "full" || value === "metadata_only" || value === "customer_enriched") return value;
22
+ return "full";
23
+ };
24
+ const buildInstrumentationGuidance = (framework, provider, contentTier) => {
25
+ const providerSetup = provider === "openai" || provider === "anthropic" ? `use ${provider} wrapper/swap integration (for example: \`new ${provider === "openai" ? "OpenAI" : "Anthropic"}({ amplitude: ai, ... })\`)` : `use the ${provider} provider wrapper class from @amplitude/ai`;
26
+ const frameworkStep = framework === "express" || framework === "koa" || framework === "fastify" ? "wire `createAmplitudeAIMiddleware()` for per-request identity propagation and run LLM calls inside session context" : framework === "next" || framework === "nextjs" ? "wrap route handlers in `session.run()` so every LLM call inherits user/session lineage" : "attach `ai.agent(...).session(...)` where request or conversation identity exists";
27
+ const tierGuidance = contentTier === "full" ? "Content tier (`full`): maximum insight and automatic server enrichments. Prefer `redactPii: true` (+ optional `customRedactionPatterns`)." : contentTier === "metadata_only" ? "Content tier (`metadata_only`): no content leaves your infrastructure; keep token/cost/latency/session analytics." : "Content tier (`customer_enriched`): no content leaves infra; send your own labels via `trackSessionEnrichment(...)` for advanced analytics.";
28
+ const nextForTier = contentTier === "metadata_only" ? "if you need quality/topic analytics without sending content, move to `customer_enriched` and emit structured enrichments." : contentTier === "customer_enriched" ? "if policy allows and you want zero eval-code overhead, consider `full` with redaction for automatic server enrichments." : "if policy prohibits content egress, switch to `metadata_only` or `customer_enriched` without changing session instrumentation.";
29
+ return [
30
+ `Framework: ${framework}`,
31
+ `Provider: ${provider}`,
32
+ `Content tier: ${contentTier}`,
33
+ "",
34
+ "Now:",
35
+ "1) install @amplitude/ai and @amplitude/analytics-node",
36
+ "2) initialize `AmplitudeAI` with API key",
37
+ `3) ${providerSetup}`,
38
+ "4) bind session context with `const session = ai.agent(...).session(...)` and run calls in `session.run(...)`",
39
+ `5) ${frameworkStep}`,
40
+ "",
41
+ "Next:",
42
+ `- ${nextForTier}`,
43
+ "- treat `patch({ amplitudeAI: ai })` as migration quickstart, not steady-state production.",
44
+ "",
45
+ "Why:",
46
+ "- session lineage unlocks scoring, enrichments, and reliable product-to-AI funnels.",
47
+ "- wrapper/swap integration preserves fidelity while keeping implementation effort low.",
48
+ `- ${tierGuidance}`,
49
+ "- privacy controls apply before events leave your process.",
50
+ "",
51
+ "Validate:",
52
+ "- run `amplitude-ai doctor` and verify [Agent] session-scoped events."
53
+ ];
54
+ };
55
+ const headingPriority = (heading) => {
56
+ const normalized = heading.toLowerCase();
57
+ if (normalized.includes("choose your integration tier") || normalized.includes("privacy & content control")) return 3;
58
+ if (normalized.includes("boundagent") || normalized.includes("bound agent") || normalized.includes("session")) return 2;
59
+ return 1;
60
+ };
61
+ const createServer = () => {
62
+ const server = new McpServer({
63
+ name: MCP_SERVER_NAME,
64
+ version: "0.1.0"
65
+ });
66
+ server.registerTool(MCP_TOOLS.getEventSchema, {
67
+ title: "Get Event Schema",
68
+ description: "Return Amplitude AI event schema and event-property definitions.",
69
+ inputSchema: { event_type: stringType().optional() }
70
+ }, async (args) => {
71
+ const eventType = typeof args?.event_type === "string" ? args.event_type : void 0;
72
+ const events = readEventCatalog().events ?? [];
73
+ const selected = eventType ? events.filter((event) => event.event_type === eventType) : events;
74
+ return { content: [{
75
+ type: "text",
76
+ text: JSON.stringify({
77
+ total: selected.length,
78
+ events: selected
79
+ }, null, 2)
80
+ }] };
81
+ });
82
+ server.registerTool(MCP_TOOLS.getIntegrationPattern, {
83
+ title: "Get Integration Pattern",
84
+ description: "Return canonical instrumentation patterns for @amplitude/ai.",
85
+ inputSchema: { id: stringType().optional() }
86
+ }, async (args) => {
87
+ const id = typeof args?.id === "string" ? args.id : void 0;
88
+ const patterns = getIntegrationPatterns();
89
+ const selected = id ? patterns.filter((pattern) => pattern.id === id) : patterns;
90
+ return { content: [{
91
+ type: "text",
92
+ text: JSON.stringify({ patterns: selected }, null, 2)
93
+ }] };
94
+ });
95
+ server.registerTool(MCP_TOOLS.validateSetup, {
96
+ title: "Validate Setup",
97
+ description: "Validate environment variables required for @amplitude/ai.",
98
+ inputSchema: {}
99
+ }, async () => {
100
+ const missing = ["AMPLITUDE_AI_API_KEY"].filter((name) => !process.env[name]);
101
+ const status = missing.length === 0 ? "ok" : "missing_env";
102
+ return { content: [{
103
+ type: "text",
104
+ text: JSON.stringify({
105
+ status,
106
+ missing_env: missing
107
+ }, null, 2)
108
+ }] };
109
+ });
110
+ server.registerTool(MCP_TOOLS.suggestInstrumentation, {
111
+ title: "Suggest Instrumentation",
112
+ description: "Suggest practical next instrumentation steps from minimal hints.",
113
+ inputSchema: {
114
+ framework: stringType().optional(),
115
+ provider: stringType().optional(),
116
+ content_tier: enumType([
117
+ "full",
118
+ "metadata_only",
119
+ "customer_enriched"
120
+ ]).optional().describe("Desired content tier (default: full)")
121
+ }
122
+ }, async (args) => {
123
+ return { content: [{
124
+ type: "text",
125
+ text: buildInstrumentationGuidance(typeof args?.framework === "string" ? args.framework : "node", typeof args?.provider === "string" ? args.provider : "openai", normalizeContentTier(args?.content_tier)).join("\n")
126
+ }] };
127
+ });
128
+ server.registerTool(MCP_TOOLS.validateFile, {
129
+ title: "Validate File Instrumentation",
130
+ description: "Analyze source code to detect LLM call sites and report which are instrumented vs uninstrumented.",
131
+ inputSchema: { source: stringType().describe("Source code content to analyze") }
132
+ }, async (args) => {
133
+ const result = analyzeFileInstrumentation(typeof args?.source === "string" ? args.source : "");
134
+ return { content: [{
135
+ type: "text",
136
+ text: JSON.stringify(result, null, 2)
137
+ }] };
138
+ });
139
+ server.registerTool(MCP_TOOLS.searchDocs, {
140
+ title: "Search Documentation",
141
+ description: "Search the SDK README and API reference for a keyword or phrase. Returns matching sections with surrounding context.",
142
+ inputSchema: {
143
+ query: stringType().describe("Keyword or phrase to search for"),
144
+ max_results: numberType().optional().describe("Maximum number of results to return (default: 5)")
145
+ }
146
+ }, async (args) => {
147
+ const query = typeof args?.query === "string" ? args.query.toLowerCase() : "";
148
+ const maxResults = typeof args?.max_results === "number" ? args.max_results : 5;
149
+ if (!query) return { content: [{
150
+ type: "text",
151
+ text: JSON.stringify({ error: "query is required" })
152
+ }] };
153
+ const sources = [{
154
+ name: "README.md",
155
+ path: join(packageRoot, "README.md")
156
+ }, {
157
+ name: "llms-full.txt",
158
+ path: join(packageRoot, "llms-full.txt")
159
+ }];
160
+ const results = [];
161
+ for (const { name, path } of sources) {
162
+ let content;
163
+ try {
164
+ content = readFileSync(path, "utf8");
165
+ } catch {
166
+ continue;
167
+ }
168
+ const lines = content.split("\n");
169
+ let currentHeading = "(top)";
170
+ for (let i = 0; i < lines.length; i++) {
171
+ const line = lines[i] ?? "";
172
+ if (line.startsWith("#")) currentHeading = line.replace(/^#+\s*/, "");
173
+ if (line.toLowerCase().includes(query)) {
174
+ const start = Math.max(0, i - 2);
175
+ const end = Math.min(lines.length, i + 3);
176
+ results.push({
177
+ source: name,
178
+ heading: currentHeading,
179
+ snippet: lines.slice(start, end).join("\n"),
180
+ line: i + 1,
181
+ priority: headingPriority(currentHeading)
182
+ });
183
+ }
184
+ }
185
+ }
186
+ results.sort((a, b) => b.priority - a.priority || a.line - b.line);
187
+ const selected = results.slice(0, maxResults);
188
+ return { content: [{
189
+ type: "text",
190
+ text: JSON.stringify({
191
+ query,
192
+ total: selected.length,
193
+ results: selected.map(({ priority, ...rest }) => rest)
194
+ }, null, 2)
195
+ }] };
196
+ });
197
+ server.registerResource("event_schema", MCP_RESOURCES.eventSchema, {
198
+ title: "Amplitude AI Event Schema",
199
+ description: "Current event and property catalog for @amplitude/ai.",
200
+ mimeType: "application/json"
201
+ }, async () => ({ contents: [{
202
+ uri: MCP_RESOURCES.eventSchema,
203
+ mimeType: "application/json",
204
+ text: JSON.stringify(readEventCatalog(), null, 2)
205
+ }] }));
206
+ server.registerResource("integration_patterns", MCP_RESOURCES.integrationPatterns, {
207
+ title: "Amplitude AI Integration Patterns",
208
+ description: "Canonical setup patterns used by docs and agent workflows.",
209
+ mimeType: "application/json"
210
+ }, async () => ({ contents: [{
211
+ uri: MCP_RESOURCES.integrationPatterns,
212
+ mimeType: "application/json",
213
+ text: JSON.stringify({ patterns: getIntegrationPatterns() }, null, 2)
214
+ }] }));
215
+ server.registerPrompt(MCP_PROMPTS.instrumentApp, {
216
+ title: "Instrument App",
217
+ description: "Guided checklist for instrumenting an app with @amplitude/ai from zero to validated setup.",
218
+ argsSchema: {
219
+ framework: stringType().optional(),
220
+ provider: stringType().optional()
221
+ }
222
+ }, async (args) => {
223
+ return { messages: [{
224
+ role: "user",
225
+ content: {
226
+ type: "text",
227
+ text: `Instrument this ${typeof args?.framework === "string" ? args.framework : "node"} app with ${typeof args?.provider === "string" ? args.provider : "openai"} using @amplitude/ai. Start from the production default: wrapper/swap integration plus ai.agent(...).session(...), choose a content tier (full/metadata_only/customer_enriched) with privacy defaults, and treat patch() only as a migration fallback. Then validate setup and annotate any uninstrumented call sites.`
228
+ }
229
+ }] };
230
+ });
231
+ return server;
232
+ };
233
+ const runMcpServer = async () => {
234
+ const server = createServer();
235
+ const transport = new StdioServerTransport();
236
+ await server.connect(transport);
237
+ };
238
+
239
+ //#endregion
240
+ export { buildInstrumentationGuidance, createServer, runMcpServer };
241
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","names":["_catalogCache: EventCatalog | undefined","z.string","z\n .enum","z\n .number","sources: Array<{ name: string; path: string }>","results: Array<{\n source: string;\n heading: string;\n snippet: string;\n line: number;\n priority: number;\n }>","content: string"],"sources":["../../src/mcp/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport {\n MCP_PROMPTS,\n MCP_RESOURCES,\n MCP_SERVER_NAME,\n MCP_TOOLS,\n} from './contract.js';\nimport { getIntegrationPatterns } from './patterns.js';\nimport { analyzeFileInstrumentation } from './validate-file.js';\n\ntype EventSchema = {\n event_type: string;\n description?: string;\n event_properties?: Record<string, unknown>;\n};\n\ntype EventCatalog = {\n events?: EventSchema[];\n};\n\nconst packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..');\n\nlet _catalogCache: EventCatalog | undefined;\n\nconst readEventCatalog = (): EventCatalog => {\n if (_catalogCache) return _catalogCache;\n const filePath = join(packageRoot, 'data', 'agent_event_catalog.json');\n const raw = readFileSync(filePath, 'utf8');\n _catalogCache = JSON.parse(raw) as EventCatalog;\n return _catalogCache;\n};\n\ntype ContentTier = 'full' | 'metadata_only' | 'customer_enriched';\n\nconst normalizeContentTier = (value: unknown): ContentTier => {\n if (\n value === 'full' ||\n value === 'metadata_only' ||\n value === 'customer_enriched'\n ) {\n return value;\n }\n return 'full';\n};\n\nconst buildInstrumentationGuidance = (\n framework: string,\n provider: string,\n contentTier: ContentTier,\n): string[] => {\n const providerSetup =\n provider === 'openai' || provider === 'anthropic'\n ? `use ${provider} wrapper/swap integration (for example: \\`new ${provider === 'openai' ? 'OpenAI' : 'Anthropic'}({ amplitude: ai, ... })\\`)`\n : `use the ${provider} provider wrapper class from @amplitude/ai`;\n\n const frameworkStep =\n framework === 'express' || framework === 'koa' || framework === 'fastify'\n ? 'wire `createAmplitudeAIMiddleware()` for per-request identity propagation and run LLM calls inside session context'\n : framework === 'next' || framework === 'nextjs'\n ? 'wrap route handlers in `session.run()` so every LLM call inherits user/session lineage'\n : 'attach `ai.agent(...).session(...)` where request or conversation identity exists';\n\n const tierGuidance =\n contentTier === 'full'\n ? 'Content tier (`full`): maximum insight and automatic server enrichments. Prefer `redactPii: true` (+ optional `customRedactionPatterns`).'\n : contentTier === 'metadata_only'\n ? 'Content tier (`metadata_only`): no content leaves your infrastructure; keep token/cost/latency/session analytics.'\n : 'Content tier (`customer_enriched`): no content leaves infra; send your own labels via `trackSessionEnrichment(...)` for advanced analytics.';\n\n const nextForTier =\n contentTier === 'metadata_only'\n ? 'if you need quality/topic analytics without sending content, move to `customer_enriched` and emit structured enrichments.'\n : contentTier === 'customer_enriched'\n ? 'if policy allows and you want zero eval-code overhead, consider `full` with redaction for automatic server enrichments.'\n : 'if policy prohibits content egress, switch to `metadata_only` or `customer_enriched` without changing session instrumentation.';\n\n return [\n `Framework: ${framework}`,\n `Provider: ${provider}`,\n `Content tier: ${contentTier}`,\n '',\n 'Now:',\n '1) install @amplitude/ai and @amplitude/analytics-node',\n '2) initialize `AmplitudeAI` with API key',\n `3) ${providerSetup}`,\n '4) bind session context with `const session = ai.agent(...).session(...)` and run calls in `session.run(...)`',\n `5) ${frameworkStep}`,\n '',\n 'Next:',\n `- ${nextForTier}`,\n '- treat `patch({ amplitudeAI: ai })` as migration quickstart, not steady-state production.',\n '',\n 'Why:',\n '- session lineage unlocks scoring, enrichments, and reliable product-to-AI funnels.',\n '- wrapper/swap integration preserves fidelity while keeping implementation effort low.',\n `- ${tierGuidance}`,\n '- privacy controls apply before events leave your process.',\n '',\n 'Validate:',\n '- run `amplitude-ai doctor` and verify [Agent] session-scoped events.',\n ];\n};\n\nconst headingPriority = (heading: string): number => {\n const normalized = heading.toLowerCase();\n if (\n normalized.includes('choose your integration tier') ||\n normalized.includes('privacy & content control')\n ) {\n return 3;\n }\n if (\n normalized.includes('boundagent') ||\n normalized.includes('bound agent') ||\n normalized.includes('session')\n ) {\n return 2;\n }\n return 1;\n};\n\nconst createServer = (): McpServer => {\n const server = new McpServer({\n name: MCP_SERVER_NAME,\n version: '0.1.0',\n });\n\n server.registerTool(\n MCP_TOOLS.getEventSchema,\n {\n title: 'Get Event Schema',\n description:\n 'Return Amplitude AI event schema and event-property definitions.',\n inputSchema: {\n event_type: z.string().optional(),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const eventType =\n typeof args?.event_type === 'string' ? args.event_type : undefined;\n const catalog = readEventCatalog();\n const events = catalog.events ?? [];\n const selected = eventType\n ? events.filter((event) => event.event_type === eventType)\n : events;\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n total: selected.length,\n events: selected,\n },\n null,\n 2,\n ),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n MCP_TOOLS.getIntegrationPattern,\n {\n title: 'Get Integration Pattern',\n description:\n 'Return canonical instrumentation patterns for @amplitude/ai.',\n inputSchema: {\n id: z.string().optional(),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const id = typeof args?.id === 'string' ? args.id : undefined;\n const patterns = getIntegrationPatterns();\n const selected = id\n ? patterns.filter((pattern) => pattern.id === id)\n : patterns;\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ patterns: selected }, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n MCP_TOOLS.validateSetup,\n {\n title: 'Validate Setup',\n description: 'Validate environment variables required for @amplitude/ai.',\n inputSchema: {},\n },\n async () => {\n const required = ['AMPLITUDE_AI_API_KEY'];\n const missing = required.filter((name) => !process.env[name]);\n const status = missing.length === 0 ? 'ok' : 'missing_env';\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n status,\n missing_env: missing,\n },\n null,\n 2,\n ),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n MCP_TOOLS.suggestInstrumentation,\n {\n title: 'Suggest Instrumentation',\n description:\n 'Suggest practical next instrumentation steps from minimal hints.',\n inputSchema: {\n framework: z.string().optional(),\n provider: z.string().optional(),\n content_tier: z\n .enum(['full', 'metadata_only', 'customer_enriched'])\n .optional()\n .describe('Desired content tier (default: full)'),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const framework =\n typeof args?.framework === 'string' ? args.framework : 'node';\n const provider =\n typeof args?.provider === 'string' ? args.provider : 'openai';\n const contentTier = normalizeContentTier(args?.content_tier);\n const guidance = buildInstrumentationGuidance(\n framework,\n provider,\n contentTier,\n );\n\n return {\n content: [\n {\n type: 'text',\n text: guidance.join('\\n'),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n MCP_TOOLS.validateFile,\n {\n title: 'Validate File Instrumentation',\n description:\n 'Analyze source code to detect LLM call sites and report which are instrumented vs uninstrumented.',\n inputSchema: {\n source: z.string().describe('Source code content to analyze'),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const source = typeof args?.source === 'string' ? args.source : '';\n const result = analyzeFileInstrumentation(source);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n MCP_TOOLS.searchDocs,\n {\n title: 'Search Documentation',\n description:\n 'Search the SDK README and API reference for a keyword or phrase. Returns matching sections with surrounding context.',\n inputSchema: {\n query: z.string().describe('Keyword or phrase to search for'),\n max_results: z\n .number()\n .optional()\n .describe('Maximum number of results to return (default: 5)'),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const query =\n typeof args?.query === 'string' ? args.query.toLowerCase() : '';\n const maxResults =\n typeof args?.max_results === 'number' ? args.max_results : 5;\n\n if (!query) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ error: 'query is required' }),\n },\n ],\n };\n }\n\n const sources: Array<{ name: string; path: string }> = [\n { name: 'README.md', path: join(packageRoot, 'README.md') },\n { name: 'llms-full.txt', path: join(packageRoot, 'llms-full.txt') },\n ];\n\n const results: Array<{\n source: string;\n heading: string;\n snippet: string;\n line: number;\n priority: number;\n }> = [];\n\n for (const { name, path } of sources) {\n let content: string;\n try {\n content = readFileSync(path, 'utf8');\n } catch {\n continue;\n }\n const lines = content.split('\\n');\n let currentHeading = '(top)';\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i] ?? '';\n if (line.startsWith('#')) {\n currentHeading = line.replace(/^#+\\s*/, '');\n }\n if (line.toLowerCase().includes(query)) {\n const start = Math.max(0, i - 2);\n const end = Math.min(lines.length, i + 3);\n results.push({\n source: name,\n heading: currentHeading,\n snippet: lines.slice(start, end).join('\\n'),\n line: i + 1,\n priority: headingPriority(currentHeading),\n });\n }\n }\n }\n\n results.sort((a, b) => b.priority - a.priority || a.line - b.line);\n const selected = results.slice(0, maxResults);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n query,\n total: selected.length,\n results: selected.map(({ priority, ...rest }) => rest),\n },\n null,\n 2,\n ),\n },\n ],\n };\n },\n );\n\n server.registerResource(\n 'event_schema',\n MCP_RESOURCES.eventSchema,\n {\n title: 'Amplitude AI Event Schema',\n description: 'Current event and property catalog for @amplitude/ai.',\n mimeType: 'application/json',\n },\n async () => ({\n contents: [\n {\n uri: MCP_RESOURCES.eventSchema,\n mimeType: 'application/json',\n text: JSON.stringify(readEventCatalog(), null, 2),\n },\n ],\n }),\n );\n\n server.registerResource(\n 'integration_patterns',\n MCP_RESOURCES.integrationPatterns,\n {\n title: 'Amplitude AI Integration Patterns',\n description: 'Canonical setup patterns used by docs and agent workflows.',\n mimeType: 'application/json',\n },\n async () => ({\n contents: [\n {\n uri: MCP_RESOURCES.integrationPatterns,\n mimeType: 'application/json',\n text: JSON.stringify({ patterns: getIntegrationPatterns() }, null, 2),\n },\n ],\n }),\n );\n\n server.registerPrompt(\n MCP_PROMPTS.instrumentApp,\n {\n title: 'Instrument App',\n description:\n 'Guided checklist for instrumenting an app with @amplitude/ai from zero to validated setup.',\n argsSchema: {\n framework: z.string().optional(),\n provider: z.string().optional(),\n },\n },\n // biome-ignore lint/suspicious/noExplicitAny: SDK callback type is intentionally broad.\n async (args: any) => {\n const framework =\n typeof args?.framework === 'string' ? args.framework : 'node';\n const provider =\n typeof args?.provider === 'string' ? args.provider : 'openai';\n return {\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: `Instrument this ${framework} app with ${provider} using @amplitude/ai. Start from the production default: wrapper/swap integration plus ai.agent(...).session(...), choose a content tier (full/metadata_only/customer_enriched) with privacy defaults, and treat patch() only as a migration fallback. Then validate setup and annotate any uninstrumented call sites.`,\n },\n },\n ],\n };\n },\n );\n\n return server;\n};\n\nconst runMcpServer = async (): Promise<void> => {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n};\n\nexport { buildInstrumentationGuidance, createServer, runMcpServer };\n"],"mappings":"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"}