langwatch 0.20.0 → 0.22.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 (534) hide show
  1. package/dist/{add-2I554R6L.mjs → add-7QFHK67E.mjs} +10 -7
  2. package/dist/{add-2I554R6L.mjs.map → add-7QFHK67E.mjs.map} +1 -1
  3. package/dist/{add-FJ2SMVQE.js → add-EJSXUSD6.js} +13 -10
  4. package/dist/add-EJSXUSD6.js.map +1 -0
  5. package/dist/assign-5UEB6AJU.js +50 -0
  6. package/dist/assign-5UEB6AJU.js.map +1 -0
  7. package/dist/assign-JCCQ5D7I.mjs +50 -0
  8. package/dist/assign-JCCQ5D7I.mjs.map +1 -0
  9. package/dist/chunk-2BJPLPLU.js +33 -0
  10. package/dist/chunk-2BJPLPLU.js.map +1 -0
  11. package/dist/chunk-2OHGLTXZ.mjs +51 -0
  12. package/dist/chunk-2OHGLTXZ.mjs.map +1 -0
  13. package/dist/chunk-2VVANTLB.js +68 -0
  14. package/dist/chunk-2VVANTLB.js.map +1 -0
  15. package/dist/{chunk-L5Z7F7MG.mjs → chunk-43STSE3B.mjs} +2 -2
  16. package/dist/chunk-47F7UDHN.js +76 -0
  17. package/dist/chunk-47F7UDHN.js.map +1 -0
  18. package/dist/chunk-5PMWRY5J.js +80 -0
  19. package/dist/chunk-5PMWRY5J.js.map +1 -0
  20. package/dist/chunk-7FD7BEJP.mjs +63 -0
  21. package/dist/chunk-7FD7BEJP.mjs.map +1 -0
  22. package/dist/{chunk-PIF2RJWZ.js → chunk-AK4YCKWK.js} +107 -108
  23. package/dist/chunk-AK4YCKWK.js.map +1 -0
  24. package/dist/chunk-AMPLL3EP.js +70 -0
  25. package/dist/chunk-AMPLL3EP.js.map +1 -0
  26. package/dist/chunk-CGFG5FCC.js +674 -0
  27. package/dist/chunk-CGFG5FCC.js.map +1 -0
  28. package/dist/chunk-CLYXJJ6C.js +66 -0
  29. package/dist/chunk-CLYXJJ6C.js.map +1 -0
  30. package/dist/{chunk-WSESRS6L.mjs → chunk-COKOLKOR.mjs} +8 -6
  31. package/dist/{chunk-WSESRS6L.mjs.map → chunk-COKOLKOR.mjs.map} +1 -1
  32. package/dist/chunk-COMOCQA6.mjs +13 -0
  33. package/dist/chunk-COMOCQA6.mjs.map +1 -0
  34. package/dist/chunk-CYRJSLKD.js +68 -0
  35. package/dist/chunk-CYRJSLKD.js.map +1 -0
  36. package/dist/{chunk-BJUXJHMQ.js → chunk-D2FHOR76.js} +2 -2
  37. package/dist/{chunk-BJUXJHMQ.js.map → chunk-D2FHOR76.js.map} +1 -1
  38. package/dist/{chunk-5LYWRKDF.js → chunk-DB6OJGP4.js} +2 -60
  39. package/dist/chunk-DB6OJGP4.js.map +1 -0
  40. package/dist/chunk-DTEKJ3UD.mjs +66 -0
  41. package/dist/chunk-DTEKJ3UD.mjs.map +1 -0
  42. package/dist/{chunk-NW32UPEI.js → chunk-DUG35J5N.js} +17 -17
  43. package/dist/{chunk-NW32UPEI.js.map → chunk-DUG35J5N.js.map} +1 -1
  44. package/dist/chunk-DWHR6QJK.mjs +46 -0
  45. package/dist/chunk-DWHR6QJK.mjs.map +1 -0
  46. package/dist/{chunk-A7CF6ZGH.mjs → chunk-ESGWN42J.mjs} +2 -2
  47. package/dist/{chunk-FMYG6IOZ.mjs → chunk-FARZEN6T.mjs} +2 -2
  48. package/dist/chunk-FG3JQBJB.mjs +68 -0
  49. package/dist/chunk-FG3JQBJB.mjs.map +1 -0
  50. package/dist/chunk-FKIH4XCX.js +63 -0
  51. package/dist/chunk-FKIH4XCX.js.map +1 -0
  52. package/dist/chunk-GLCAOVJA.js +100 -0
  53. package/dist/chunk-GLCAOVJA.js.map +1 -0
  54. package/dist/{chunk-VCC7F6B7.js → chunk-H6F5OGSL.js} +11 -11
  55. package/dist/{chunk-VCC7F6B7.js.map → chunk-H6F5OGSL.js.map} +1 -1
  56. package/dist/chunk-HHRXMHVH.js +54 -0
  57. package/dist/chunk-HHRXMHVH.js.map +1 -0
  58. package/dist/{chunk-ZLCERT3X.js → chunk-HPQFHP6K.js} +12 -10
  59. package/dist/chunk-HPQFHP6K.js.map +1 -0
  60. package/dist/chunk-I2LDJPTG.mjs +100 -0
  61. package/dist/chunk-I2LDJPTG.mjs.map +1 -0
  62. package/dist/chunk-ILLEMTW3.mjs +674 -0
  63. package/dist/chunk-ILLEMTW3.mjs.map +1 -0
  64. package/dist/{chunk-OLI6GF46.js → chunk-JWF5KHWM.js} +16 -14
  65. package/dist/chunk-JWF5KHWM.js.map +1 -0
  66. package/dist/{chunk-CWXQ53NE.mjs → chunk-JYR4TXSB.mjs} +10 -8
  67. package/dist/chunk-JYR4TXSB.mjs.map +1 -0
  68. package/dist/chunk-KH64V3CL.mjs +54 -0
  69. package/dist/chunk-KH64V3CL.mjs.map +1 -0
  70. package/dist/chunk-KJSFJ5Z3.js +51 -0
  71. package/dist/chunk-KJSFJ5Z3.js.map +1 -0
  72. package/dist/{chunk-WASZSPD7.mjs → chunk-L3IOXWDG.mjs} +100 -101
  73. package/dist/chunk-L3IOXWDG.mjs.map +1 -0
  74. package/dist/{chunk-SSONRNFB.mjs → chunk-LN33ZL4Z.mjs} +2 -2
  75. package/dist/{chunk-SSONRNFB.mjs.map → chunk-LN33ZL4Z.mjs.map} +1 -1
  76. package/dist/{chunk-5M66X6SZ.mjs → chunk-LULJYN3P.mjs} +3 -3
  77. package/dist/chunk-M3WJZUOE.js +13 -0
  78. package/dist/chunk-M3WJZUOE.js.map +1 -0
  79. package/dist/{chunk-JVIQJFUE.mjs → chunk-M4IBRWUC.mjs} +2 -60
  80. package/dist/chunk-M4IBRWUC.mjs.map +1 -0
  81. package/dist/chunk-NIW2SFZZ.mjs +85 -0
  82. package/dist/chunk-NIW2SFZZ.mjs.map +1 -0
  83. package/dist/chunk-NMACMKQN.mjs +68 -0
  84. package/dist/chunk-NMACMKQN.mjs.map +1 -0
  85. package/dist/chunk-OAAMDWSK.js +65 -0
  86. package/dist/chunk-OAAMDWSK.js.map +1 -0
  87. package/dist/chunk-PO6XRHYW.mjs +80 -0
  88. package/dist/chunk-PO6XRHYW.mjs.map +1 -0
  89. package/dist/chunk-QH3WUSKF.mjs +33 -0
  90. package/dist/chunk-QH3WUSKF.mjs.map +1 -0
  91. package/dist/chunk-RKJDDUGQ.mjs +65 -0
  92. package/dist/chunk-RKJDDUGQ.mjs.map +1 -0
  93. package/dist/chunk-TCO73AV5.mjs +53 -0
  94. package/dist/chunk-TCO73AV5.mjs.map +1 -0
  95. package/dist/chunk-TQYUM3WH.mjs +70 -0
  96. package/dist/chunk-TQYUM3WH.mjs.map +1 -0
  97. package/dist/chunk-TV6ZXLE5.mjs +76 -0
  98. package/dist/chunk-TV6ZXLE5.mjs.map +1 -0
  99. package/dist/chunk-VMDYRBQ7.js +85 -0
  100. package/dist/chunk-VMDYRBQ7.js.map +1 -0
  101. package/dist/chunk-WE2PHCFS.js +53 -0
  102. package/dist/chunk-WE2PHCFS.js.map +1 -0
  103. package/dist/chunk-WLMXMXHE.js +54 -0
  104. package/dist/chunk-WLMXMXHE.js.map +1 -0
  105. package/dist/chunk-X7QBE6AA.js +46 -0
  106. package/dist/chunk-X7QBE6AA.js.map +1 -0
  107. package/dist/chunk-YTR56IZO.mjs +54 -0
  108. package/dist/chunk-YTR56IZO.mjs.map +1 -0
  109. package/dist/{chunk-QLBNSGWC.js → chunk-Z6MQQXMS.js} +4 -4
  110. package/dist/{chunk-QLBNSGWC.js.map → chunk-Z6MQQXMS.js.map} +1 -1
  111. package/dist/{chunk-QNT5P6VV.js → chunk-ZZL6VZZU.js} +2 -2
  112. package/dist/{chunk-QNT5P6VV.js.map → chunk-ZZL6VZZU.js.map} +1 -1
  113. package/dist/cli/index.js +467 -20
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/index.mjs +467 -20
  116. package/dist/cli/index.mjs.map +1 -1
  117. package/dist/create-45FMHT6B.mjs +78 -0
  118. package/dist/create-45FMHT6B.mjs.map +1 -0
  119. package/dist/create-4OA73B7I.mjs +44 -0
  120. package/dist/create-4OA73B7I.mjs.map +1 -0
  121. package/dist/create-4U5BPFCT.mjs +51 -0
  122. package/dist/create-4U5BPFCT.mjs.map +1 -0
  123. package/dist/create-ARJEJDYU.mjs +18 -0
  124. package/dist/create-CQ7W2OAA.js +78 -0
  125. package/dist/create-CQ7W2OAA.js.map +1 -0
  126. package/dist/create-FI6HBFTB.mjs +63 -0
  127. package/dist/create-FI6HBFTB.mjs.map +1 -0
  128. package/dist/create-FYLUSZTP.js +38 -0
  129. package/dist/create-FYLUSZTP.js.map +1 -0
  130. package/dist/create-GGYYU5KM.mjs +51 -0
  131. package/dist/create-GGYYU5KM.mjs.map +1 -0
  132. package/dist/create-K5LFAS4E.mjs +61 -0
  133. package/dist/create-K5LFAS4E.mjs.map +1 -0
  134. package/dist/create-KAPF2AOL.js +44 -0
  135. package/dist/create-KAPF2AOL.js.map +1 -0
  136. package/dist/create-LWG7ZHEW.mjs +71 -0
  137. package/dist/create-LWG7ZHEW.mjs.map +1 -0
  138. package/dist/create-MXYMAFMF.js +71 -0
  139. package/dist/create-MXYMAFMF.js.map +1 -0
  140. package/dist/create-NFYHBFF5.mjs +50 -0
  141. package/dist/create-NFYHBFF5.mjs.map +1 -0
  142. package/dist/create-OSAXTSUC.js +51 -0
  143. package/dist/create-OSAXTSUC.js.map +1 -0
  144. package/dist/create-RPHO5TZX.js +51 -0
  145. package/dist/create-RPHO5TZX.js.map +1 -0
  146. package/dist/create-RRI5ZTMI.mjs +51 -0
  147. package/dist/create-RRI5ZTMI.mjs.map +1 -0
  148. package/dist/create-UKLLNRXV.js +61 -0
  149. package/dist/create-UKLLNRXV.js.map +1 -0
  150. package/dist/create-UZ5NDYPV.js +88 -0
  151. package/dist/create-UZ5NDYPV.js.map +1 -0
  152. package/dist/create-WV2NQDV5.js +63 -0
  153. package/dist/create-WV2NQDV5.js.map +1 -0
  154. package/dist/create-XGD3GULQ.js +50 -0
  155. package/dist/create-XGD3GULQ.js.map +1 -0
  156. package/dist/create-XZXVGMKU.js +51 -0
  157. package/dist/create-XZXVGMKU.js.map +1 -0
  158. package/dist/create-Z2XFL2HX.js +18 -0
  159. package/dist/create-Z2XFL2HX.js.map +1 -0
  160. package/dist/create-Z7DUMMQ4.mjs +38 -0
  161. package/dist/create-Z7DUMMQ4.mjs.map +1 -0
  162. package/dist/create-ZU4L3XOF.mjs +88 -0
  163. package/dist/create-ZU4L3XOF.mjs.map +1 -0
  164. package/dist/delete-22LDMLNG.mjs +61 -0
  165. package/dist/delete-22LDMLNG.mjs.map +1 -0
  166. package/dist/delete-2S67GS6A.mjs +40 -0
  167. package/dist/delete-2S67GS6A.mjs.map +1 -0
  168. package/dist/delete-3WCCA5O2.mjs +44 -0
  169. package/dist/delete-3WCCA5O2.mjs.map +1 -0
  170. package/dist/delete-4QNGDUH6.js +44 -0
  171. package/dist/delete-4QNGDUH6.js.map +1 -0
  172. package/dist/delete-555RUBQA.js +55 -0
  173. package/dist/delete-555RUBQA.js.map +1 -0
  174. package/dist/delete-5NINT2KV.mjs +42 -0
  175. package/dist/delete-5NINT2KV.mjs.map +1 -0
  176. package/dist/delete-5VDH4Q3Z.js +44 -0
  177. package/dist/delete-5VDH4Q3Z.js.map +1 -0
  178. package/dist/delete-6JPJPG4B.js +38 -0
  179. package/dist/delete-6JPJPG4B.js.map +1 -0
  180. package/dist/delete-6ZD3ARMB.js +61 -0
  181. package/dist/delete-6ZD3ARMB.js.map +1 -0
  182. package/dist/delete-AOSVEVNL.mjs +44 -0
  183. package/dist/delete-AOSVEVNL.mjs.map +1 -0
  184. package/dist/delete-BLTSYYZQ.js +40 -0
  185. package/dist/delete-BLTSYYZQ.js.map +1 -0
  186. package/dist/delete-CTE3RNKB.mjs +42 -0
  187. package/dist/delete-CTE3RNKB.mjs.map +1 -0
  188. package/dist/delete-HEF4DLSV.mjs +38 -0
  189. package/dist/delete-HEF4DLSV.mjs.map +1 -0
  190. package/dist/delete-I36NLS2V.mjs +65 -0
  191. package/dist/delete-I36NLS2V.mjs.map +1 -0
  192. package/dist/delete-J2P2Y2BW.mjs +63 -0
  193. package/dist/delete-J2P2Y2BW.mjs.map +1 -0
  194. package/dist/delete-KIXZ73DF.mjs +38 -0
  195. package/dist/delete-KIXZ73DF.mjs.map +1 -0
  196. package/dist/delete-L3SU34X6.mjs +44 -0
  197. package/dist/delete-L3SU34X6.mjs.map +1 -0
  198. package/dist/delete-N6OZW65U.js +44 -0
  199. package/dist/delete-N6OZW65U.js.map +1 -0
  200. package/dist/delete-PPEXA2V4.js +42 -0
  201. package/dist/delete-PPEXA2V4.js.map +1 -0
  202. package/dist/delete-PXGB35PF.js +65 -0
  203. package/dist/delete-PXGB35PF.js.map +1 -0
  204. package/dist/delete-QVE52G3Q.mjs +42 -0
  205. package/dist/delete-QVE52G3Q.mjs.map +1 -0
  206. package/dist/delete-R5TSAZOU.js +42 -0
  207. package/dist/delete-R5TSAZOU.js.map +1 -0
  208. package/dist/delete-RIHVCQ6G.mjs +55 -0
  209. package/dist/delete-RIHVCQ6G.mjs.map +1 -0
  210. package/dist/delete-UWPOVLSO.js +38 -0
  211. package/dist/delete-UWPOVLSO.js.map +1 -0
  212. package/dist/delete-XKF7KO4Y.js +63 -0
  213. package/dist/delete-XKF7KO4Y.js.map +1 -0
  214. package/dist/delete-ZY2UCN3W.js +42 -0
  215. package/dist/delete-ZY2UCN3W.js.map +1 -0
  216. package/dist/download-2Q5T4WW2.js +96 -0
  217. package/dist/download-2Q5T4WW2.js.map +1 -0
  218. package/dist/download-7RBJ3GZM.mjs +96 -0
  219. package/dist/download-7RBJ3GZM.mjs.map +1 -0
  220. package/dist/duplicate-7N6B5PJD.mjs +48 -0
  221. package/dist/duplicate-7N6B5PJD.mjs.map +1 -0
  222. package/dist/duplicate-HZGUFROD.js +48 -0
  223. package/dist/duplicate-HZGUFROD.js.map +1 -0
  224. package/dist/export-PP5LG6Q7.js +91 -0
  225. package/dist/export-PP5LG6Q7.js.map +1 -0
  226. package/dist/export-TGKA6WA4.mjs +91 -0
  227. package/dist/export-TGKA6WA4.mjs.map +1 -0
  228. package/dist/get-2AXSP6AP.js +62 -0
  229. package/dist/get-2AXSP6AP.js.map +1 -0
  230. package/dist/get-6UQYEENU.mjs +55 -0
  231. package/dist/get-6UQYEENU.mjs.map +1 -0
  232. package/dist/get-73K7EOMU.mjs +53 -0
  233. package/dist/get-73K7EOMU.mjs.map +1 -0
  234. package/dist/get-7JYKMJXV.mjs +85 -0
  235. package/dist/get-7JYKMJXV.mjs.map +1 -0
  236. package/dist/get-7V7OBWY5.js +86 -0
  237. package/dist/get-7V7OBWY5.js.map +1 -0
  238. package/dist/get-CBNUMPUN.mjs +64 -0
  239. package/dist/get-CBNUMPUN.mjs.map +1 -0
  240. package/dist/get-E2RIDN65.mjs +70 -0
  241. package/dist/get-E2RIDN65.mjs.map +1 -0
  242. package/dist/get-EN3CQXA7.js +51 -0
  243. package/dist/get-EN3CQXA7.js.map +1 -0
  244. package/dist/get-GHUHFWC3.js +58 -0
  245. package/dist/get-GHUHFWC3.js.map +1 -0
  246. package/dist/get-GQTPK2MW.mjs +51 -0
  247. package/dist/get-GQTPK2MW.mjs.map +1 -0
  248. package/dist/get-I2CQCKFW.mjs +62 -0
  249. package/dist/get-I2CQCKFW.mjs.map +1 -0
  250. package/dist/get-IDYGZX5O.mjs +51 -0
  251. package/dist/get-IDYGZX5O.mjs.map +1 -0
  252. package/dist/get-JAWJ5RIB.mjs +66 -0
  253. package/dist/get-JAWJ5RIB.mjs.map +1 -0
  254. package/dist/get-JYN765FP.js +53 -0
  255. package/dist/get-JYN765FP.js.map +1 -0
  256. package/dist/get-MHGIJVZ5.js +51 -0
  257. package/dist/get-MHGIJVZ5.js.map +1 -0
  258. package/dist/get-NIA7XUS2.mjs +56 -0
  259. package/dist/get-NIA7XUS2.mjs.map +1 -0
  260. package/dist/get-PM5HD5BJ.js +64 -0
  261. package/dist/get-PM5HD5BJ.js.map +1 -0
  262. package/dist/get-PR65PTQ5.mjs +86 -0
  263. package/dist/get-PR65PTQ5.mjs.map +1 -0
  264. package/dist/get-PYWLY7QQ.mjs +71 -0
  265. package/dist/get-PYWLY7QQ.mjs.map +1 -0
  266. package/dist/get-QMCMYTDV.mjs +58 -0
  267. package/dist/get-QMCMYTDV.mjs.map +1 -0
  268. package/dist/get-QNYINIDO.mjs +95 -0
  269. package/dist/get-QNYINIDO.mjs.map +1 -0
  270. package/dist/get-S7MFACWM.js +70 -0
  271. package/dist/get-S7MFACWM.js.map +1 -0
  272. package/dist/get-SBMD2X2P.js +66 -0
  273. package/dist/get-SBMD2X2P.js.map +1 -0
  274. package/dist/get-T754IOEI.js +85 -0
  275. package/dist/get-T754IOEI.js.map +1 -0
  276. package/dist/get-TOXTYIN5.js +71 -0
  277. package/dist/get-TOXTYIN5.js.map +1 -0
  278. package/dist/get-UCHL4WHT.js +95 -0
  279. package/dist/get-UCHL4WHT.js.map +1 -0
  280. package/dist/get-Y22XVMEO.js +55 -0
  281. package/dist/get-Y22XVMEO.js.map +1 -0
  282. package/dist/get-ZEUJA3KA.js +56 -0
  283. package/dist/get-ZEUJA3KA.js.map +1 -0
  284. package/dist/{implementation-8fGNr_Mq.d.ts → implementation-7POf4yX4.d.ts} +1 -1
  285. package/dist/{implementation-DPQ9ez-J.d.mts → implementation-BbuGM8_W.d.mts} +1 -1
  286. package/dist/index.d.mts +395 -28
  287. package/dist/index.d.ts +395 -28
  288. package/dist/index.js +49 -196
  289. package/dist/index.js.map +1 -1
  290. package/dist/index.mjs +35 -182
  291. package/dist/index.mjs.map +1 -1
  292. package/dist/list-3JR4HKGF.mjs +70 -0
  293. package/dist/list-3JR4HKGF.mjs.map +1 -0
  294. package/dist/list-6BRQWVVV.js +74 -0
  295. package/dist/list-6BRQWVVV.js.map +1 -0
  296. package/dist/list-6JTFDJAI.mjs +93 -0
  297. package/dist/list-6JTFDJAI.mjs.map +1 -0
  298. package/dist/list-7LV6GOZO.js +85 -0
  299. package/dist/list-7LV6GOZO.js.map +1 -0
  300. package/dist/list-AEX4S72W.mjs +74 -0
  301. package/dist/list-AEX4S72W.mjs.map +1 -0
  302. package/dist/list-AGELVAP7.js +70 -0
  303. package/dist/list-AGELVAP7.js.map +1 -0
  304. package/dist/list-ARBOOOYN.mjs +81 -0
  305. package/dist/list-ARBOOOYN.mjs.map +1 -0
  306. package/dist/list-AYOW6OF7.js +73 -0
  307. package/dist/list-AYOW6OF7.js.map +1 -0
  308. package/dist/list-BAKCZVTL.mjs +78 -0
  309. package/dist/list-BAKCZVTL.mjs.map +1 -0
  310. package/dist/list-BDNGLOLK.mjs +77 -0
  311. package/dist/list-BDNGLOLK.mjs.map +1 -0
  312. package/dist/list-C6DPYHQ2.js +109 -0
  313. package/dist/list-C6DPYHQ2.js.map +1 -0
  314. package/dist/list-E7YPBCAF.mjs +85 -0
  315. package/dist/list-E7YPBCAF.mjs.map +1 -0
  316. package/dist/list-EPB36Y7W.mjs +49 -0
  317. package/dist/list-EPB36Y7W.mjs.map +1 -0
  318. package/dist/list-FLTPMAHR.js +93 -0
  319. package/dist/list-FLTPMAHR.js.map +1 -0
  320. package/dist/list-FPIWJ65T.mjs +83 -0
  321. package/dist/list-FPIWJ65T.mjs.map +1 -0
  322. package/dist/list-GN3SAZG2.js +83 -0
  323. package/dist/list-GN3SAZG2.js.map +1 -0
  324. package/dist/list-JK36QVS2.js +73 -0
  325. package/dist/list-JK36QVS2.js.map +1 -0
  326. package/dist/list-JRWFJU5H.js +81 -0
  327. package/dist/list-JRWFJU5H.js.map +1 -0
  328. package/dist/list-KIJ4ILEN.mjs +78 -0
  329. package/dist/list-KIJ4ILEN.mjs.map +1 -0
  330. package/dist/list-KQKELE44.mjs +73 -0
  331. package/dist/list-KQKELE44.mjs.map +1 -0
  332. package/dist/list-LMMRRFZC.js +77 -0
  333. package/dist/list-LMMRRFZC.js.map +1 -0
  334. package/dist/{list-53QTWXGF.mjs → list-N7WIOJ5A.mjs} +29 -68
  335. package/dist/list-N7WIOJ5A.mjs.map +1 -0
  336. package/dist/list-RS4QL7NE.mjs +83 -0
  337. package/dist/list-RS4QL7NE.mjs.map +1 -0
  338. package/dist/list-SDMJ2GJE.js +81 -0
  339. package/dist/list-SDMJ2GJE.js.map +1 -0
  340. package/dist/list-UKGJOVJE.js +49 -0
  341. package/dist/list-UKGJOVJE.js.map +1 -0
  342. package/dist/list-UOTJUE2P.js +79 -0
  343. package/dist/list-UOTJUE2P.js.map +1 -0
  344. package/dist/list-W2MYF4RU.js +78 -0
  345. package/dist/list-W2MYF4RU.js.map +1 -0
  346. package/dist/list-WYYGGV5V.mjs +81 -0
  347. package/dist/list-WYYGGV5V.mjs.map +1 -0
  348. package/dist/list-WZ4KHBMF.mjs +73 -0
  349. package/dist/list-WZ4KHBMF.mjs.map +1 -0
  350. package/dist/list-XTOWXYB2.js +83 -0
  351. package/dist/list-XTOWXYB2.js.map +1 -0
  352. package/dist/list-Z5EEMYRQ.js +78 -0
  353. package/dist/list-Z5EEMYRQ.js.map +1 -0
  354. package/dist/list-ZB53NL6Z.mjs +79 -0
  355. package/dist/list-ZB53NL6Z.mjs.map +1 -0
  356. package/dist/{login-QWXRNDAM.mjs → login-4AX6AOKI.mjs} +20 -3
  357. package/dist/login-4AX6AOKI.mjs.map +1 -0
  358. package/dist/{login-XBFOVP6G.js → login-H3SQDBT7.js} +21 -4
  359. package/dist/login-H3SQDBT7.js.map +1 -0
  360. package/dist/observability-sdk/index.d.mts +3 -3
  361. package/dist/observability-sdk/index.d.ts +3 -3
  362. package/dist/observability-sdk/index.js +8 -6
  363. package/dist/observability-sdk/index.js.map +1 -1
  364. package/dist/observability-sdk/index.mjs +8 -6
  365. package/dist/observability-sdk/instrumentation/langchain/index.d.mts +1 -1
  366. package/dist/observability-sdk/instrumentation/langchain/index.d.ts +1 -1
  367. package/dist/observability-sdk/instrumentation/langchain/index.js +17 -16
  368. package/dist/observability-sdk/instrumentation/langchain/index.js.map +1 -1
  369. package/dist/observability-sdk/instrumentation/langchain/index.mjs +3 -2
  370. package/dist/observability-sdk/instrumentation/langchain/index.mjs.map +1 -1
  371. package/dist/observability-sdk/setup/node/index.js +6 -5
  372. package/dist/observability-sdk/setup/node/index.js.map +1 -1
  373. package/dist/observability-sdk/setup/node/index.mjs +5 -4
  374. package/dist/pull-64HVVOBC.mjs +23 -0
  375. package/dist/pull-QIANBELG.js +23 -0
  376. package/dist/pull-QIANBELG.js.map +1 -0
  377. package/dist/push-GXLGORLM.mjs +23 -0
  378. package/dist/push-GXLGORLM.mjs.map +1 -0
  379. package/dist/push-I3BJSL6N.js +23 -0
  380. package/dist/push-I3BJSL6N.js.map +1 -0
  381. package/dist/query-UF2LDBR4.js +158 -0
  382. package/dist/query-UF2LDBR4.js.map +1 -0
  383. package/dist/query-ZI7HJSIY.mjs +158 -0
  384. package/dist/query-ZI7HJSIY.mjs.map +1 -0
  385. package/dist/records-add-4LX4JHLO.mjs +94 -0
  386. package/dist/records-add-4LX4JHLO.mjs.map +1 -0
  387. package/dist/records-add-WTIGBJV4.js +94 -0
  388. package/dist/records-add-WTIGBJV4.js.map +1 -0
  389. package/dist/records-delete-IY37NWPN.mjs +42 -0
  390. package/dist/records-delete-IY37NWPN.mjs.map +1 -0
  391. package/dist/records-delete-MLOG4DM4.js +42 -0
  392. package/dist/records-delete-MLOG4DM4.js.map +1 -0
  393. package/dist/records-list-EP6OCFH5.js +85 -0
  394. package/dist/records-list-EP6OCFH5.js.map +1 -0
  395. package/dist/records-list-RIDOAE2V.mjs +85 -0
  396. package/dist/records-list-RIDOAE2V.mjs.map +1 -0
  397. package/dist/records-update-5QZBDYUJ.js +49 -0
  398. package/dist/records-update-5QZBDYUJ.js.map +1 -0
  399. package/dist/records-update-JINO26IA.mjs +49 -0
  400. package/dist/records-update-JINO26IA.mjs.map +1 -0
  401. package/dist/{remove-Q573N52S.mjs → remove-HLVK7VUB.mjs} +10 -7
  402. package/dist/{remove-Q573N52S.mjs.map → remove-HLVK7VUB.mjs.map} +1 -1
  403. package/dist/{remove-KIZPGE7J.js → remove-LDX2BSUH.js} +12 -9
  404. package/dist/remove-LDX2BSUH.js.map +1 -0
  405. package/dist/rename-FP7X3GJJ.mjs +38 -0
  406. package/dist/rename-FP7X3GJJ.mjs.map +1 -0
  407. package/dist/rename-PUSZYLZ7.js +38 -0
  408. package/dist/rename-PUSZYLZ7.js.map +1 -0
  409. package/dist/restore-5L5MLISA.mjs +63 -0
  410. package/dist/restore-5L5MLISA.mjs.map +1 -0
  411. package/dist/restore-OXNQMRMJ.js +63 -0
  412. package/dist/restore-OXNQMRMJ.js.map +1 -0
  413. package/dist/run-AIGCDUDF.mjs +143 -0
  414. package/dist/run-AIGCDUDF.mjs.map +1 -0
  415. package/dist/run-CKZ6VNKK.js +143 -0
  416. package/dist/run-CKZ6VNKK.js.map +1 -0
  417. package/dist/run-FE4QMJO5.mjs +67 -0
  418. package/dist/run-FE4QMJO5.mjs.map +1 -0
  419. package/dist/run-FJDOSV5E.js +128 -0
  420. package/dist/run-FJDOSV5E.js.map +1 -0
  421. package/dist/run-GUSPWLCC.mjs +128 -0
  422. package/dist/run-GUSPWLCC.mjs.map +1 -0
  423. package/dist/run-KNCB7OEA.js +86 -0
  424. package/dist/run-KNCB7OEA.js.map +1 -0
  425. package/dist/run-KZKAHFBR.js +67 -0
  426. package/dist/run-KZKAHFBR.js.map +1 -0
  427. package/dist/run-QW2HL4EK.mjs +86 -0
  428. package/dist/run-QW2HL4EK.mjs.map +1 -0
  429. package/dist/run-UZVJBWGG.js +130 -0
  430. package/dist/run-UZVJBWGG.js.map +1 -0
  431. package/dist/run-WZ4CSMTP.mjs +130 -0
  432. package/dist/run-WZ4CSMTP.mjs.map +1 -0
  433. package/dist/search-5B32YGSP.mjs +112 -0
  434. package/dist/search-5B32YGSP.mjs.map +1 -0
  435. package/dist/search-J5GDX5JK.js +112 -0
  436. package/dist/search-J5GDX5JK.js.map +1 -0
  437. package/dist/set-2DYJNVS5.mjs +62 -0
  438. package/dist/set-2DYJNVS5.mjs.map +1 -0
  439. package/dist/set-S5L5QSYZ.js +62 -0
  440. package/dist/set-S5L5QSYZ.js.map +1 -0
  441. package/dist/status-OIXOYFH4.mjs +101 -0
  442. package/dist/status-OIXOYFH4.mjs.map +1 -0
  443. package/dist/status-Q2PEMYJT.mjs +70 -0
  444. package/dist/status-Q2PEMYJT.mjs.map +1 -0
  445. package/dist/status-QRK56VLF.js +70 -0
  446. package/dist/status-QRK56VLF.js.map +1 -0
  447. package/dist/status-T7NOWM4X.js +101 -0
  448. package/dist/status-T7NOWM4X.js.map +1 -0
  449. package/dist/{sync-YPJIIHKC.js → sync-IDSAYUGO.js} +16 -13
  450. package/dist/sync-IDSAYUGO.js.map +1 -0
  451. package/dist/{sync-TM7JZNNW.mjs → sync-LA27E4UB.mjs} +12 -9
  452. package/dist/{sync-TM7JZNNW.mjs.map → sync-LA27E4UB.mjs.map} +1 -1
  453. package/dist/{types-DQiByKdr.d.ts → types-B4TSe7JR.d.ts} +6546 -2251
  454. package/dist/{types-CoHIwxng.d.mts → types-CWY5yQki.d.mts} +6546 -2251
  455. package/dist/update-3B43ZW4X.mjs +53 -0
  456. package/dist/update-3B43ZW4X.mjs.map +1 -0
  457. package/dist/update-3C6Y2Y2P.js +53 -0
  458. package/dist/update-3C6Y2Y2P.js.map +1 -0
  459. package/dist/update-4D7R3VYO.js +75 -0
  460. package/dist/update-4D7R3VYO.js.map +1 -0
  461. package/dist/update-4FC4YPW7.mjs +71 -0
  462. package/dist/update-4FC4YPW7.mjs.map +1 -0
  463. package/dist/update-4YMVL4UT.mjs +74 -0
  464. package/dist/update-4YMVL4UT.mjs.map +1 -0
  465. package/dist/update-7ZEJO5SB.js +74 -0
  466. package/dist/update-7ZEJO5SB.js.map +1 -0
  467. package/dist/update-BADZ6GRL.js +66 -0
  468. package/dist/update-BADZ6GRL.js.map +1 -0
  469. package/dist/update-DLFJBCI2.js +68 -0
  470. package/dist/update-DLFJBCI2.js.map +1 -0
  471. package/dist/update-EB7WMPOP.js +53 -0
  472. package/dist/update-EB7WMPOP.js.map +1 -0
  473. package/dist/update-EG6BZOLC.mjs +51 -0
  474. package/dist/update-EG6BZOLC.mjs.map +1 -0
  475. package/dist/update-FKL5Y73R.js +69 -0
  476. package/dist/update-FKL5Y73R.js.map +1 -0
  477. package/dist/update-GWTLCIAT.mjs +69 -0
  478. package/dist/update-GWTLCIAT.mjs.map +1 -0
  479. package/dist/update-MFZOMTRJ.mjs +51 -0
  480. package/dist/update-MFZOMTRJ.mjs.map +1 -0
  481. package/dist/update-PSY46JJD.mjs +68 -0
  482. package/dist/update-PSY46JJD.mjs.map +1 -0
  483. package/dist/update-PXCMJWY3.mjs +53 -0
  484. package/dist/update-PXCMJWY3.mjs.map +1 -0
  485. package/dist/update-R72C65QF.mjs +66 -0
  486. package/dist/update-R72C65QF.mjs.map +1 -0
  487. package/dist/update-RCZ47II5.js +52 -0
  488. package/dist/update-RCZ47II5.js.map +1 -0
  489. package/dist/update-RPD2OXXQ.js +51 -0
  490. package/dist/update-RPD2OXXQ.js.map +1 -0
  491. package/dist/update-VLY6LJVM.js +51 -0
  492. package/dist/update-VLY6LJVM.js.map +1 -0
  493. package/dist/update-WKM6XI4V.mjs +75 -0
  494. package/dist/update-WKM6XI4V.mjs.map +1 -0
  495. package/dist/update-WQK5Q34V.mjs +52 -0
  496. package/dist/update-WQK5Q34V.mjs.map +1 -0
  497. package/dist/update-YMWBN55I.js +71 -0
  498. package/dist/update-YMWBN55I.js.map +1 -0
  499. package/dist/upload-6LF5GVLP.js +73 -0
  500. package/dist/upload-6LF5GVLP.js.map +1 -0
  501. package/dist/upload-QWAITH5R.mjs +73 -0
  502. package/dist/upload-QWAITH5R.mjs.map +1 -0
  503. package/dist/versions-HIYVXIKM.js +82 -0
  504. package/dist/versions-HIYVXIKM.js.map +1 -0
  505. package/dist/versions-JPUSBSTF.mjs +82 -0
  506. package/dist/versions-JPUSBSTF.mjs.map +1 -0
  507. package/package.json +1 -1
  508. package/dist/add-FJ2SMVQE.js.map +0 -1
  509. package/dist/chunk-5LYWRKDF.js.map +0 -1
  510. package/dist/chunk-CWXQ53NE.mjs.map +0 -1
  511. package/dist/chunk-JVIQJFUE.mjs.map +0 -1
  512. package/dist/chunk-OLI6GF46.js.map +0 -1
  513. package/dist/chunk-PIF2RJWZ.js.map +0 -1
  514. package/dist/chunk-WASZSPD7.mjs.map +0 -1
  515. package/dist/chunk-ZLCERT3X.js.map +0 -1
  516. package/dist/list-53QTWXGF.mjs.map +0 -1
  517. package/dist/list-LBDUK454.js +0 -148
  518. package/dist/list-LBDUK454.js.map +0 -1
  519. package/dist/login-QWXRNDAM.mjs.map +0 -1
  520. package/dist/login-XBFOVP6G.js.map +0 -1
  521. package/dist/pull-3B3CBSSM.js +0 -20
  522. package/dist/pull-3B3CBSSM.js.map +0 -1
  523. package/dist/pull-WK6P7KS2.mjs +0 -20
  524. package/dist/push-G457CXVG.mjs +0 -20
  525. package/dist/push-GKFQL6GO.js +0 -20
  526. package/dist/push-GKFQL6GO.js.map +0 -1
  527. package/dist/remove-KIZPGE7J.js.map +0 -1
  528. package/dist/sync-YPJIIHKC.js.map +0 -1
  529. /package/dist/{chunk-L5Z7F7MG.mjs.map → chunk-43STSE3B.mjs.map} +0 -0
  530. /package/dist/{chunk-A7CF6ZGH.mjs.map → chunk-ESGWN42J.mjs.map} +0 -0
  531. /package/dist/{chunk-FMYG6IOZ.mjs.map → chunk-FARZEN6T.mjs.map} +0 -0
  532. /package/dist/{chunk-5M66X6SZ.mjs.map → chunk-LULJYN3P.mjs.map} +0 -0
  533. /package/dist/{pull-WK6P7KS2.mjs.map → create-ARJEJDYU.mjs.map} +0 -0
  534. /package/dist/{push-G457CXVG.mjs.map → pull-64HVVOBC.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-DB6OJGP4.js","../src/logger/index.ts","../src/observability-sdk/semconv/attributes.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-DB6OJGP4.js","sourcesContent":[null,"// Logger utility for SDKs\n//\n// Usage:\n// - If you pass your own Logger implementation, the SDK will use it as-is (no log level filtering or prefixing applied).\n// - If you use ConsoleLogger, you can specify log level and prefix options.\n// - NoOpLogger disables all logging.\n//\n// Example:\n// const logger = new ConsoleLogger({ level: \"warn\", prefix: \"SDK\" });\n// logger.info(\"This will not show\");\n// logger.warn(\"This will show with prefix\");\n//\n// // If you pass your own logger, SDK will not filter logs:\n// const customLogger: Logger = { ... };\n// // SDK uses customLogger as-is\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst logLevelOrder: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n} as const;\n\nexport interface Logger {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nexport class NoOpLogger implements Logger {\n debug: () => void = () => { /* noop */ }\n info: () => void = () => { /* noop */ }\n warn: () => void = () => { /* noop */ }\n error: () => void = () => { /* noop */ }\n}\n\ninterface ConsoleLoggerOptions {\n level: LogLevel;\n prefix?: string;\n}\n\n/**\n * ConsoleLogger applies log level filtering and optional prefixing.\n * If you pass your own Logger, the SDK will not apply log level filtering or prefixing.\n */\nexport class ConsoleLogger implements Logger {\n private level: LogLevel;\n private prefix?: string;\n\n constructor(options: ConsoleLoggerOptions = { level: \"warn\" }) {\n this.level = options.level;\n this.prefix = options.prefix;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return logLevelOrder[level] >= logLevelOrder[this.level];\n }\n\n private format(message: string): string {\n return this.prefix ? `[${this.prefix}] ${message}` : message;\n }\n\n debug: (message: string, ...args: unknown[]) => void = (message: string, ...args: unknown[]): void => {\n if (this.shouldLog(\"debug\")) console.debug(this.format(message), ...args);\n };\n info: (message: string, ...args: unknown[]) => void = (message: string, ...args: unknown[]): void => {\n if (this.shouldLog(\"info\")) console.info(this.format(message), ...args);\n };\n warn: (message: string, ...args: unknown[]) => void = (message: string, ...args: unknown[]): void => {\n if (this.shouldLog(\"warn\")) console.warn(this.format(message), ...args);\n }\n error: (message: string, ...args: unknown[]) => void = (message: string, ...args: unknown[]): void => {\n if (this.shouldLog(\"error\")) console.error(this.format(message), ...args);\n }\n}\n","/*\n This file contains the semantic conventions for attributes either owned by LangWatch, or\n which are no yet part of the OpenTelemetry semantic conventions for Gen AI.\n\n Any that are not yet part of the OpenTelemetry semantic conventions for Gen AI are\n marked with an UNSTABLE_ prefix.\n*/\n\n/**\n * LangWatch input data attribute key\n * Used to store the input data for a span or event\n */\nexport const ATTR_LANGWATCH_INPUT = \"langwatch.input\";\n\n/**\n * LangWatch output data attribute key\n * Used to store the output data for a span or event\n */\nexport const ATTR_LANGWATCH_OUTPUT = \"langwatch.output\";\n\n/**\n * LangWatch span type attribute key\n * Used to identify the type of span being traced\n */\nexport const ATTR_LANGWATCH_SPAN_TYPE = \"langwatch.span.type\";\n\n/**\n * LangWatch RAG contexts attribute key\n * Used to store retrieval-augmented generation contexts\n */\nexport const ATTR_LANGWATCH_RAG_CONTEXTS = \"langwatch.contexts\";\n\n/**\n * LangWatch metrics attribute key\n * Used to store custom metrics data\n */\nexport const ATTR_LANGWATCH_METRICS = \"langwatch.metrics\";\n\n/**\n * LangWatch SDK version attribute key\n * Used to track the version of the LangWatch SDK being used\n */\nexport const ATTR_LANGWATCH_SDK_VERSION = \"langwatch.sdk.version\";\n\n/**\n * LangWatch SDK name attribute key\n * Used to identify the LangWatch SDK implementation\n */\nexport const ATTR_LANGWATCH_SDK_NAME = \"langwatch.sdk.name\";\n\n/**\n * LangWatch SDK language attribute key\n * Used to identify the programming language of the SDK\n */\nexport const ATTR_LANGWATCH_SDK_LANGUAGE = \"langwatch.sdk.language\";\n\n/**\n * LangWatch timestamps attribute key\n * Used to store timing information for events\n */\nexport const ATTR_LANGWATCH_TIMESTAMPS = \"langwatch.timestamps\";\n\n/**\n * LangWatch custom evaluation attribute key\n * Used to store custom evaluation data\n */\nexport const ATTR_LANGWATCH_EVALUATION_CUSTOM = \"langwatch.evaluation.custom\";\n\n/**\n * LangWatch parameters attribute key\n * Used to store parameter data for operations\n */\nexport const ATTR_LANGWATCH_PARAMS = \"langwatch.params\";\n\n/**\n * LangWatch customer ID attribute key\n * Used to identify the customer associated with the trace\n */\nexport const ATTR_LANGWATCH_CUSTOMER_ID = \"langwatch.customer.id\";\n\n/**\n * LangWatch thread ID attribute key\n * Used to group related operations within a conversation thread\n */\nexport const ATTR_LANGWATCH_THREAD_ID = \"langwatch.thread.id\";\n\n/**\n * LangWatch user ID attribute key\n * Used to store the user ID for a span or event\n */\nexport const ATTR_LANGWATCH_USER_ID = \"langwatch.user.id\";\n\n/**\n * LangWatch labels attribute key\n * Used to store labels for a span or event\n */\nexport const ATTR_LANGWATCH_LABELS = \"langwatch.labels\";\n\n/**\n * LangWatch tags attribute key\n * Used to store tags for a span or event\n *\n * @deprecated: Please use `ATTR_LANGWATCH_LABELS`.\n */\nexport const ATTR_LANGWATCH_TAGS = \"langwatch.labels\";\n\n/**\n * LangWatch streaming attribute key\n * Used to indicate if the operation involves streaming\n */\nexport const ATTR_LANGWATCH_STREAMING = \"langwatch.gen_ai.streaming\";\n\n/**\n * LangWatch prompt ID attribute key\n * Used to identify the specific prompt being used\n */\nexport const ATTR_LANGWATCH_PROMPT_ID = \"langwatch.prompt.id\";\n\n/**\n * LangWatch prompt ID attribute key\n * Used to identify the specific prompt being used\n */\nexport const ATTR_LANGWATCH_PROMPT_HANDLE = \"langwatch.prompt.handle\";\n\n/**\n * LangWatch prompt version ID attribute key\n * Used to identify the specific version of a prompt\n */\nexport const ATTR_LANGWATCH_PROMPT_VERSION_ID = \"langwatch.prompt.version.id\";\n\n/**\n * LangWatch prompt variables attribute key\n * Used to store variables used in prompt templates\n */\nexport const ATTR_LANGWATCH_PROMPT_VARIABLES = \"langwatch.prompt.variables\";\n\n/**\n * LangWatch prompt selected ID attribute key\n * Used to identify which prompt was selected from a set\n */\nexport const ATTR_LANGWATCH_PROMPT_SELECTED_ID = \"langwatch.prompt.selected.id\";\n\n/**\n * LangWatch prompt version number attribute key\n * Used to track the version number of a prompt\n */\nexport const ATTR_LANGWATCH_PROMPT_VERSION_NUMBER =\n \"langwatch.prompt.version.number\";\n\n/**\n * LangWatch LangChain tags attribute key\n * Used to store tags associated with LangChain operations\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_TAGS = \"langwatch.langchain.tags\";\n\n/**\n * LangWatch LangChain event name attribute key\n * Used to identify the specific LangChain event type\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_EVENT_NAME =\n \"langwatch.langchain.event_name\";\n\n/**\n * LangWatch LangChain run ID attribute key\n * Used to identify a specific LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_ID = \"langwatch.langchain.run.id\";\n\n/**\n * LangWatch LangChain run tags attribute key\n * Used to store tags associated with a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_TAGS = \"langwatch.langchain.run.tags\";\n\n/**\n * LangWatch LangChain run type attribute key\n * Used to identify the type of LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_TYPE = \"langwatch.langchain.run.type\";\n\n/**\n * LangWatch LangChain run metadata attribute key\n * Used to store metadata associated with a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_METADATA =\n \"langwatch.langchain.run.metadata\";\n\n/**\n * LangWatch LangChain run extra parameters attribute key\n * Used to store additional parameters for a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_EXTRA_PARAMS =\n \"langwatch.langchain.run.extra_params\";\n\n/**\n * LangWatch LangChain run parent ID attribute key\n * Used to identify the parent run in a hierarchical structure\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_PARENT_ID =\n \"langwatch.langchain.run.parent.id\";\n"]}
@@ -0,0 +1,66 @@
1
+ // src/cli/utils/formatting.ts
2
+ import chalk from "chalk";
3
+ var stripAnsi = (str) => {
4
+ return str.replace(/\u001b\[[0-9;]*m/g, "");
5
+ };
6
+ var formatTable = ({
7
+ data,
8
+ headers,
9
+ colorMap = {},
10
+ emptyMessage = "No data found"
11
+ }) => {
12
+ if (data.length === 0) {
13
+ console.log(chalk.gray(emptyMessage));
14
+ return;
15
+ }
16
+ const colWidths = {};
17
+ headers.forEach((header) => {
18
+ colWidths[header] = Math.max(
19
+ header.length,
20
+ ...data.map((row) => {
21
+ var _a;
22
+ return stripAnsi((_a = row[header]) != null ? _a : "").length;
23
+ })
24
+ );
25
+ });
26
+ const headerRow = headers.map((header) => chalk.bold(header.padEnd(colWidths[header]))).join(" ");
27
+ console.log(headerRow);
28
+ const separator = headers.map((header) => "\u2500".repeat(colWidths[header])).join(" ");
29
+ console.log(chalk.gray(separator));
30
+ data.forEach((row) => {
31
+ const dataRow = headers.map((header) => {
32
+ var _a, _b;
33
+ const value = (_a = row[header]) != null ? _a : "";
34
+ const strippedLength = stripAnsi(value).length;
35
+ const paddingNeeded = colWidths[header] - strippedLength;
36
+ const paddedValue = value + " ".repeat(Math.max(0, paddingNeeded));
37
+ const colorFn = (_b = colorMap[header]) != null ? _b : chalk.gray;
38
+ return colorFn(paddedValue);
39
+ }).join(" ");
40
+ console.log(dataRow);
41
+ });
42
+ };
43
+ var formatRelativeTime = (dateString) => {
44
+ const date = new Date(dateString);
45
+ if (Number.isNaN(date.getTime())) return "\u2014";
46
+ const now = /* @__PURE__ */ new Date();
47
+ const diffMs = Math.max(0, now.getTime() - date.getTime());
48
+ const seconds = Math.floor(diffMs / 1e3);
49
+ const minutes = Math.floor(seconds / 60);
50
+ const hours = Math.floor(minutes / 60);
51
+ const days = Math.floor(hours / 24);
52
+ const months = Math.floor(days / 30);
53
+ const years = Math.floor(days / 365);
54
+ if (years > 0) return `${years}y ago`;
55
+ if (months > 0) return `${months}mo ago`;
56
+ if (days > 0) return `${days}d ago`;
57
+ if (hours > 0) return `${hours}h ago`;
58
+ if (minutes > 0) return `${minutes}m ago`;
59
+ return seconds === 0 ? "just now" : `${seconds}s ago`;
60
+ };
61
+
62
+ export {
63
+ formatTable,
64
+ formatRelativeTime
65
+ };
66
+ //# sourceMappingURL=chunk-DTEKJ3UD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/utils/formatting.ts"],"sourcesContent":["import chalk from \"chalk\";\n\n/**\n * Strips ANSI escape codes from a string for accurate length calculation.\n */\nexport const stripAnsi = (str: string): string => {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\u001b\\[[0-9;]*m/g, \"\");\n};\n\nexport type ColumnColorMap = Record<string, (value: string) => string>;\n\n/**\n * Prints a formatted table to stdout with column-aligned headers, separator,\n * and optional per-column color functions.\n *\n * Columns not in the colorMap default to chalk.gray.\n */\nexport const formatTable = ({\n data,\n headers,\n colorMap = {},\n emptyMessage = \"No data found\",\n}: {\n data: Array<Record<string, string>>;\n headers: string[];\n colorMap?: ColumnColorMap;\n emptyMessage?: string;\n}): void => {\n if (data.length === 0) {\n console.log(chalk.gray(emptyMessage));\n return;\n }\n\n const colWidths: Record<string, number> = {};\n headers.forEach((header) => {\n colWidths[header] = Math.max(\n header.length,\n ...data.map((row) => stripAnsi(row[header] ?? \"\").length),\n );\n });\n\n const headerRow = headers\n .map((header) => chalk.bold(header.padEnd(colWidths[header]!)))\n .join(\" \");\n console.log(headerRow);\n\n const separator = headers\n .map((header) => \"─\".repeat(colWidths[header]!))\n .join(\" \");\n console.log(chalk.gray(separator));\n\n data.forEach((row) => {\n const dataRow = headers\n .map((header) => {\n const value = row[header] ?? \"\";\n const strippedLength = stripAnsi(value).length;\n const paddingNeeded = colWidths[header]! - strippedLength;\n const paddedValue = value + \" \".repeat(Math.max(0, paddingNeeded));\n\n const colorFn = colorMap[header] ?? chalk.gray;\n return colorFn(paddedValue);\n })\n .join(\" \");\n console.log(dataRow);\n });\n};\n\n/**\n * Formats a date string as a human-readable relative time (e.g. \"3d ago\").\n *\n * Returns \"—\" for invalid dates. Clamps future dates to \"just now\".\n */\nexport const formatRelativeTime = (dateString: string): string => {\n const date = new Date(dateString);\n if (Number.isNaN(date.getTime())) return \"—\";\n\n const now = new Date();\n const diffMs = Math.max(0, now.getTime() - date.getTime());\n\n const seconds = Math.floor(diffMs / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (years > 0) return `${years}y ago`;\n if (months > 0) return `${months}mo ago`;\n if (days > 0) return `${days}d ago`;\n if (hours > 0) return `${hours}h ago`;\n if (minutes > 0) return `${minutes}m ago`;\n return seconds === 0 ? \"just now\" : `${seconds}s ago`;\n};\n"],"mappings":";AAAA,OAAO,WAAW;AAKX,IAAM,YAAY,CAAC,QAAwB;AAEhD,SAAO,IAAI,QAAQ,qBAAqB,EAAE;AAC5C;AAUO,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,eAAe;AACjB,MAKY;AACV,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,IAAI,MAAM,KAAK,YAAY,CAAC;AACpC;AAAA,EACF;AAEA,QAAM,YAAoC,CAAC;AAC3C,UAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAU,MAAM,IAAI,KAAK;AAAA,MACvB,OAAO;AAAA,MACP,GAAG,KAAK,IAAI,CAAC,QAAK;AAtCxB;AAsC2B,0BAAU,SAAI,MAAM,MAAV,YAAe,EAAE,EAAE;AAAA,OAAM;AAAA,IAC1D;AAAA,EACF,CAAC;AAED,QAAM,YAAY,QACf,IAAI,CAAC,WAAW,MAAM,KAAK,OAAO,OAAO,UAAU,MAAM,CAAE,CAAC,CAAC,EAC7D,KAAK,IAAI;AACZ,UAAQ,IAAI,SAAS;AAErB,QAAM,YAAY,QACf,IAAI,CAAC,WAAW,SAAI,OAAO,UAAU,MAAM,CAAE,CAAC,EAC9C,KAAK,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AAEjC,OAAK,QAAQ,CAAC,QAAQ;AACpB,UAAM,UAAU,QACb,IAAI,CAAC,WAAW;AAtDvB;AAuDQ,YAAM,SAAQ,SAAI,MAAM,MAAV,YAAe;AAC7B,YAAM,iBAAiB,UAAU,KAAK,EAAE;AACxC,YAAM,gBAAgB,UAAU,MAAM,IAAK;AAC3C,YAAM,cAAc,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,aAAa,CAAC;AAEjE,YAAM,WAAU,cAAS,MAAM,MAAf,YAAoB,MAAM;AAC1C,aAAO,QAAQ,WAAW;AAAA,IAC5B,CAAC,EACA,KAAK,IAAI;AACZ,YAAQ,IAAI,OAAO;AAAA,EACrB,CAAC;AACH;AAOO,IAAM,qBAAqB,CAAC,eAA+B;AAChE,QAAM,OAAO,IAAI,KAAK,UAAU;AAChC,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AAEzC,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,SAAS,KAAK,IAAI,GAAG,IAAI,QAAQ,IAAI,KAAK,QAAQ,CAAC;AAEzD,QAAM,UAAU,KAAK,MAAM,SAAS,GAAI;AACxC,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,QAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAClC,QAAM,SAAS,KAAK,MAAM,OAAO,EAAE;AACnC,QAAM,QAAQ,KAAK,MAAM,OAAO,GAAG;AAEnC,MAAI,QAAQ,EAAG,QAAO,GAAG,KAAK;AAC9B,MAAI,SAAS,EAAG,QAAO,GAAG,MAAM;AAChC,MAAI,OAAO,EAAG,QAAO,GAAG,IAAI;AAC5B,MAAI,QAAQ,EAAG,QAAO,GAAG,KAAK;AAC9B,MAAI,UAAU,EAAG,QAAO,GAAG,OAAO;AAClC,SAAO,YAAY,IAAI,aAAa,GAAG,OAAO;AAChD;","names":[]}
@@ -6,10 +6,10 @@
6
6
 
7
7
 
8
8
 
9
- var _chunkBJUXJHMQjs = require('./chunk-BJUXJHMQ.js');
9
+ var _chunkD2FHOR76js = require('./chunk-D2FHOR76.js');
10
10
 
11
11
 
12
- var _chunk5LYWRKDFjs = require('./chunk-5LYWRKDF.js');
12
+ var _chunkOAAMDWSKjs = require('./chunk-OAAMDWSK.js');
13
13
 
14
14
 
15
15
 
@@ -120,15 +120,15 @@ var LangWatchTraceExporter = class extends _exportertraceotlphttp.OTLPTraceExpor
120
120
  constructor(opts) {
121
121
  var _a, _b, _c, _d;
122
122
  const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
123
- const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : _chunkBJUXJHMQjs.DEFAULT_ENDPOINT;
124
- const url = new URL(_chunkBJUXJHMQjs.TRACES_PATH, endpoint);
123
+ const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : _chunkD2FHOR76js.DEFAULT_ENDPOINT;
124
+ const url = new URL(_chunkD2FHOR76js.TRACES_PATH, endpoint);
125
125
  const otelEndpoint = url.toString();
126
126
  super({
127
127
  headers: _chunkOHM7JUMRjs.__spreadValues.call(void 0, {
128
- "x-langwatch-sdk-name": _chunkBJUXJHMQjs.LANGWATCH_SDK_NAME_OBSERVABILITY,
129
- "x-langwatch-sdk-language": _chunkBJUXJHMQjs.LANGWATCH_SDK_LANGUAGE,
130
- "x-langwatch-sdk-version": _chunkBJUXJHMQjs.LANGWATCH_SDK_VERSION,
131
- "x-langwatch-sdk-runtime": _chunkBJUXJHMQjs.LANGWATCH_SDK_RUNTIME.call(void 0, )
128
+ "x-langwatch-sdk-name": _chunkD2FHOR76js.LANGWATCH_SDK_NAME_OBSERVABILITY,
129
+ "x-langwatch-sdk-language": _chunkD2FHOR76js.LANGWATCH_SDK_LANGUAGE,
130
+ "x-langwatch-sdk-version": _chunkD2FHOR76js.LANGWATCH_SDK_VERSION,
131
+ "x-langwatch-sdk-runtime": _chunkD2FHOR76js.LANGWATCH_SDK_RUNTIME.call(void 0, )
132
132
  }, apiKey ? { authorization: `Bearer ${apiKey}` } : {}),
133
133
  url: otelEndpoint.toString()
134
134
  });
@@ -161,15 +161,15 @@ var LangWatchLogsExporter = class extends _exporterlogsotlphttp.OTLPLogExporter
161
161
  constructor(opts) {
162
162
  var _a, _b, _c, _d;
163
163
  const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
164
- const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : _chunkBJUXJHMQjs.DEFAULT_ENDPOINT;
165
- const url = new URL(_chunkBJUXJHMQjs.LOGS_PATH, endpoint);
164
+ const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : _chunkD2FHOR76js.DEFAULT_ENDPOINT;
165
+ const url = new URL(_chunkD2FHOR76js.LOGS_PATH, endpoint);
166
166
  const otelEndpoint = url.toString();
167
167
  super({
168
168
  headers: _chunkOHM7JUMRjs.__spreadValues.call(void 0, {
169
- "x-langwatch-sdk-name": _chunkBJUXJHMQjs.LANGWATCH_SDK_NAME_OBSERVABILITY,
170
- "x-langwatch-sdk-language": _chunkBJUXJHMQjs.LANGWATCH_SDK_LANGUAGE,
171
- "x-langwatch-sdk-version": _chunkBJUXJHMQjs.LANGWATCH_SDK_VERSION,
172
- "x-langwatch-sdk-runtime": _chunkBJUXJHMQjs.LANGWATCH_SDK_RUNTIME.call(void 0, )
169
+ "x-langwatch-sdk-name": _chunkD2FHOR76js.LANGWATCH_SDK_NAME_OBSERVABILITY,
170
+ "x-langwatch-sdk-language": _chunkD2FHOR76js.LANGWATCH_SDK_LANGUAGE,
171
+ "x-langwatch-sdk-version": _chunkD2FHOR76js.LANGWATCH_SDK_VERSION,
172
+ "x-langwatch-sdk-runtime": _chunkD2FHOR76js.LANGWATCH_SDK_RUNTIME.call(void 0, )
173
173
  }, apiKey ? { authorization: `Bearer ${apiKey}` } : {}),
174
174
  url: otelEndpoint.toString()
175
175
  });
@@ -195,7 +195,7 @@ var LangWatchLoggerInternal = class {
195
195
  this.logger = logger;
196
196
  }
197
197
  emit(logRecord, options) {
198
- if (!_chunk5LYWRKDFjs.shouldCaptureOutput.call(void 0, )) {
198
+ if (!_chunkOAAMDWSKjs.shouldCaptureOutput.call(void 0, )) {
199
199
  logRecord.body = void 0;
200
200
  }
201
201
  if (!logRecord.context && !(options == null ? void 0 : options.excludeContext)) {
@@ -265,7 +265,7 @@ var LangWatchLoggerInternal = class {
265
265
  eventName,
266
266
  context: _api.context.active(),
267
267
  attributes: _chunkOHM7JUMRjs.__spreadValues.call(void 0, {}, attributes),
268
- body: _chunk5LYWRKDFjs.shouldCaptureOutput.call(void 0, ) ? body : void 0,
268
+ body: _chunkOAAMDWSKjs.shouldCaptureOutput.call(void 0, ) ? body : void 0,
269
269
  observedTimestamp: (/* @__PURE__ */ new Date()).getTime()
270
270
  });
271
271
  }
@@ -293,4 +293,4 @@ function createLangWatchLogger(logger) {
293
293
 
294
294
 
295
295
  exports.LangWatchTraceExporter = LangWatchTraceExporter; exports.LangWatchLogsExporter = LangWatchLogsExporter; exports.setLangWatchLoggerProvider = setLangWatchLoggerProvider; exports.getLangWatchLogger = getLangWatchLogger; exports.getLangWatchLoggerFromProvider = getLangWatchLoggerFromProvider;
296
- //# sourceMappingURL=chunk-NW32UPEI.js.map
296
+ //# sourceMappingURL=chunk-DUG35J5N.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-NW32UPEI.js","../src/observability-sdk/exporters/langwatch-trace-exporter.ts","../src/observability-sdk/exporters/trace-filters.ts","../src/observability-sdk/exporters/langwatch-logs-exporter.ts","../src/observability-sdk/semconv/events.ts","../src/observability-sdk/logger/index.ts","../src/observability-sdk/logger/implementation.ts"],"names":["_a"],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-NW32UPEI.js","sourcesContent":[null,"import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { type ExportResult } from '@opentelemetry/core';\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n TRACES_PATH,\n} from \"../../internal/constants\";\nimport {\n type TraceFilter,\n type Criteria,\n type Match,\n applyFilters,\n} from \"./trace-filters\";\n\n/**\n * Configuration options for the LangWatchTraceExporter.\n *\n * @property endpoint - Custom LangWatch endpoint URL. Falls back to LANGWATCH_ENDPOINT env var or default.\n * @property apiKey - API key for authentication. Falls back to LANGWATCH_API_KEY env var.\n * @property filters - Array of filters applied sequentially to spans before export.\n * Default: `[{ preset: \"excludeHttpRequests\" }]` to reduce framework noise.\n * Pass `null` or `[]` to disable all filtering.\n */\nexport interface LangWatchTraceExporterOptions {\n endpoint?: string;\n apiKey?: string;\n filters?: TraceFilter[] | null;\n}\n\nexport type { TraceFilter, Criteria, Match };\n\n/**\n * LangWatchTraceExporter extends the OpenTelemetry OTLP HTTP trace exporter\n * to send trace data to LangWatch with proper authentication and metadata headers.\n *\n * ## Features\n * - Automatic authorization header configuration via API key\n * - SDK version and runtime identification headers\n * - Proper endpoint URL construction for LangWatch ingestion\n * - Intent-based span filtering with presets and custom criteria\n *\n * ## Filtering Behavior\n * - **Default**: HTTP request spans are excluded to reduce framework noise\n * - **Pipeline**: Filters are applied sequentially with AND semantics\n * - **Matching**: All string comparisons are case-sensitive by default\n * - **Array Syntax**: All criteria require arrays of Match objects for explicit filtering\n *\n * ## Filter Types\n * - **Presets**: Pre-configured common filters (`vercelAIOnly`, `excludeHttpRequests`)\n * - **Include**: Keep only spans matching criteria (OR within field, AND across fields)\n * - **Exclude**: Remove spans matching criteria (OR within field, AND across fields)\n *\n * @example Basic usage with default filtering\n * ```typescript\n * import { LangWatchTraceExporter } from '@langwatch/observability';\n *\n * // Default: excludes HTTP request spans\n * const exporter = new LangWatchTraceExporter();\n * ```\n *\n * @example Using presets\n * ```typescript\n * // Keep only Vercel AI SDK spans\n * const exporterAI = new LangWatchTraceExporter({\n * filters: [{ preset: 'vercelAIOnly' }],\n * });\n *\n * // Explicitly exclude HTTP requests (same as default)\n * const exporterNoHttp = new LangWatchTraceExporter({\n * filters: [{ preset: 'excludeHttpRequests' }],\n * });\n *\n * // No filtering at all (send all spans)\n * const exporterAll = new LangWatchTraceExporter({\n * filters: null, // or filters: []\n * });\n * ```\n *\n * @example Custom filtering with criteria\n * ```typescript\n * // Include only spans with specific scope\n * const exporter1 = new LangWatchTraceExporter({\n * filters: [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } }\n * ],\n * });\n *\n * // Exclude spans by name pattern\n * const exporter2 = new LangWatchTraceExporter({\n * filters: [\n * { exclude: { name: [{ startsWith: 'internal.' }] } }\n * ],\n * });\n *\n * // Case-insensitive matching\n * const exporter3 = new LangWatchTraceExporter({\n * filters: [\n * { include: { name: [{ equals: 'chat.completion', ignoreCase: true }] } }\n * ],\n * });\n * ```\n *\n * @example Filter pipelines (AND semantics)\n * ```typescript\n * // Keep AI spans, then remove HTTP requests\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } },\n * { preset: 'excludeHttpRequests' },\n * ],\n * });\n * ```\n *\n * @example OR semantics within a field\n * ```typescript\n * // Include spans with name starting with 'chat.' OR 'llm.'\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * {\n * include: {\n * name: [\n * { startsWith: 'chat.' },\n * { startsWith: 'llm.' }\n * ]\n * }\n * }\n * ],\n * });\n * ```\n *\n * @example Using regex patterns\n * ```typescript\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * {\n * include: {\n * name: [{ matches: /^(chat|llm)\\./i }]\n * }\n * }\n * ],\n * });\n * ```\n */\nexport class LangWatchTraceExporter extends OTLPTraceExporter {\n private readonly filters: TraceFilter[];\n /**\n * Creates a new LangWatchTraceExporter instance.\n *\n * @param opts - Configuration options for the exporter\n * @param opts.apiKey - API key for LangWatch authentication.\n * Falls back to `LANGWATCH_API_KEY` environment variable, then empty string.\n * @param opts.endpoint - Custom endpoint URL for LangWatch ingestion.\n * Falls back to `LANGWATCH_ENDPOINT` environment variable, then default endpoint.\n * @param opts.filters - Array of filters applied sequentially to spans before export (AND semantics).\n * When omitted, defaults to `[{ preset: \"excludeHttpRequests\" }]`.\n * Pass `null` or `[]` to disable all filtering and send all spans.\n *\n * @example\n * ```typescript\n * // With API key and default filtering\n * const exporter = new LangWatchTraceExporter({\n * apiKey: 'your-api-key'\n * });\n *\n * // With custom endpoint and no filtering\n * const exporter = new LangWatchTraceExporter({\n * endpoint: 'https://custom.langwatch.ai',\n * filters: null\n * });\n * ```\n */\n constructor(opts?: LangWatchTraceExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n DEFAULT_ENDPOINT;\n\n const url = new URL(TRACES_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n\n // Handle filters: null or [] = no filtering, undefined = default, array = use provided\n if (opts?.filters === null || (Array.isArray(opts?.filters) && opts.filters.length === 0)) {\n this.filters = [];\n } else if (Array.isArray(opts?.filters)) {\n this.filters = opts.filters;\n } else {\n this.filters = [{ preset: \"excludeHttpRequests\" }];\n }\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n const filtered = applyFilters(this.filters, spans);\n super.export(filtered, resultCallback);\n }\n}\n","import { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\n\nexport interface Criteria {\n instrumentationScopeName?: Match[];\n name?: Match[];\n}\n\nexport interface Match {\n equals?: string;\n startsWith?: string;\n matches?: RegExp;\n ignoreCase?: boolean;\n}\n\nexport type TraceFilter =\n | { preset: \"vercelAIOnly\" | \"excludeHttpRequests\" }\n | { include: Criteria }\n | { exclude: Criteria };\n\n/**\n * Applies a sequence of filters to an array of spans using AND semantics.\n * Each filter in the sequence is applied to the result of the previous filter,\n * progressively narrowing down the set of spans.\n *\n * @param filters - Array of filter rules to apply sequentially\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans that match all filter criteria\n *\n * @example\n * ```typescript\n * const filters: TraceFilter[] = [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } },\n * { preset: 'excludeHttpRequests' }\n * ];\n * const filtered = applyFilters(filters, spans);\n * // Returns only AI spans that are not HTTP requests\n * ```\n */\nexport function applyFilters(\n filters: TraceFilter[] | undefined,\n spans: ReadableSpan[]\n): ReadableSpan[] {\n if (!filters || filters.length === 0) return spans;\n return filters.reduce((current, rule) => applyFilterRule(rule, current), spans);\n}\n\n/**\n * Applies a single filter rule to an array of spans.\n * Handles three types of filters: presets, include rules, and exclude rules.\n *\n * @param rule - Single filter rule (preset, include, or exclude)\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans based on the rule\n *\n * @example\n * ```typescript\n * // Using preset\n * const filtered1 = applyFilterRule({ preset: 'vercelAIOnly' }, spans);\n *\n * // Using include\n * const filtered2 = applyFilterRule(\n * { include: { name: [{ startsWith: 'llm.' }] } },\n * spans\n * );\n *\n * // Using exclude\n * const filtered3 = applyFilterRule(\n * { exclude: { instrumentationScopeName: [{ equals: 'http' }] } },\n * spans\n * );\n * ```\n */\nexport function applyFilterRule(rule: TraceFilter, spans: ReadableSpan[]): ReadableSpan[] {\n if (\"preset\" in rule && rule.preset) {\n return applyPreset(\n (rule as { preset: TraceFilter extends { preset: infer P } ? P : never }).preset as any,\n spans\n );\n }\n\n if (\"include\" in rule && rule.include) {\n const criteria = (rule as { include: Criteria }).include;\n return spans.filter((s) => matchesCriteria(s, criteria));\n }\n\n if (\"exclude\" in rule && rule.exclude) {\n const criteria = (rule as { exclude: Criteria }).exclude;\n return spans.filter((s) => !matchesCriteria(s, criteria));\n }\n\n return spans;\n}\n\n/**\n * Applies a preset filter to an array of spans.\n * Presets are predefined common filtering patterns.\n *\n * Available presets:\n * - `vercelAIOnly`: Keeps only spans from the Vercel AI SDK (instrumentationScope.name === 'ai')\n * - `excludeHttpRequests`: Removes spans that appear to be HTTP requests (span name starts with HTTP verb)\n *\n * @param preset - Name of the preset filter to apply\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans based on the preset\n *\n * @example\n * ```typescript\n * // Keep only Vercel AI spans\n * const aiSpans = applyPreset('vercelAIOnly', spans);\n *\n * // Remove HTTP request spans\n * const noHttpSpans = applyPreset('excludeHttpRequests', spans);\n * ```\n */\nexport function applyPreset(\n preset: \"vercelAIOnly\" | \"excludeHttpRequests\",\n spans: ReadableSpan[]\n): ReadableSpan[] {\n if (preset === \"vercelAIOnly\") return spans.filter((s) => isVercelAiSpan(s));\n if (preset === \"excludeHttpRequests\") return spans.filter((s) => !isHttpRequestSpan(s));\n\n return spans;\n}\n\n/**\n * Checks if a span matches the given criteria.\n * All specified criteria fields must match (AND semantics within a criteria object).\n * Within each field, matchers are evaluated with OR semantics (any matcher can match).\n *\n * @param span - Span to evaluate\n * @param criteria - Criteria to match against (instrumentationScopeName and/or name)\n * @returns True if the span matches all specified criteria, false otherwise\n *\n * @example\n * ```typescript\n * const criteria: Criteria = {\n * instrumentationScopeName: [{ equals: 'ai' }],\n * name: [{ startsWith: 'llm.' }, { startsWith: 'chat.' }]\n * };\n * const matches = matchesCriteria(span, criteria);\n * // Returns true if scope is 'ai' AND name starts with 'llm.' OR 'chat.'\n * ```\n */\nexport function matchesCriteria(span: ReadableSpan, criteria: Criteria): boolean {\n if (criteria.instrumentationScopeName !== void 0) {\n const scopeName = span.instrumentationScope?.name ?? \"\";\n const ok = criteria.instrumentationScopeName.some((m) => valueMatches(scopeName, m));\n if (!ok) return false;\n }\n\n if (criteria.name !== void 0) {\n const ok = criteria.name.some((m) => valueMatches(span.name ?? \"\", m));\n if (!ok) return false;\n }\n\n return true;\n}\n\n/**\n * Evaluates if a string value matches a given match rule.\n * Supports three types of matching: exact equality, prefix matching, and regex matching.\n * All matching is case-sensitive by default unless `ignoreCase` is explicitly set to true.\n *\n * @param value - String value to evaluate\n * @param rule - Match rule specifying the matching criteria\n * @returns True if the value matches the rule, false otherwise\n *\n * @example\n * ```typescript\n * // Exact match (case-sensitive by default)\n * valueMatches('GET /api/users', { equals: 'GET /api/users' }); // true\n * valueMatches('get /api/users', { equals: 'GET /api/users' }); // false\n *\n * // Case-insensitive exact match\n * valueMatches('get /api/users', { equals: 'GET /api/users', ignoreCase: true }); // true\n *\n * // Prefix match\n * valueMatches('GET /api/users', { startsWith: 'GET' }); // true\n * valueMatches('POST /api/users', { startsWith: 'GET' }); // false\n *\n * // Regex match\n * valueMatches('GET /api/users', { matches: /^(GET|POST)\\b/ }); // true\n *\n * // Case-insensitive regex\n * valueMatches('get /api/users', { matches: /^GET\\b/, ignoreCase: true }); // true\n * ```\n */\nexport function valueMatches(value: string, rule: Match): boolean {\n const raw = value ?? \"\";\n const ignoreCase = rule.ignoreCase ?? false;\n\n if (rule.equals !== void 0) {\n return ignoreCase\n ? raw.localeCompare(rule.equals, void 0, { sensitivity: \"base\" }) === 0\n : raw === rule.equals;\n }\n\n if (rule.startsWith !== void 0) {\n return ignoreCase\n ? raw.toLowerCase().startsWith(rule.startsWith.toLowerCase())\n : raw.startsWith(rule.startsWith);\n }\n\n if (rule.matches instanceof RegExp) {\n const re =\n ignoreCase && !rule.matches.flags.includes(\"i\")\n ? new RegExp(rule.matches.source, (rule.matches.flags || \"\") + \"i\")\n : rule.matches;\n return re.test(raw);\n }\n\n return false;\n}\n\n/**\n * Checks if a span is from the Vercel AI SDK.\n * A span is considered a Vercel AI span if its instrumentation scope name is 'ai' (case-insensitive).\n *\n * @param span - Span to check\n * @returns True if the span is from the Vercel AI SDK, false otherwise\n *\n * @example\n * ```typescript\n * if (isVercelAiSpan(span)) {\n * console.log('This is a Vercel AI operation');\n * }\n * ```\n */\nexport function isVercelAiSpan(span: ReadableSpan): boolean {\n const scope = span.instrumentationScope?.name?.toLowerCase?.() ?? \"\";\n return scope === \"ai\";\n}\n\n/**\n * Checks if a span appears to be an HTTP request based on its name.\n * A span is considered an HTTP request if its name starts with a common HTTP verb\n * (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD) followed by a word boundary.\n *\n * @param span - Span to check\n * @returns True if the span appears to be an HTTP request, false otherwise\n *\n * @example\n * ```typescript\n * // These would return true:\n * // span.name = \"GET /api/users\"\n * // span.name = \"POST /api/data\"\n * // span.name = \"DELETE /resource/123\"\n *\n * if (isHttpRequestSpan(span)) {\n * console.log('This is an HTTP request span');\n * }\n * ```\n */\nexport function isHttpRequestSpan(span: ReadableSpan): boolean {\n const name = span.name ?? \"\";\n const verbMatch = /^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\b/i.test(name);\n return verbMatch;\n}\n","import { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n LOGS_PATH,\n} from \"../../internal/constants\";\n\nexport interface LangWatchLogsExporterOptions {\n endpoint?: string;\n apiKey?: string;\n}\n\n/**\n * LangWatchLogsExporter extends the OpenTelemetry OTLP HTTP logs exporter\n * to send logs to LangWatch with proper authentication and metadata headers.\n *\n * This exporter automatically configures:\n * - Authorization headers using the provided API key or environment variables/fallback\n * - SDK version and language identification headers\n * - Proper endpoint configuration for LangWatch ingestion using provided URL or environment variables/fallback\n *\n * @example\n * ```typescript\n * import { LangWatchLogsExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchLogsExporter();\n *\n * // Using custom options\n * const exporter = new LangWatchLogsExporter({\n * apiKey: 'your-api-key',\n * endpoint: 'https://custom.langwatch.com'\n * });\n * ```\n */\nexport class LangWatchLogsExporter extends OTLPLogExporter {\n /**\n * Creates a new LangWatchLogsExporter instance.\n *\n * @param opts - Optional configuration options for the exporter.\n * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n */\n constructor(opts?: LangWatchLogsExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n DEFAULT_ENDPOINT;\n\n const url = new URL(LOGS_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n }\n}\n","/*\n This file contains the values for the OpenTelemetry semantic conventions for GenAI log\n record event names.\n\n 👉 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/\n*/\n\n/**\n * GenAI system message event name\n * Used for log records representing system messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_SYSTEM_MESSAGE = \"gen.ai.system_message\";\n\n/**\n * GenAI user message event name\n * Used for log records representing user messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_USER_MESSAGE = \"gen.ai.user_message\";\n\n/**\n * GenAI assistant message event name\n * Used for log records representing assistant responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE = \"gen.ai.assistant_message\";\n\n/**\n * GenAI tool message event name\n * Used for log records representing tool calls or responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_TOOL_MESSAGE = \"gen.ai.tool_message\";\n\n/**\n * GenAI choice event name\n * Used for log records representing choices made by AI models\n */\nexport const LOG_EVNT_GEN_AI_CHOICE = \"gen.ai.choice\";\n\n/**\n * LangWatch LangChain callback event name\n * Used for log records representing LangChain callback events\n */\nexport const EVNT_LANGWATCH_LANGCHAIN_CALLBACK = \"langwatch.langchain.callback\";\n","import {\n type Logger,\n type LoggerProvider,\n NoopLoggerProvider,\n} from \"@opentelemetry/api-logs\";\nimport {\n type LangWatchLogger,\n} from \"./types\";\nimport { LangWatchLoggerInternal } from \"./implementation\";\n\n/**\n * The LangWatch-specific global logger provider. It may not be the same as the current\n * OpenTelemetry global logger provider, but it's the last one the `setupObservability`\n * knows about.\n * @internal\n */\nlet currentLoggerProvider: LoggerProvider = new NoopLoggerProvider();\n\n/**\n * @module observability/logger\n * @description\n * Provides LangWatch logger integration with OpenTelemetry, including logger provider\n * management and logger creation utilities.\n *\n * @remarks\n * This module allows you to set a global logger provider, retrieve LangWatch loggers,\n * and wrap OpenTelemetry loggers with LangWatch-specific functionality.\n *\n * @see {@link setLangWatchLoggerProvider}\n * @see {@link getLangWatchLogger}\n * @see {@link getLangWatchLoggerFromProvider}\n * @see {@link createLangWatchLogger}\n */\nexport function setLangWatchLoggerProvider(\n loggerProvider: LoggerProvider,\n): void {\n currentLoggerProvider = loggerProvider;\n}\n\n/**\n * Retrieves a LangWatch logger with the specified name and optional version.\n *\n * @param name - The name of the logger (typically your service or module name).\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Uses the logger provider set during observability setup. If no provider is set, returns\n * a NoOp logger.\n *\n * @example\n * ```ts\n * const logger = getLangWatchLogger(\"my-service\");\n * logger.info(\"Service started\");\n * ```\n *\n * @see {@link setLangWatchLoggerProvider}\n */\nexport function getLangWatchLogger(\n name: string,\n version?: string,\n): LangWatchLogger {\n return getLangWatchLoggerFromProvider(currentLoggerProvider, name, version);\n}\n\n/**\n * Retrieves a LangWatch logger from a specific OpenTelemetry logger provider.\n *\n * @param loggerProvider - The OpenTelemetry logger provider to use.\n * @param name - The name of the logger.\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Use this function if you want to use a custom logger provider instead of the global one.\n *\n * @example\n * ```ts\n * const customProvider = new LoggerProvider();\n * const logger = getLangWatchLoggerFromProvider(customProvider, \"custom-service\");\n * ```\n */\nexport function getLangWatchLoggerFromProvider(\n loggerProvider: LoggerProvider,\n name: string,\n version?: string,\n): LangWatchLogger {\n return createLangWatchLogger(loggerProvider.getLogger(name, version));\n}\n\n/**\n * Wraps an OpenTelemetry logger as a LangWatch logger.\n *\n * @param logger - The OpenTelemetry logger to wrap.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @example\n * ```ts\n * import { Logger } from \"@opentelemetry/api-logs\";\n * const otelLogger = new Logger();\n * const lwLogger = createLangWatchLogger(otelLogger);\n * lwLogger.info(\"Wrapped logger\");\n * ```\n */\nexport function createLangWatchLogger(logger: Logger): LangWatchLogger {\n return new LangWatchLoggerInternal(logger);\n}\n\n// Export types and implementation\nexport * from \"./types\";\nexport * from \"./implementation\";\n","import {\n type AnyValue,\n type Logger,\n} from \"@opentelemetry/api-logs\";\nimport {\n type EmitOptions,\n type LangWatchLogger,\n type LangWatchLogRecord,\n type LangWatchSpanGenAIAssistantMessageEventBody,\n type LangWatchSpanGenAIChoiceEventBody,\n type LangWatchSpanGenAISystemMessageEventBody,\n type LangWatchSpanGenAIToolMessageEventBody,\n type LangWatchSpanGenAIUserMessageEventBody,\n} from \"./types\";\nimport { shouldCaptureOutput } from \"../config\";\nimport * as intSemconv from \"../semconv\";\nimport { type SemConvLogRecordAttributes } from \"../semconv\";\nimport { context } from \"@opentelemetry/api\";\n\n/**\n * Internal implementation of {@link LangWatchLogger}.\n *\n * @remarks\n * This class wraps an OpenTelemetry logger and adds LangWatch-specific functionality for\n * structured logging and event emission.\n * Not intended for direct use; use {@link getLangWatchLogger} or\n * {@link createLangWatchLogger} instead.\n */\nexport class LangWatchLoggerInternal implements LangWatchLogger {\n constructor(private logger: Logger) {}\n\n emit(logRecord: LangWatchLogRecord, options?: EmitOptions): void {\n // Handle output capture configuration\n if (!shouldCaptureOutput()) {\n logRecord.body = void 0;\n }\n\n // Set context if not provided and not explicitly excluded\n if (!logRecord.context && !options?.excludeContext) {\n logRecord.context = context.active();\n }\n\n // Emit the log record through the underlying OpenTelemetry logger\n this.logger.emit(logRecord);\n }\n\n emitGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,\n { ...body, role: body.role ?? \"system\" } satisfies LangWatchSpanGenAISystemMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_USER_MESSAGE,\n { ...body, role: body.role ?? \"user\" } satisfies LangWatchSpanGenAIUserMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,\n { ...body, role: body.role ?? \"assistant\" } satisfies LangWatchSpanGenAIAssistantMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.role === void 0) {\n body.role = \"tool\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_TOOL_MESSAGE,\n { ...body },\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.message && body.message.role === void 0) {\n body.message.role = \"assistant\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_CHOICE,\n {\n ...body,\n message: { ...body.message, role: body.message?.role ?? \"assistant\" },\n } satisfies LangWatchSpanGenAIChoiceEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n private emitGenAIEvent(\n eventName: string,\n body: AnyValue,\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emit({\n eventName,\n context: context.active(),\n attributes: { ...attributes },\n body: shouldCaptureOutput() ? body : void 0,\n observedTimestamp: new Date().getTime(),\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-DUG35J5N.js","../src/observability-sdk/exporters/langwatch-trace-exporter.ts","../src/observability-sdk/exporters/trace-filters.ts","../src/observability-sdk/exporters/langwatch-logs-exporter.ts","../src/observability-sdk/semconv/events.ts","../src/observability-sdk/logger/index.ts","../src/observability-sdk/logger/implementation.ts"],"names":["_a"],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-DUG35J5N.js","sourcesContent":[null,"import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { type ExportResult } from '@opentelemetry/core';\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n TRACES_PATH,\n} from \"../../internal/constants\";\nimport {\n type TraceFilter,\n type Criteria,\n type Match,\n applyFilters,\n} from \"./trace-filters\";\n\n/**\n * Configuration options for the LangWatchTraceExporter.\n *\n * @property endpoint - Custom LangWatch endpoint URL. Falls back to LANGWATCH_ENDPOINT env var or default.\n * @property apiKey - API key for authentication. Falls back to LANGWATCH_API_KEY env var.\n * @property filters - Array of filters applied sequentially to spans before export.\n * Default: `[{ preset: \"excludeHttpRequests\" }]` to reduce framework noise.\n * Pass `null` or `[]` to disable all filtering.\n */\nexport interface LangWatchTraceExporterOptions {\n endpoint?: string;\n apiKey?: string;\n filters?: TraceFilter[] | null;\n}\n\nexport type { TraceFilter, Criteria, Match };\n\n/**\n * LangWatchTraceExporter extends the OpenTelemetry OTLP HTTP trace exporter\n * to send trace data to LangWatch with proper authentication and metadata headers.\n *\n * ## Features\n * - Automatic authorization header configuration via API key\n * - SDK version and runtime identification headers\n * - Proper endpoint URL construction for LangWatch ingestion\n * - Intent-based span filtering with presets and custom criteria\n *\n * ## Filtering Behavior\n * - **Default**: HTTP request spans are excluded to reduce framework noise\n * - **Pipeline**: Filters are applied sequentially with AND semantics\n * - **Matching**: All string comparisons are case-sensitive by default\n * - **Array Syntax**: All criteria require arrays of Match objects for explicit filtering\n *\n * ## Filter Types\n * - **Presets**: Pre-configured common filters (`vercelAIOnly`, `excludeHttpRequests`)\n * - **Include**: Keep only spans matching criteria (OR within field, AND across fields)\n * - **Exclude**: Remove spans matching criteria (OR within field, AND across fields)\n *\n * @example Basic usage with default filtering\n * ```typescript\n * import { LangWatchTraceExporter } from '@langwatch/observability';\n *\n * // Default: excludes HTTP request spans\n * const exporter = new LangWatchTraceExporter();\n * ```\n *\n * @example Using presets\n * ```typescript\n * // Keep only Vercel AI SDK spans\n * const exporterAI = new LangWatchTraceExporter({\n * filters: [{ preset: 'vercelAIOnly' }],\n * });\n *\n * // Explicitly exclude HTTP requests (same as default)\n * const exporterNoHttp = new LangWatchTraceExporter({\n * filters: [{ preset: 'excludeHttpRequests' }],\n * });\n *\n * // No filtering at all (send all spans)\n * const exporterAll = new LangWatchTraceExporter({\n * filters: null, // or filters: []\n * });\n * ```\n *\n * @example Custom filtering with criteria\n * ```typescript\n * // Include only spans with specific scope\n * const exporter1 = new LangWatchTraceExporter({\n * filters: [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } }\n * ],\n * });\n *\n * // Exclude spans by name pattern\n * const exporter2 = new LangWatchTraceExporter({\n * filters: [\n * { exclude: { name: [{ startsWith: 'internal.' }] } }\n * ],\n * });\n *\n * // Case-insensitive matching\n * const exporter3 = new LangWatchTraceExporter({\n * filters: [\n * { include: { name: [{ equals: 'chat.completion', ignoreCase: true }] } }\n * ],\n * });\n * ```\n *\n * @example Filter pipelines (AND semantics)\n * ```typescript\n * // Keep AI spans, then remove HTTP requests\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } },\n * { preset: 'excludeHttpRequests' },\n * ],\n * });\n * ```\n *\n * @example OR semantics within a field\n * ```typescript\n * // Include spans with name starting with 'chat.' OR 'llm.'\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * {\n * include: {\n * name: [\n * { startsWith: 'chat.' },\n * { startsWith: 'llm.' }\n * ]\n * }\n * }\n * ],\n * });\n * ```\n *\n * @example Using regex patterns\n * ```typescript\n * const exporter = new LangWatchTraceExporter({\n * filters: [\n * {\n * include: {\n * name: [{ matches: /^(chat|llm)\\./i }]\n * }\n * }\n * ],\n * });\n * ```\n */\nexport class LangWatchTraceExporter extends OTLPTraceExporter {\n private readonly filters: TraceFilter[];\n /**\n * Creates a new LangWatchTraceExporter instance.\n *\n * @param opts - Configuration options for the exporter\n * @param opts.apiKey - API key for LangWatch authentication.\n * Falls back to `LANGWATCH_API_KEY` environment variable, then empty string.\n * @param opts.endpoint - Custom endpoint URL for LangWatch ingestion.\n * Falls back to `LANGWATCH_ENDPOINT` environment variable, then default endpoint.\n * @param opts.filters - Array of filters applied sequentially to spans before export (AND semantics).\n * When omitted, defaults to `[{ preset: \"excludeHttpRequests\" }]`.\n * Pass `null` or `[]` to disable all filtering and send all spans.\n *\n * @example\n * ```typescript\n * // With API key and default filtering\n * const exporter = new LangWatchTraceExporter({\n * apiKey: 'your-api-key'\n * });\n *\n * // With custom endpoint and no filtering\n * const exporter = new LangWatchTraceExporter({\n * endpoint: 'https://custom.langwatch.ai',\n * filters: null\n * });\n * ```\n */\n constructor(opts?: LangWatchTraceExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n DEFAULT_ENDPOINT;\n\n const url = new URL(TRACES_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n\n // Handle filters: null or [] = no filtering, undefined = default, array = use provided\n if (opts?.filters === null || (Array.isArray(opts?.filters) && opts.filters.length === 0)) {\n this.filters = [];\n } else if (Array.isArray(opts?.filters)) {\n this.filters = opts.filters;\n } else {\n this.filters = [{ preset: \"excludeHttpRequests\" }];\n }\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n const filtered = applyFilters(this.filters, spans);\n super.export(filtered, resultCallback);\n }\n}\n","import { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\n\nexport interface Criteria {\n instrumentationScopeName?: Match[];\n name?: Match[];\n}\n\nexport interface Match {\n equals?: string;\n startsWith?: string;\n matches?: RegExp;\n ignoreCase?: boolean;\n}\n\nexport type TraceFilter =\n | { preset: \"vercelAIOnly\" | \"excludeHttpRequests\" }\n | { include: Criteria }\n | { exclude: Criteria };\n\n/**\n * Applies a sequence of filters to an array of spans using AND semantics.\n * Each filter in the sequence is applied to the result of the previous filter,\n * progressively narrowing down the set of spans.\n *\n * @param filters - Array of filter rules to apply sequentially\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans that match all filter criteria\n *\n * @example\n * ```typescript\n * const filters: TraceFilter[] = [\n * { include: { instrumentationScopeName: [{ equals: 'ai' }] } },\n * { preset: 'excludeHttpRequests' }\n * ];\n * const filtered = applyFilters(filters, spans);\n * // Returns only AI spans that are not HTTP requests\n * ```\n */\nexport function applyFilters(\n filters: TraceFilter[] | undefined,\n spans: ReadableSpan[]\n): ReadableSpan[] {\n if (!filters || filters.length === 0) return spans;\n return filters.reduce((current, rule) => applyFilterRule(rule, current), spans);\n}\n\n/**\n * Applies a single filter rule to an array of spans.\n * Handles three types of filters: presets, include rules, and exclude rules.\n *\n * @param rule - Single filter rule (preset, include, or exclude)\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans based on the rule\n *\n * @example\n * ```typescript\n * // Using preset\n * const filtered1 = applyFilterRule({ preset: 'vercelAIOnly' }, spans);\n *\n * // Using include\n * const filtered2 = applyFilterRule(\n * { include: { name: [{ startsWith: 'llm.' }] } },\n * spans\n * );\n *\n * // Using exclude\n * const filtered3 = applyFilterRule(\n * { exclude: { instrumentationScopeName: [{ equals: 'http' }] } },\n * spans\n * );\n * ```\n */\nexport function applyFilterRule(rule: TraceFilter, spans: ReadableSpan[]): ReadableSpan[] {\n if (\"preset\" in rule && rule.preset) {\n return applyPreset(\n (rule as { preset: TraceFilter extends { preset: infer P } ? P : never }).preset as any,\n spans\n );\n }\n\n if (\"include\" in rule && rule.include) {\n const criteria = (rule as { include: Criteria }).include;\n return spans.filter((s) => matchesCriteria(s, criteria));\n }\n\n if (\"exclude\" in rule && rule.exclude) {\n const criteria = (rule as { exclude: Criteria }).exclude;\n return spans.filter((s) => !matchesCriteria(s, criteria));\n }\n\n return spans;\n}\n\n/**\n * Applies a preset filter to an array of spans.\n * Presets are predefined common filtering patterns.\n *\n * Available presets:\n * - `vercelAIOnly`: Keeps only spans from the Vercel AI SDK (instrumentationScope.name === 'ai')\n * - `excludeHttpRequests`: Removes spans that appear to be HTTP requests (span name starts with HTTP verb)\n *\n * @param preset - Name of the preset filter to apply\n * @param spans - Array of spans to filter\n * @returns Filtered array of spans based on the preset\n *\n * @example\n * ```typescript\n * // Keep only Vercel AI spans\n * const aiSpans = applyPreset('vercelAIOnly', spans);\n *\n * // Remove HTTP request spans\n * const noHttpSpans = applyPreset('excludeHttpRequests', spans);\n * ```\n */\nexport function applyPreset(\n preset: \"vercelAIOnly\" | \"excludeHttpRequests\",\n spans: ReadableSpan[]\n): ReadableSpan[] {\n if (preset === \"vercelAIOnly\") return spans.filter((s) => isVercelAiSpan(s));\n if (preset === \"excludeHttpRequests\") return spans.filter((s) => !isHttpRequestSpan(s));\n\n return spans;\n}\n\n/**\n * Checks if a span matches the given criteria.\n * All specified criteria fields must match (AND semantics within a criteria object).\n * Within each field, matchers are evaluated with OR semantics (any matcher can match).\n *\n * @param span - Span to evaluate\n * @param criteria - Criteria to match against (instrumentationScopeName and/or name)\n * @returns True if the span matches all specified criteria, false otherwise\n *\n * @example\n * ```typescript\n * const criteria: Criteria = {\n * instrumentationScopeName: [{ equals: 'ai' }],\n * name: [{ startsWith: 'llm.' }, { startsWith: 'chat.' }]\n * };\n * const matches = matchesCriteria(span, criteria);\n * // Returns true if scope is 'ai' AND name starts with 'llm.' OR 'chat.'\n * ```\n */\nexport function matchesCriteria(span: ReadableSpan, criteria: Criteria): boolean {\n if (criteria.instrumentationScopeName !== void 0) {\n const scopeName = span.instrumentationScope?.name ?? \"\";\n const ok = criteria.instrumentationScopeName.some((m) => valueMatches(scopeName, m));\n if (!ok) return false;\n }\n\n if (criteria.name !== void 0) {\n const ok = criteria.name.some((m) => valueMatches(span.name ?? \"\", m));\n if (!ok) return false;\n }\n\n return true;\n}\n\n/**\n * Evaluates if a string value matches a given match rule.\n * Supports three types of matching: exact equality, prefix matching, and regex matching.\n * All matching is case-sensitive by default unless `ignoreCase` is explicitly set to true.\n *\n * @param value - String value to evaluate\n * @param rule - Match rule specifying the matching criteria\n * @returns True if the value matches the rule, false otherwise\n *\n * @example\n * ```typescript\n * // Exact match (case-sensitive by default)\n * valueMatches('GET /api/users', { equals: 'GET /api/users' }); // true\n * valueMatches('get /api/users', { equals: 'GET /api/users' }); // false\n *\n * // Case-insensitive exact match\n * valueMatches('get /api/users', { equals: 'GET /api/users', ignoreCase: true }); // true\n *\n * // Prefix match\n * valueMatches('GET /api/users', { startsWith: 'GET' }); // true\n * valueMatches('POST /api/users', { startsWith: 'GET' }); // false\n *\n * // Regex match\n * valueMatches('GET /api/users', { matches: /^(GET|POST)\\b/ }); // true\n *\n * // Case-insensitive regex\n * valueMatches('get /api/users', { matches: /^GET\\b/, ignoreCase: true }); // true\n * ```\n */\nexport function valueMatches(value: string, rule: Match): boolean {\n const raw = value ?? \"\";\n const ignoreCase = rule.ignoreCase ?? false;\n\n if (rule.equals !== void 0) {\n return ignoreCase\n ? raw.localeCompare(rule.equals, void 0, { sensitivity: \"base\" }) === 0\n : raw === rule.equals;\n }\n\n if (rule.startsWith !== void 0) {\n return ignoreCase\n ? raw.toLowerCase().startsWith(rule.startsWith.toLowerCase())\n : raw.startsWith(rule.startsWith);\n }\n\n if (rule.matches instanceof RegExp) {\n const re =\n ignoreCase && !rule.matches.flags.includes(\"i\")\n ? new RegExp(rule.matches.source, (rule.matches.flags || \"\") + \"i\")\n : rule.matches;\n return re.test(raw);\n }\n\n return false;\n}\n\n/**\n * Checks if a span is from the Vercel AI SDK.\n * A span is considered a Vercel AI span if its instrumentation scope name is 'ai' (case-insensitive).\n *\n * @param span - Span to check\n * @returns True if the span is from the Vercel AI SDK, false otherwise\n *\n * @example\n * ```typescript\n * if (isVercelAiSpan(span)) {\n * console.log('This is a Vercel AI operation');\n * }\n * ```\n */\nexport function isVercelAiSpan(span: ReadableSpan): boolean {\n const scope = span.instrumentationScope?.name?.toLowerCase?.() ?? \"\";\n return scope === \"ai\";\n}\n\n/**\n * Checks if a span appears to be an HTTP request based on its name.\n * A span is considered an HTTP request if its name starts with a common HTTP verb\n * (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD) followed by a word boundary.\n *\n * @param span - Span to check\n * @returns True if the span appears to be an HTTP request, false otherwise\n *\n * @example\n * ```typescript\n * // These would return true:\n * // span.name = \"GET /api/users\"\n * // span.name = \"POST /api/data\"\n * // span.name = \"DELETE /resource/123\"\n *\n * if (isHttpRequestSpan(span)) {\n * console.log('This is an HTTP request span');\n * }\n * ```\n */\nexport function isHttpRequestSpan(span: ReadableSpan): boolean {\n const name = span.name ?? \"\";\n const verbMatch = /^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\b/i.test(name);\n return verbMatch;\n}\n","import { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n LOGS_PATH,\n} from \"../../internal/constants\";\n\nexport interface LangWatchLogsExporterOptions {\n endpoint?: string;\n apiKey?: string;\n}\n\n/**\n * LangWatchLogsExporter extends the OpenTelemetry OTLP HTTP logs exporter\n * to send logs to LangWatch with proper authentication and metadata headers.\n *\n * This exporter automatically configures:\n * - Authorization headers using the provided API key or environment variables/fallback\n * - SDK version and language identification headers\n * - Proper endpoint configuration for LangWatch ingestion using provided URL or environment variables/fallback\n *\n * @example\n * ```typescript\n * import { LangWatchLogsExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchLogsExporter();\n *\n * // Using custom options\n * const exporter = new LangWatchLogsExporter({\n * apiKey: 'your-api-key',\n * endpoint: 'https://custom.langwatch.com'\n * });\n * ```\n */\nexport class LangWatchLogsExporter extends OTLPLogExporter {\n /**\n * Creates a new LangWatchLogsExporter instance.\n *\n * @param opts - Optional configuration options for the exporter.\n * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n */\n constructor(opts?: LangWatchLogsExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n DEFAULT_ENDPOINT;\n\n const url = new URL(LOGS_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n }\n}\n","/*\n This file contains the values for the OpenTelemetry semantic conventions for GenAI log\n record event names.\n\n 👉 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/\n*/\n\n/**\n * GenAI system message event name\n * Used for log records representing system messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_SYSTEM_MESSAGE = \"gen.ai.system_message\";\n\n/**\n * GenAI user message event name\n * Used for log records representing user messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_USER_MESSAGE = \"gen.ai.user_message\";\n\n/**\n * GenAI assistant message event name\n * Used for log records representing assistant responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE = \"gen.ai.assistant_message\";\n\n/**\n * GenAI tool message event name\n * Used for log records representing tool calls or responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_TOOL_MESSAGE = \"gen.ai.tool_message\";\n\n/**\n * GenAI choice event name\n * Used for log records representing choices made by AI models\n */\nexport const LOG_EVNT_GEN_AI_CHOICE = \"gen.ai.choice\";\n\n/**\n * LangWatch LangChain callback event name\n * Used for log records representing LangChain callback events\n */\nexport const EVNT_LANGWATCH_LANGCHAIN_CALLBACK = \"langwatch.langchain.callback\";\n","import {\n type Logger,\n type LoggerProvider,\n NoopLoggerProvider,\n} from \"@opentelemetry/api-logs\";\nimport {\n type LangWatchLogger,\n} from \"./types\";\nimport { LangWatchLoggerInternal } from \"./implementation\";\n\n/**\n * The LangWatch-specific global logger provider. It may not be the same as the current\n * OpenTelemetry global logger provider, but it's the last one the `setupObservability`\n * knows about.\n * @internal\n */\nlet currentLoggerProvider: LoggerProvider = new NoopLoggerProvider();\n\n/**\n * @module observability/logger\n * @description\n * Provides LangWatch logger integration with OpenTelemetry, including logger provider\n * management and logger creation utilities.\n *\n * @remarks\n * This module allows you to set a global logger provider, retrieve LangWatch loggers,\n * and wrap OpenTelemetry loggers with LangWatch-specific functionality.\n *\n * @see {@link setLangWatchLoggerProvider}\n * @see {@link getLangWatchLogger}\n * @see {@link getLangWatchLoggerFromProvider}\n * @see {@link createLangWatchLogger}\n */\nexport function setLangWatchLoggerProvider(\n loggerProvider: LoggerProvider,\n): void {\n currentLoggerProvider = loggerProvider;\n}\n\n/**\n * Retrieves a LangWatch logger with the specified name and optional version.\n *\n * @param name - The name of the logger (typically your service or module name).\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Uses the logger provider set during observability setup. If no provider is set, returns\n * a NoOp logger.\n *\n * @example\n * ```ts\n * const logger = getLangWatchLogger(\"my-service\");\n * logger.info(\"Service started\");\n * ```\n *\n * @see {@link setLangWatchLoggerProvider}\n */\nexport function getLangWatchLogger(\n name: string,\n version?: string,\n): LangWatchLogger {\n return getLangWatchLoggerFromProvider(currentLoggerProvider, name, version);\n}\n\n/**\n * Retrieves a LangWatch logger from a specific OpenTelemetry logger provider.\n *\n * @param loggerProvider - The OpenTelemetry logger provider to use.\n * @param name - The name of the logger.\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Use this function if you want to use a custom logger provider instead of the global one.\n *\n * @example\n * ```ts\n * const customProvider = new LoggerProvider();\n * const logger = getLangWatchLoggerFromProvider(customProvider, \"custom-service\");\n * ```\n */\nexport function getLangWatchLoggerFromProvider(\n loggerProvider: LoggerProvider,\n name: string,\n version?: string,\n): LangWatchLogger {\n return createLangWatchLogger(loggerProvider.getLogger(name, version));\n}\n\n/**\n * Wraps an OpenTelemetry logger as a LangWatch logger.\n *\n * @param logger - The OpenTelemetry logger to wrap.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @example\n * ```ts\n * import { Logger } from \"@opentelemetry/api-logs\";\n * const otelLogger = new Logger();\n * const lwLogger = createLangWatchLogger(otelLogger);\n * lwLogger.info(\"Wrapped logger\");\n * ```\n */\nexport function createLangWatchLogger(logger: Logger): LangWatchLogger {\n return new LangWatchLoggerInternal(logger);\n}\n\n// Export types and implementation\nexport * from \"./types\";\nexport * from \"./implementation\";\n","import {\n type AnyValue,\n type Logger,\n} from \"@opentelemetry/api-logs\";\nimport {\n type EmitOptions,\n type LangWatchLogger,\n type LangWatchLogRecord,\n type LangWatchSpanGenAIAssistantMessageEventBody,\n type LangWatchSpanGenAIChoiceEventBody,\n type LangWatchSpanGenAISystemMessageEventBody,\n type LangWatchSpanGenAIToolMessageEventBody,\n type LangWatchSpanGenAIUserMessageEventBody,\n} from \"./types\";\nimport { shouldCaptureOutput } from \"../config\";\nimport * as intSemconv from \"../semconv\";\nimport { type SemConvLogRecordAttributes } from \"../semconv\";\nimport { context } from \"@opentelemetry/api\";\n\n/**\n * Internal implementation of {@link LangWatchLogger}.\n *\n * @remarks\n * This class wraps an OpenTelemetry logger and adds LangWatch-specific functionality for\n * structured logging and event emission.\n * Not intended for direct use; use {@link getLangWatchLogger} or\n * {@link createLangWatchLogger} instead.\n */\nexport class LangWatchLoggerInternal implements LangWatchLogger {\n constructor(private logger: Logger) {}\n\n emit(logRecord: LangWatchLogRecord, options?: EmitOptions): void {\n // Handle output capture configuration\n if (!shouldCaptureOutput()) {\n logRecord.body = void 0;\n }\n\n // Set context if not provided and not explicitly excluded\n if (!logRecord.context && !options?.excludeContext) {\n logRecord.context = context.active();\n }\n\n // Emit the log record through the underlying OpenTelemetry logger\n this.logger.emit(logRecord);\n }\n\n emitGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,\n { ...body, role: body.role ?? \"system\" } satisfies LangWatchSpanGenAISystemMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_USER_MESSAGE,\n { ...body, role: body.role ?? \"user\" } satisfies LangWatchSpanGenAIUserMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,\n { ...body, role: body.role ?? \"assistant\" } satisfies LangWatchSpanGenAIAssistantMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.role === void 0) {\n body.role = \"tool\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_TOOL_MESSAGE,\n { ...body },\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.message && body.message.role === void 0) {\n body.message.role = \"assistant\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_CHOICE,\n {\n ...body,\n message: { ...body.message, role: body.message?.role ?? \"assistant\" },\n } satisfies LangWatchSpanGenAIChoiceEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n private emitGenAIEvent(\n eventName: string,\n body: AnyValue,\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emit({\n eventName,\n context: context.active(),\n attributes: { ...attributes },\n body: shouldCaptureOutput() ? body : void 0,\n observedTimestamp: new Date().getTime(),\n });\n }\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import {
2
+ DatasetApiError,
3
+ DatasetNotFoundError,
4
+ DatasetService
5
+ } from "./chunk-ILLEMTW3.mjs";
6
+ import {
7
+ createLangWatchApiClient
8
+ } from "./chunk-QH3WUSKF.mjs";
9
+ import {
10
+ DEFAULT_ENDPOINT
11
+ } from "./chunk-LN33ZL4Z.mjs";
12
+ import {
13
+ NoOpLogger
14
+ } from "./chunk-M4IBRWUC.mjs";
15
+
16
+ // src/cli/commands/dataset/service-factory.ts
17
+ function createDatasetService() {
18
+ var _a, _b;
19
+ const apiKey = (_a = process.env.LANGWATCH_API_KEY) != null ? _a : "";
20
+ const endpoint = ((_b = process.env.LANGWATCH_ENDPOINT) != null ? _b : DEFAULT_ENDPOINT).replace(/\/$/, "");
21
+ return new DatasetService({
22
+ langwatchApiClient: createLangWatchApiClient(apiKey, endpoint),
23
+ logger: new NoOpLogger(),
24
+ endpoint,
25
+ apiKey
26
+ });
27
+ }
28
+
29
+ // src/cli/commands/dataset/error-handler.ts
30
+ import chalk from "chalk";
31
+ function handleDatasetCommandError(error, context) {
32
+ if (error instanceof DatasetNotFoundError) {
33
+ console.error(chalk.red(`Not found: ${error.message}`));
34
+ } else if (error instanceof DatasetApiError) {
35
+ console.error(chalk.red(`Error: ${error.message}`));
36
+ } else {
37
+ console.error(chalk.red(`Error ${context}: ${error instanceof Error ? error.message : "Unknown error"}`));
38
+ }
39
+ process.exit(1);
40
+ }
41
+
42
+ export {
43
+ createDatasetService,
44
+ handleDatasetCommandError
45
+ };
46
+ //# sourceMappingURL=chunk-DWHR6QJK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/dataset/service-factory.ts","../src/cli/commands/dataset/error-handler.ts"],"sourcesContent":["import { DatasetService } from \"@/client-sdk/services/datasets\";\nimport { createLangWatchApiClient } from \"@/internal/api/client\";\nimport { NoOpLogger } from \"@/logger\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\n/**\n * Creates a DatasetService configured from environment variables.\n * Reused by all dataset CLI commands.\n */\nexport function createDatasetService(): DatasetService {\n const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint = (\n process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT\n ).replace(/\\/$/, \"\");\n\n return new DatasetService({\n langwatchApiClient: createLangWatchApiClient(apiKey, endpoint),\n logger: new NoOpLogger(),\n endpoint,\n apiKey,\n });\n}\n","import chalk from \"chalk\";\nimport { DatasetNotFoundError, DatasetApiError } from \"@/client-sdk/services/datasets/errors\";\n\n/**\n * Centralized error handler for all dataset CLI commands.\n * Maps known error types to user-friendly messages and exits with code 1.\n *\n * @param error - The caught error\n * @param context - Human-readable context (e.g. \"creating dataset\", \"uploading file\")\n */\nexport function handleDatasetCommandError(error: unknown, context: string): never {\n if (error instanceof DatasetNotFoundError) {\n console.error(chalk.red(`Not found: ${error.message}`));\n } else if (error instanceof DatasetApiError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(`Error ${context}: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n process.exit(1);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AASO,SAAS,uBAAuC;AATvD;AAUE,QAAM,UAAS,aAAQ,IAAI,sBAAZ,YAAiC;AAChD,QAAM,aACJ,aAAQ,IAAI,uBAAZ,YAAkC,kBAClC,QAAQ,OAAO,EAAE;AAEnB,SAAO,IAAI,eAAe;AAAA,IACxB,oBAAoB,yBAAyB,QAAQ,QAAQ;AAAA,IAC7D,QAAQ,IAAI,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACrBA,OAAO,WAAW;AAUX,SAAS,0BAA0B,OAAgB,SAAwB;AAChF,MAAI,iBAAiB,sBAAsB;AACzC,YAAQ,MAAM,MAAM,IAAI,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,EACxD,WAAW,iBAAiB,iBAAiB;AAC3C,YAAQ,MAAM,MAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,EACpD,OAAO;AACL,YAAQ,MAAM,MAAM,IAAI,SAAS,OAAO,KAAK,iBAAiB,QAAQ,MAAM,UAAU,eAAe,EAAE,CAAC;AAAA,EAC1G;AACA,UAAQ,KAAK,CAAC;AAChB;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  PromptsApiService,
6
6
  PromptsError
7
- } from "./chunk-WASZSPD7.mjs";
7
+ } from "./chunk-L3IOXWDG.mjs";
8
8
  import {
9
9
  ensureProjectInitialized
10
10
  } from "./chunk-W3V3NX7P.mjs";
@@ -347,4 +347,4 @@ export {
347
347
  pushPrompts,
348
348
  pushCommand
349
349
  };
350
- //# sourceMappingURL=chunk-A7CF6ZGH.mjs.map
350
+ //# sourceMappingURL=chunk-ESGWN42J.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  attributes_exports
3
- } from "./chunk-JVIQJFUE.mjs";
3
+ } from "./chunk-M4IBRWUC.mjs";
4
4
 
5
5
  // src/observability-sdk/processors/filterable-batch-span-processor.ts
6
6
  import {
@@ -72,4 +72,4 @@ export {
72
72
  FilterableBatchSpanProcessor,
73
73
  DataCapturePresets
74
74
  };
75
- //# sourceMappingURL=chunk-FMYG6IOZ.mjs.map
75
+ //# sourceMappingURL=chunk-FARZEN6T.mjs.map
@@ -0,0 +1,68 @@
1
+ // src/client-sdk/tracing/create-tracing-proxy.ts
2
+ import { SpanKind } from "@opentelemetry/api";
3
+ function createTracingProxy(target, tracer, DecoratorClass) {
4
+ const decorator = DecoratorClass ? new DecoratorClass(target) : null;
5
+ return new Proxy(target, {
6
+ get(target2, prop, receiver) {
7
+ const value = Reflect.get(target2, prop, receiver);
8
+ if (typeof value !== "function") {
9
+ return value;
10
+ }
11
+ if (typeof prop === "string" && !prop.startsWith("_") && // Skip private methods
12
+ !isGetterOrSetter(target2, prop) && // Skip actual getters/setters
13
+ !isBuiltInMethod(prop)) {
14
+ return (...args) => {
15
+ const spanName = `${target2.constructor.name}.${prop}`;
16
+ return tracer.withActiveSpan(spanName, {
17
+ kind: SpanKind.CLIENT,
18
+ attributes: {
19
+ "code.function": prop,
20
+ "code.namespace": target2.constructor.name
21
+ }
22
+ }, (span) => {
23
+ if (decorator && prop in decorator) {
24
+ const decoratorMethod = decorator[prop];
25
+ if (typeof decoratorMethod === "function") {
26
+ return decoratorMethod.apply(decorator, [span, ...args]);
27
+ }
28
+ }
29
+ return value.apply(target2, args);
30
+ });
31
+ };
32
+ }
33
+ return typeof value === "function" ? value.bind(target2) : value;
34
+ }
35
+ });
36
+ }
37
+ var isGetterOrSetter = (target, prop) => {
38
+ var _a;
39
+ let descriptor = Object.getOwnPropertyDescriptor(target, prop);
40
+ if (!descriptor) {
41
+ const prototype = Object.getPrototypeOf(target);
42
+ if (prototype) {
43
+ descriptor = Object.getOwnPropertyDescriptor(prototype, prop);
44
+ }
45
+ }
46
+ return !!((_a = descriptor == null ? void 0 : descriptor.get) != null ? _a : descriptor == null ? void 0 : descriptor.set);
47
+ };
48
+ var isBuiltInMethod = (prop) => {
49
+ if (typeof prop !== "string") {
50
+ return false;
51
+ }
52
+ const builtInMethods = [
53
+ "toString",
54
+ "valueOf",
55
+ "toJSON",
56
+ "toLocaleString",
57
+ "hasOwnProperty",
58
+ "isPrototypeOf",
59
+ "propertyIsEnumerable",
60
+ "constructor"
61
+ ];
62
+ return builtInMethods.includes(prop);
63
+ };
64
+
65
+ export {
66
+ createTracingProxy
67
+ };
68
+ //# sourceMappingURL=chunk-FG3JQBJB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client-sdk/tracing/create-tracing-proxy.ts"],"sourcesContent":["import { type LangWatchTracer } from \"@/observability-sdk\";\nimport { SpanKind } from \"@opentelemetry/api\";\n\n// Type for decorator methods that receive span as first parameter\ntype DecoratorMethodWithSpan<T extends (...args: any[]) => any> =\n (span: any, ...args: Parameters<T>) => ReturnType<T>;\n\n// Type for decorator class that maps original methods to span-aware versions\n// Only requires methods that are actually implemented in the decorator\ntype DecoratorClass<T> = new (target: T) => Partial<{\n [K in keyof T]: T[K] extends (...args: any[]) => any\n ? DecoratorMethodWithSpan<T[K]>\n : T[K];\n }>;\n\n/**\n * Creates a proxy that always creates spans for public methods.\n * Decorators can access the span as the first parameter to add additional attributes.\n *\n * @param target - The target to wrap\n * @param tracer - The tracer instance to use\n * @param DecoratorClass - Optional decorator class for custom logic\n * @returns A proxy that wraps the target with consistent tracing\n */\nexport function createTracingProxy<\n T extends object,\n D extends DecoratorClass<T> | undefined = undefined\n>(\n target: T,\n tracer: LangWatchTracer,\n DecoratorClass?: D,\n): T {\n const decorator = DecoratorClass ? new DecoratorClass(target) : null;\n\n return new Proxy(target, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n // If it's not a function, return as-is\n if (typeof value !== \"function\") {\n return value;\n }\n\n // Only trace public methods\n if (\n typeof prop === \"string\" &&\n !prop.startsWith(\"_\") && // Skip private methods\n !isGetterOrSetter(target, prop) && // Skip actual getters/setters\n !isBuiltInMethod(prop) // Skip built-in methods\n ) {\n return (...args: any[]) => {\n const spanName = `${target.constructor.name}.${prop}`;\n\n return tracer.withActiveSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes: {\n 'code.function': prop,\n 'code.namespace': target.constructor.name,\n },\n }, (span) => {\n // If decorator has this method, call it with span as first parameter\n if (decorator && prop in decorator) {\n const decoratorMethod = decorator[prop as keyof typeof decorator];\n if (typeof decoratorMethod === \"function\") {\n return decoratorMethod.apply(decorator, [span, ...args]);\n }\n }\n\n // Default: just call the original method\n return value.apply(target, args);\n });\n };\n }\n\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n}\n\n// Helper function to check if a property is a getter or setter\nconst isGetterOrSetter = (target: any, prop: string | symbol): boolean => {\n // First check own properties\n let descriptor = Object.getOwnPropertyDescriptor(target, prop);\n\n // If not found on own properties, check prototype chain\n if (!descriptor) {\n const prototype = Object.getPrototypeOf(target);\n if (prototype) {\n descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n }\n }\n\n // Return true if it's a getter or setter\n return !!(descriptor?.get ?? descriptor?.set);\n};\n\n// Helper function to check if a method is a built-in method that should not be traced\nconst isBuiltInMethod = (prop: string | symbol): boolean => {\n if (typeof prop !== \"string\") {\n return false;\n }\n\n // List of built-in methods that should not be traced\n const builtInMethods = [\n 'toString',\n 'valueOf',\n 'toJSON',\n 'toLocaleString',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n\n return builtInMethods.includes(prop);\n};\n"],"mappings":";AACA,SAAS,gBAAgB;AAuBlB,SAAS,mBAId,QACA,QACA,gBACG;AACH,QAAM,YAAY,iBAAiB,IAAI,eAAe,MAAM,IAAI;AAEhE,SAAO,IAAI,MAAM,QAAQ;AAAA,IACvB,IAAIA,SAAQ,MAAM,UAAU;AAC1B,YAAM,QAAQ,QAAQ,IAAIA,SAAQ,MAAM,QAAQ;AAGhD,UAAI,OAAO,UAAU,YAAY;AAC/B,eAAO;AAAA,MACT;AAGA,UACE,OAAO,SAAS,YAChB,CAAC,KAAK,WAAW,GAAG;AAAA,MACpB,CAAC,iBAAiBA,SAAQ,IAAI;AAAA,MAC9B,CAAC,gBAAgB,IAAI,GACrB;AACA,eAAO,IAAI,SAAgB;AACzB,gBAAM,WAAW,GAAGA,QAAO,YAAY,IAAI,IAAI,IAAI;AAEnD,iBAAO,OAAO,eAAe,UAAU;AAAA,YACrC,MAAM,SAAS;AAAA,YACf,YAAY;AAAA,cACV,iBAAiB;AAAA,cACjB,kBAAkBA,QAAO,YAAY;AAAA,YACvC;AAAA,UACF,GAAG,CAAC,SAAS;AAEX,gBAAI,aAAa,QAAQ,WAAW;AAClC,oBAAM,kBAAkB,UAAU,IAA8B;AAChE,kBAAI,OAAO,oBAAoB,YAAY;AACzC,uBAAO,gBAAgB,MAAM,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;AAAA,cACzD;AAAA,YACF;AAGA,mBAAO,MAAM,MAAMA,SAAQ,IAAI;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAEA,aAAO,OAAO,UAAU,aAAa,MAAM,KAAKA,OAAM,IAAI;AAAA,IAC5D;AAAA,EACF,CAAC;AACH;AAGA,IAAM,mBAAmB,CAAC,QAAa,SAAmC;AAhF1E;AAkFE,MAAI,aAAa,OAAO,yBAAyB,QAAQ,IAAI;AAG7D,MAAI,CAAC,YAAY;AACf,UAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAI,WAAW;AACb,mBAAa,OAAO,yBAAyB,WAAW,IAAI;AAAA,IAC9D;AAAA,EACF;AAGA,SAAO,CAAC,GAAE,8CAAY,QAAZ,YAAmB,yCAAY;AAC3C;AAGA,IAAM,kBAAkB,CAAC,SAAmC;AAC1D,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AAGA,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,eAAe,SAAS,IAAI;AACrC;","names":["target"]}
@@ -0,0 +1,63 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+
4
+ var _chunkX7QBE6AAjs = require('./chunk-X7QBE6AA.js');
5
+
6
+
7
+ var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
8
+
9
+ // src/cli/commands/dataset/create.ts
10
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
11
+ var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
12
+ var parseColumns = (columnsStr) => {
13
+ return columnsStr.split(",").map((pair) => {
14
+ var _a, _b;
15
+ const parts = pair.trim().split(":");
16
+ if (parts.length !== 2 || !((_a = parts[0]) == null ? void 0 : _a.trim()) || !((_b = parts[1]) == null ? void 0 : _b.trim())) {
17
+ throw new Error(
18
+ `Invalid column format: "${pair.trim()}". Expected "name:type" (e.g. "input:string")`
19
+ );
20
+ }
21
+ return { name: parts[0].trim(), type: parts[1].trim() };
22
+ });
23
+ };
24
+ var createCommand = async (name, options) => {
25
+ _chunkF6E4XQQUjs.checkApiKey.call(void 0, );
26
+ let columnTypes = [];
27
+ if (options.columns) {
28
+ try {
29
+ columnTypes = parseColumns(options.columns);
30
+ } catch (error) {
31
+ console.error(
32
+ _chalk2.default.red(error instanceof Error ? error.message : "Invalid columns format")
33
+ );
34
+ process.exit(1);
35
+ }
36
+ }
37
+ const service = _chunkX7QBE6AAjs.createDatasetService.call(void 0, );
38
+ const spinner = _ora2.default.call(void 0, `Creating dataset "${name}"...`).start();
39
+ try {
40
+ const dataset = await service.createDataset({ name, columnTypes });
41
+ spinner.succeed(`Dataset created: ${_chalk2.default.cyan(dataset.slug)}`);
42
+ if (options.format === "json") {
43
+ console.log(JSON.stringify(dataset, null, 2));
44
+ return;
45
+ }
46
+ console.log();
47
+ console.log(` ${_chalk2.default.bold("ID:")} ${dataset.id}`);
48
+ console.log(` ${_chalk2.default.bold("Slug:")} ${dataset.slug}`);
49
+ if (dataset.columnTypes.length > 0) {
50
+ const colStr = dataset.columnTypes.map((c) => `${c.name}:${c.type}`).join(", ");
51
+ console.log(` ${_chalk2.default.bold("Columns:")} ${colStr}`);
52
+ }
53
+ } catch (error) {
54
+ spinner.fail("Failed to create dataset");
55
+ _chunkX7QBE6AAjs.handleDatasetCommandError.call(void 0, error, "creating dataset");
56
+ }
57
+ };
58
+
59
+
60
+
61
+
62
+ exports.parseColumns = parseColumns; exports.createCommand = createCommand;
63
+ //# sourceMappingURL=chunk-FKIH4XCX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-FKIH4XCX.js","../src/cli/commands/dataset/create.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACRA,4EAAkB;AAClB,oEAAgB;AAaT,IAAM,aAAA,EAAe,CAAC,UAAA,EAAA,GAA4C;AACvE,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS;AAf7C,IAAA,IAAA,EAAA,EAAA,EAAA;AAgBI,IAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA;AACnC,IAAA,GAAA,CAAI,KAAA,CAAM,OAAA,IAAW,EAAA,GAAK,CAAA,CAAA,CAAC,GAAA,EAAA,KAAA,CAAM,CAAC,CAAA,EAAA,GAAP,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAU,IAAA,CAAA,CAAA,EAAA,GAAU,CAAA,CAAA,CAAC,GAAA,EAAA,KAAA,CAAM,CAAC,CAAA,EAAA,GAAP,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAU,IAAA,CAAA,CAAA,CAAA,EAAQ;AAChE,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,wBAAA,EAA2B,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,6CAAA;AAAA,MACxC,CAAA;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,EACxD,CAAC,CAAA;AACH,CAAA;AAKO,IAAM,cAAA,EAAgB,MAAA,CAC3B,IAAA,EACA,OAAA,EAAA,GACkB;AAClB,EAAA,0CAAA,CAAY;AAEZ,EAAA,IAAI,YAAA,EAAmC,CAAC,CAAA;AACxC,EAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS;AACnB,IAAA,IAAI;AACF,MAAA,YAAA,EAAc,YAAA,CAAa,OAAA,CAAQ,OAAO,CAAA;AAAA,IAC5C,EAAA,MAAA,CAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,eAAA,CAAM,GAAA,CAAI,MAAA,WAAiB,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,wBAAwB;AAAA,MAC7E,CAAA;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,EAAU,mDAAA,CAAqB;AACrC,EAAA,MAAM,QAAA,EAAU,2BAAA,CAAI,kBAAA,EAAqB,IAAI,CAAA,IAAA,CAAM,CAAA,CAAE,KAAA,CAAM,CAAA;AAE3D,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,EAAU,MAAM,OAAA,CAAQ,aAAA,CAAc,EAAE,IAAA,EAAM,YAAY,CAAC,CAAA;AAEjE,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA,iBAAA,EAAoB,eAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AAE7B,IAAA;AACe,MAAA;AAC5C,MAAA;AACF,IAAA;AAEY,IAAA;AACyC,IAAA;AACE,IAAA;AACnB,IAAA;AAEP,MAAA;AAEwB,MAAA;AACrD,IAAA;AACc,EAAA;AACyB,IAAA;AACY,IAAA;AACrD,EAAA;AACF;ADhBiE;AACA;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-FKIH4XCX.js","sourcesContent":[null,"import chalk from \"chalk\";\nimport ora from \"ora\";\nimport type { DatasetColumnType } from \"@/client-sdk/services/datasets/types\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { createDatasetService } from \"./service-factory\";\nimport { handleDatasetCommandError } from \"./error-handler\";\n\n/**\n * Parses a comma-separated column spec string into DatasetColumnType[].\n *\n * @param columnsStr - Format: \"name:type,name:type\" (e.g. \"input:string,output:string\")\n * @returns Parsed column type definitions\n * @throws Error if the format is invalid\n */\nexport const parseColumns = (columnsStr: string): DatasetColumnType[] => {\n return columnsStr.split(\",\").map((pair) => {\n const parts = pair.trim().split(\":\");\n if (parts.length !== 2 || !parts[0]?.trim() || !parts[1]?.trim()) {\n throw new Error(\n `Invalid column format: \"${pair.trim()}\". Expected \"name:type\" (e.g. \"input:string\")`,\n );\n }\n return { name: parts[0].trim(), type: parts[1].trim() };\n });\n};\n\n/**\n * Creates a new dataset with the given name and optional column types.\n */\nexport const createCommand = async (\n name: string,\n options: { columns?: string; format?: string },\n): Promise<void> => {\n checkApiKey();\n\n let columnTypes: DatasetColumnType[] = [];\n if (options.columns) {\n try {\n columnTypes = parseColumns(options.columns);\n } catch (error) {\n console.error(\n chalk.red(error instanceof Error ? error.message : \"Invalid columns format\"),\n );\n process.exit(1);\n }\n }\n\n const service = createDatasetService();\n const spinner = ora(`Creating dataset \"${name}\"...`).start();\n\n try {\n const dataset = await service.createDataset({ name, columnTypes });\n\n spinner.succeed(`Dataset created: ${chalk.cyan(dataset.slug)}`);\n\n if (options.format === \"json\") {\n console.log(JSON.stringify(dataset, null, 2));\n return;\n }\n\n console.log();\n console.log(` ${chalk.bold(\"ID:\")} ${dataset.id}`);\n console.log(` ${chalk.bold(\"Slug:\")} ${dataset.slug}`);\n if (dataset.columnTypes.length > 0) {\n const colStr = dataset.columnTypes\n .map((c) => `${c.name}:${c.type}`)\n .join(\", \");\n console.log(` ${chalk.bold(\"Columns:\")} ${colStr}`);\n }\n } catch (error) {\n spinner.fail(\"Failed to create dataset\");\n handleDatasetCommandError(error, \"creating dataset\");\n }\n};\n"]}