@langwatch/mcp-server 2.0.0 → 2.2.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 (430) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +280 -200
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +82 -52
  6. package/dist/add-dashboard-widget-4ZC5UN73.js +50 -0
  7. package/dist/add-dashboard-widget-ACC6QYBG.js +49 -0
  8. package/dist/archive-project-KWFM3I5Z.js +19 -0
  9. package/dist/{archive-project-4EQGLBJJ.js → archive-project-SPVHXK6A.js} +4 -4
  10. package/dist/archive-run-plan-65QN3XRX.js +16 -0
  11. package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
  12. package/dist/{archive-scenario-W6BXYDZ3.js → archive-scenario-A6QV5LOW.js} +4 -4
  13. package/dist/archive-scenario-FXEYQNEH.js +19 -0
  14. package/dist/archive-test-suite-5ADQ3KPQ.js +15 -0
  15. package/dist/archive-test-suite-NKZDZY3D.js +16 -0
  16. package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
  17. package/dist/{assign-prompt-tag-VLXUWEKU.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
  18. package/dist/{chunk-CDYQOY5U.js → chunk-3OCG3QPU.js} +7 -10
  19. package/dist/chunk-3YLN3ATJ.js +241 -0
  20. package/dist/chunk-5FNCQRCX.js +91 -0
  21. package/dist/chunk-6YZUOD34.js +55 -0
  22. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  23. package/dist/chunk-7VNSRCXO.js +129 -0
  24. package/dist/{chunk-7RHG56OH.js → chunk-B4J3PJLX.js} +11 -10
  25. package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
  26. package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
  27. package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
  28. package/dist/{chunk-WT4PO4A3.js → chunk-H6WGMG2T.js} +10 -7
  29. package/dist/{chunk-TOXJQDIZ.js → chunk-HGELNIVY.js} +135 -51
  30. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  31. package/dist/{chunk-J42FWRJ2.js → chunk-I7ATIZED.js} +7 -7
  32. package/dist/{chunk-AQJO2EI5.js → chunk-ILZDO25L.js} +7 -10
  33. package/dist/{chunk-4QC7SA2L.js → chunk-J7PQKBLD.js} +884 -559
  34. package/dist/{chunk-YX3A3CFM.js → chunk-JRJPH75H.js} +7 -13
  35. package/dist/chunk-K2I7Z3LZ.js +28 -0
  36. package/dist/{chunk-5CCZFUXS.js → chunk-NKMTIHIJ.js} +6 -9
  37. package/dist/chunk-O7EMWEVJ.js +44 -0
  38. package/dist/chunk-PTDR56Z3.js +37 -0
  39. package/dist/chunk-RABYBFX5.js +43 -0
  40. package/dist/chunk-SUPUUC4W.js +64 -0
  41. package/dist/{chunk-SFB4MU6H.js → chunk-SXFC3FNH.js} +4 -4
  42. package/dist/chunk-U24EACC4.js +67 -0
  43. package/dist/chunk-UNJM3BIL.js +21 -0
  44. package/dist/{chunk-ZWIL4EFL.js → chunk-UTJCWXPZ.js} +4 -4
  45. package/dist/chunk-UWLE5T2F.js +312 -0
  46. package/dist/chunk-VMWJD732.js +57 -0
  47. package/dist/chunk-XUIJYNRJ.js +15 -0
  48. package/dist/chunk-Y34DHR5K.js +67 -0
  49. package/dist/chunk-YCARO42Z.js +516 -0
  50. package/dist/config-EAKW6F26.js +16 -0
  51. package/dist/config.cjs +109 -0
  52. package/dist/config.js +5 -4
  53. package/dist/{create-agent-7XHO6UIS.js → create-agent-AYZ3LB3V.js} +4 -4
  54. package/dist/create-agent-S5ZBCEFT.js +23 -0
  55. package/dist/create-annotation-LHNCLHYP.js +29 -0
  56. package/dist/{create-annotation-YQXRQC6A.js → create-annotation-VUSXULQK.js} +10 -5
  57. package/dist/{create-api-key-YUS36KBU.js → create-api-key-NNYKARMG.js} +5 -7
  58. package/dist/create-api-key-T4KSNPKB.js +24 -0
  59. package/dist/create-dashboard-DHVFMEU4.js +18 -0
  60. package/dist/{create-dashboard-4Z5JO5LB.js → create-dashboard-WTKKS5Z6.js} +4 -4
  61. package/dist/{create-dataset-E6NMSVX7.js → create-dataset-2MC4SD4O.js} +6 -6
  62. package/dist/create-dataset-LUP5PVDM.js +22 -0
  63. package/dist/create-dataset-records-NSKBZP3G.js +20 -0
  64. package/dist/{create-dataset-records-SKHPRD2K.js → create-dataset-records-W4GLN2FV.js} +5 -7
  65. package/dist/{create-evaluator-JXF5PF33.js → create-evaluator-643G6LXL.js} +4 -4
  66. package/dist/create-evaluator-HMTYO5SS.js +27 -0
  67. package/dist/create-mcp-server.cjs +9513 -0
  68. package/dist/create-mcp-server.js +2647 -5
  69. package/dist/create-project-6N7PIYRY.js +44 -0
  70. package/dist/{create-project-CS2CB57Y.js → create-project-KAIC46UY.js} +4 -4
  71. package/dist/{create-prompt-F5RMX3L3.js → create-prompt-E67LXIYT.js} +5 -7
  72. package/dist/create-prompt-PKJ7EDRR.js +37 -0
  73. package/dist/create-prompt-tag-4YO3FSJ3.js +17 -0
  74. package/dist/{create-prompt-tag-GMRWTEFR.js → create-prompt-tag-OPQUEXWB.js} +3 -3
  75. package/dist/create-scenario-5PJBMAXO.js +33 -0
  76. package/dist/{create-scenario-JDR2VB2H.js → create-scenario-UEM77OE7.js} +11 -4
  77. package/dist/create-test-suite-4IPXVSFQ.js +37 -0
  78. package/dist/create-test-suite-SZEPVXSE.js +36 -0
  79. package/dist/create-trigger-5HZSCRAN.js +49 -0
  80. package/dist/create-trigger-PRELMT6J.js +48 -0
  81. package/dist/delete-agent-JUIZWAXG.js +18 -0
  82. package/dist/{delete-agent-O3EEH4S5.js → delete-agent-QMEK3XHK.js} +4 -4
  83. package/dist/delete-annotation-HY3O2OGR.js +17 -0
  84. package/dist/{delete-annotation-XP6FQM7A.js → delete-annotation-VKIQWUYW.js} +4 -4
  85. package/dist/delete-dashboard-76N66XXL.js +18 -0
  86. package/dist/{delete-dashboard-RFUNYCNP.js → delete-dashboard-JVIVHNJM.js} +4 -4
  87. package/dist/delete-dataset-HQCR66MG.js +18 -0
  88. package/dist/{delete-dataset-3MJFRDLP.js → delete-dataset-WKRUW4FP.js} +5 -7
  89. package/dist/{delete-dataset-records-WPMU5GL5.js → delete-dataset-records-C2IQFFVQ.js} +5 -7
  90. package/dist/delete-dataset-records-SDUHQLLM.js +19 -0
  91. package/dist/delete-evaluator-4SNSCLEE.js +16 -0
  92. package/dist/delete-evaluator-QP3QHTLN.js +15 -0
  93. package/dist/delete-prompt-tag-NZ4JQMYG.js +17 -0
  94. package/dist/{delete-prompt-tag-KNMZVSPB.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
  95. package/dist/{delete-workflow-3NUXO46U.js → delete-workflow-5J46T73T.js} +4 -4
  96. package/dist/delete-workflow-JSWABL5F.js +17 -0
  97. package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
  98. package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
  99. package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
  100. package/dist/discover-scenario-schema-OOFIQKOG.js +139 -0
  101. package/dist/{discover-schema-L6QDPON3.js → discover-schema-55YJBFGQ.js} +181 -186
  102. package/dist/discover-schema-A33SLMXW.js +442 -0
  103. package/dist/get-agent-LJQX7OF4.js +69 -0
  104. package/dist/get-agent-OTIYUFZA.js +70 -0
  105. package/dist/get-analytics-DCS72353.js +80 -0
  106. package/dist/get-analytics-IQZKJHLW.js +79 -0
  107. package/dist/get-dashboard-5NYJEIX2.js +29 -0
  108. package/dist/{get-dashboard-KHBEGZGL.js → get-dashboard-QMTYDQAZ.js} +4 -4
  109. package/dist/get-dataset-ALSP7RTX.js +64 -0
  110. package/dist/get-dataset-X4B5JDG2.js +63 -0
  111. package/dist/{get-evaluator-ADMKVWYZ.js → get-evaluator-ISMC4LLI.js} +4 -4
  112. package/dist/get-evaluator-XEUZGZCH.js +47 -0
  113. package/dist/{get-project-RAK7URQJ.js → get-project-5VKROSDH.js} +4 -4
  114. package/dist/get-project-RM6FRCBK.js +26 -0
  115. package/dist/get-prompt-OWXJZHQQ.js +95 -0
  116. package/dist/get-prompt-W52DY36E.js +94 -0
  117. package/dist/get-run-plan-BE3M2AUX.js +59 -0
  118. package/dist/get-run-plan-RUXQ6PAX.js +58 -0
  119. package/dist/get-scenario-RNM7BAX2.js +37 -0
  120. package/dist/{get-scenario-ZTAJJL5T.js → get-scenario-YM4ODWW6.js} +8 -4
  121. package/dist/get-simulation-run-6GIATQE5.js +69 -0
  122. package/dist/{get-simulation-run-T2ZQWYH2.js → get-simulation-run-LCFSMPGQ.js} +33 -20
  123. package/dist/get-test-suite-GC2O7YH6.js +49 -0
  124. package/dist/get-test-suite-P5LJ6VLF.js +48 -0
  125. package/dist/get-trace-KBRVV4NN.js +45 -0
  126. package/dist/{get-trace-K7U234Q4.js → get-trace-SEF3FMR5.js} +11 -13
  127. package/dist/get-workflow-7PVED7JE.js +25 -0
  128. package/dist/{get-workflow-L5L2PSK3.js → get-workflow-YXULW4GC.js} +4 -4
  129. package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
  130. package/dist/{http-server-YXHFPPGA.js → http-server-IR4QOS43.js} +4071 -342
  131. package/dist/index.js +60221 -38077
  132. package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
  133. package/dist/{langwatch-api-annotations-FDAS6NQ7.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
  134. package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
  135. package/dist/{langwatch-api-dashboards-JTVCS7ZJ.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
  136. package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
  137. package/dist/{langwatch-api-monitors-3J7UIQME.js → langwatch-api-monitors-YNWA2M5Y.js} +11 -16
  138. package/dist/langwatch-api-secrets-ADTOJELP.js +56 -0
  139. package/dist/langwatch-api-secrets-RNFO4LF2.js +55 -0
  140. package/dist/langwatch-api-triggers-KQDQC6L5.js +22 -0
  141. package/dist/langwatch-api-triggers-QS7HDIVW.js +23 -0
  142. package/dist/{langwatch-api-workflows-NBJX5KOG.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
  143. package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
  144. package/dist/list-agents-HVYWEQMI.js +43 -0
  145. package/dist/list-agents-RBAOCF53.js +42 -0
  146. package/dist/list-annotations-HJH4NBLD.js +38 -0
  147. package/dist/{list-annotations-ZTVP4EEL.js → list-annotations-J4UAHSUN.js} +10 -5
  148. package/dist/{list-api-keys-CWD4UQT5.js → list-api-keys-7UTJRZDG.js} +10 -5
  149. package/dist/list-api-keys-A2PMV435.js +42 -0
  150. package/dist/list-dashboard-boards-OPWROHMG.js +33 -0
  151. package/dist/list-dashboard-boards-U2GJ7GC5.js +34 -0
  152. package/dist/{list-dashboards-PWG6P6KR.js → list-dashboards-ROSYFLDQ.js} +4 -4
  153. package/dist/list-dashboards-RQ635ZU7.js +32 -0
  154. package/dist/{list-dataset-records-IOE7LQXS.js → list-dataset-records-M5TKA6LK.js} +14 -10
  155. package/dist/list-dataset-records-WFM7F33C.js +43 -0
  156. package/dist/{list-datasets-ZT4JYUDT.js → list-datasets-B5X4P7BQ.js} +9 -13
  157. package/dist/list-datasets-THUKQHPX.js +56 -0
  158. package/dist/{list-evaluators-SJHC7VBH.js → list-evaluators-MYH2OVCI.js} +5 -7
  159. package/dist/list-evaluators-NLVWF6K7.js +32 -0
  160. package/dist/{list-model-providers-PPD2WPD2.js → list-model-providers-3JUGP4YI.js} +4 -4
  161. package/dist/list-model-providers-H3XKORFO.js +35 -0
  162. package/dist/{list-projects-K7QAIX2I.js → list-projects-6EJ5YYEW.js} +5 -7
  163. package/dist/list-projects-YNNSRMLC.js +40 -0
  164. package/dist/{list-prompt-tags-FOO6TNHB.js → list-prompt-tags-NVFQO6WX.js} +3 -3
  165. package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
  166. package/dist/{list-prompts-SC2HAUFG.js → list-prompts-HSIMMHTF.js} +4 -6
  167. package/dist/list-prompts-IRI6AIXO.js +30 -0
  168. package/dist/list-run-plans-PX2XI6EK.js +46 -0
  169. package/dist/list-run-plans-QALLCN2K.js +45 -0
  170. package/dist/list-scenarios-QZRPVHS4.js +46 -0
  171. package/dist/list-scenarios-SSJQEMJP.js +45 -0
  172. package/dist/list-simulation-runs-KNOLGMDV.js +53 -0
  173. package/dist/{list-simulation-runs-KF5THG5H.js → list-simulation-runs-OEADLLQR.js} +19 -9
  174. package/dist/list-test-suites-ANAQBLDG.js +34 -0
  175. package/dist/list-test-suites-N4WVLBKK.js +35 -0
  176. package/dist/list-trigger-fires-JV3WFYYG.js +19 -0
  177. package/dist/list-trigger-fires-WTW4DVIW.js +20 -0
  178. package/dist/list-triggers-SQNIG35Q.js +45 -0
  179. package/dist/list-triggers-V4Y356AK.js +46 -0
  180. package/dist/{list-workflows-QSJWURCK.js → list-workflows-IMSX7SXU.js} +5 -7
  181. package/dist/list-workflows-ZHTX5LCL.js +33 -0
  182. package/dist/{rename-prompt-tag-EKWU5QF3.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
  183. package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
  184. package/dist/rename-test-suite-4J7UX5S2.js +21 -0
  185. package/dist/rename-test-suite-NNVLMLKY.js +20 -0
  186. package/dist/report-issue-AS34ZMJF.js +898 -0
  187. package/dist/report-issue-DCZFLGDO.js +899 -0
  188. package/dist/rerun-run-plan-TG2V4WM4.js +22 -0
  189. package/dist/rerun-run-plan-ZI5OY3VA.js +21 -0
  190. package/dist/revoke-api-key-3J3ZA4UB.js +15 -0
  191. package/dist/{revoke-api-key-FTRTZMOF.js → revoke-api-key-SFMEFWJC.js} +4 -4
  192. package/dist/run-agent-W4VJP72Z.js +75 -0
  193. package/dist/run-agent-YNV6ZHW4.js +74 -0
  194. package/dist/run-plan-6C77GWG4.js +38 -0
  195. package/dist/run-plan-PAARQSI4.js +39 -0
  196. package/dist/run-query-KJDH544C.js +47 -0
  197. package/dist/run-query-T4QW2Z5O.js +46 -0
  198. package/dist/run-test-suite-SQJELEZX.js +26 -0
  199. package/dist/run-test-suite-STB6NUJM.js +25 -0
  200. package/dist/{run-workflow-QPXC627O.js → run-workflow-D6PQNBI6.js} +4 -4
  201. package/dist/{run-agent-6SM4XNA7.js → run-workflow-SP32SO5M.js} +10 -11
  202. package/dist/search-traces-HCBGOG6R.js +170 -0
  203. package/dist/search-traces-HSTQ6WTQ.js +171 -0
  204. package/dist/{set-model-provider-3WKT63ZN.js → set-model-provider-GF7NXUJA.js} +4 -4
  205. package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
  206. package/dist/{update-agent-SMAEHLXH.js → update-agent-DWG43T2P.js} +4 -4
  207. package/dist/update-agent-MXNOBS4H.js +20 -0
  208. package/dist/update-dashboard-widget-CJKJLCDY.js +71 -0
  209. package/dist/update-dashboard-widget-CYQDS2NR.js +70 -0
  210. package/dist/update-dataset-DQH3OHOU.js +22 -0
  211. package/dist/{update-dataset-BDUK7TUO.js → update-dataset-SQZ6T4WX.js} +6 -6
  212. package/dist/{update-dataset-record-4ZSDRBSW.js → update-dataset-record-3AT4IPBC.js} +4 -4
  213. package/dist/update-dataset-record-7PLDGTMR.js +19 -0
  214. package/dist/update-evaluator-4LFTKFPT.js +24 -0
  215. package/dist/{update-evaluator-LS6TIBY7.js → update-evaluator-IGTX6PX4.js} +4 -4
  216. package/dist/{update-project-LKVYXENH.js → update-project-PLJIOZS6.js} +4 -4
  217. package/dist/update-project-QVHSJRUP.js +24 -0
  218. package/dist/update-prompt-GDKRYJI3.js +140 -0
  219. package/dist/update-prompt-MY263DYF.js +141 -0
  220. package/dist/update-scenario-7KA3JDXA.js +34 -0
  221. package/dist/{update-scenario-NEXCAQI7.js → update-scenario-MOHRQKAQ.js} +11 -4
  222. package/package.json +39 -44
  223. package/pyproject.toml +8 -8
  224. package/src/config.d.ts +4 -0
  225. package/src/config.ts +20 -29
  226. package/src/create-mcp-server.ts +1021 -596
  227. package/src/documentation-fetch.ts +21 -20
  228. package/src/http-security.ts +166 -135
  229. package/src/http-server.ts +189 -224
  230. package/src/index.ts +14 -16
  231. package/src/langwatch-api-agents.ts +202 -21
  232. package/src/langwatch-api-annotations.ts +11 -12
  233. package/src/langwatch-api-api-keys.ts +8 -9
  234. package/src/langwatch-api-boards.ts +46 -0
  235. package/src/langwatch-api-dashboard-widgets.ts +112 -0
  236. package/src/langwatch-api-dashboards.ts +13 -10
  237. package/src/langwatch-api-datasets.ts +98 -32
  238. package/src/langwatch-api-evaluators.ts +13 -19
  239. package/src/langwatch-api-model-providers.ts +4 -4
  240. package/src/langwatch-api-monitors.ts +14 -18
  241. package/src/langwatch-api-projects.ts +27 -9
  242. package/src/langwatch-api-query.ts +114 -0
  243. package/src/langwatch-api-run-plans.ts +140 -0
  244. package/src/langwatch-api-scenarios.ts +17 -10
  245. package/src/langwatch-api-secrets.ts +31 -24
  246. package/src/langwatch-api-simulation-runs.ts +10 -7
  247. package/src/langwatch-api-test-suites.ts +116 -0
  248. package/src/langwatch-api-triggers.ts +96 -34
  249. package/src/langwatch-api-workflows.ts +9 -9
  250. package/src/langwatch-api.ts +143 -109
  251. package/src/public-http-request.ts +21 -12
  252. package/src/schemas/analytics-metrics.ts +3 -15
  253. package/src/schemas/create-dataset.ts +3 -4
  254. package/src/schemas/run-plan.ts +76 -0
  255. package/src/schemas/suite-fields.ts +132 -0
  256. package/src/schemas/triggers.ts +365 -0
  257. package/src/tools/add-dashboard-widget.ts +63 -0
  258. package/src/tools/archive-project.ts +2 -4
  259. package/src/tools/archive-run-plan.ts +10 -0
  260. package/src/tools/archive-scenario.ts +2 -4
  261. package/src/tools/archive-test-suite.ts +10 -0
  262. package/src/tools/assign-prompt-tag.ts +6 -2
  263. package/src/tools/create-agent.ts +1 -1
  264. package/src/tools/create-annotation.ts +7 -2
  265. package/src/tools/create-api-key.ts +4 -6
  266. package/src/tools/create-dashboard.ts +1 -1
  267. package/src/tools/create-dataset-records.ts +4 -8
  268. package/src/tools/create-dataset.ts +5 -7
  269. package/src/tools/create-evaluator.ts +3 -5
  270. package/src/tools/create-project.ts +2 -2
  271. package/src/tools/create-prompt-tag.ts +2 -4
  272. package/src/tools/create-prompt.ts +9 -18
  273. package/src/tools/create-scenario.ts +11 -5
  274. package/src/tools/create-test-suite.ts +38 -0
  275. package/src/tools/create-trigger.ts +55 -0
  276. package/src/tools/dashboard-exists.ts +25 -0
  277. package/src/tools/dashboard-widget-queries.ts +32 -0
  278. package/src/tools/delete-agent.ts +1 -1
  279. package/src/tools/delete-annotation.ts +1 -1
  280. package/src/tools/delete-dashboard.ts +1 -1
  281. package/src/tools/delete-dataset-records.ts +4 -8
  282. package/src/tools/delete-dataset.ts +3 -7
  283. package/src/tools/delete-evaluator.ts +4 -6
  284. package/src/tools/delete-prompt-tag.ts +2 -4
  285. package/src/tools/delete-workflow.ts +1 -1
  286. package/src/tools/discover-evaluator-schema.ts +34 -25
  287. package/src/tools/discover-scenario-schema.ts +86 -12
  288. package/src/tools/discover-schema.ts +149 -27
  289. package/src/tools/experiment-run-status.ts +2 -8
  290. package/src/tools/format-dataset-mutation.ts +5 -10
  291. package/src/tools/format-run-plan.ts +54 -0
  292. package/src/tools/format-scenario.ts +12 -0
  293. package/src/tools/format-suite-details.ts +90 -0
  294. package/src/tools/get-agent.ts +54 -3
  295. package/src/tools/get-analytics.ts +52 -46
  296. package/src/tools/get-dashboard.ts +1 -1
  297. package/src/tools/get-dataset.ts +34 -16
  298. package/src/tools/get-evaluator.ts +4 -11
  299. package/src/tools/get-experiment-results.ts +219 -186
  300. package/src/tools/get-project.ts +2 -4
  301. package/src/tools/get-prompt.ts +100 -37
  302. package/src/tools/get-run-plan.ts +60 -0
  303. package/src/tools/get-scenario.ts +6 -5
  304. package/src/tools/get-simulation-run.ts +32 -20
  305. package/src/tools/get-test-suite.ts +46 -0
  306. package/src/tools/get-trace.ts +16 -17
  307. package/src/tools/get-workflow.ts +1 -1
  308. package/src/tools/list-agents.ts +20 -3
  309. package/src/tools/list-annotations.ts +8 -5
  310. package/src/tools/list-api-keys.ts +7 -2
  311. package/src/tools/list-dashboard-boards.ts +28 -0
  312. package/src/tools/list-dashboards.ts +1 -1
  313. package/src/tools/list-dataset-records.ts +8 -6
  314. package/src/tools/list-datasets.ts +12 -23
  315. package/src/tools/list-evaluators.ts +4 -8
  316. package/src/tools/list-experiment-runs.ts +5 -9
  317. package/src/tools/list-experiments.ts +5 -11
  318. package/src/tools/list-model-providers.ts +3 -5
  319. package/src/tools/list-projects.ts +2 -4
  320. package/src/tools/list-prompt-tags.ts +3 -3
  321. package/src/tools/list-prompts.ts +4 -8
  322. package/src/tools/list-run-plans.ts +47 -0
  323. package/src/tools/list-scenarios.ts +26 -17
  324. package/src/tools/list-simulation-runs.ts +13 -5
  325. package/src/tools/list-test-suites.ts +35 -0
  326. package/src/tools/list-trigger-fires.ts +17 -0
  327. package/src/tools/list-triggers.ts +39 -0
  328. package/src/tools/list-workflows.ts +2 -4
  329. package/src/tools/rename-prompt-tag.ts +1 -1
  330. package/src/tools/rename-test-suite.ts +15 -0
  331. package/src/tools/report-issue.ts +5 -9
  332. package/src/tools/rerun-run-plan.ts +18 -0
  333. package/src/tools/revoke-api-key.ts +2 -4
  334. package/src/tools/run-agent.ts +65 -14
  335. package/src/tools/run-experiment.ts +36 -37
  336. package/src/tools/run-plan.ts +46 -0
  337. package/src/tools/run-query.ts +47 -0
  338. package/src/tools/run-test-suite.ts +27 -0
  339. package/src/tools/run-workflow.ts +2 -5
  340. package/src/tools/search-traces.ts +161 -47
  341. package/src/tools/set-model-provider.ts +4 -6
  342. package/src/tools/test-agent.ts +18 -0
  343. package/src/tools/update-agent.ts +1 -1
  344. package/src/tools/update-dashboard-widget.ts +97 -0
  345. package/src/tools/update-dataset-record.ts +1 -1
  346. package/src/tools/update-dataset.ts +5 -7
  347. package/src/tools/update-evaluator.ts +3 -5
  348. package/src/tools/update-project.ts +1 -1
  349. package/src/tools/update-prompt.ts +185 -15
  350. package/src/tools/update-scenario.ts +11 -5
  351. package/src/tools/update-test-suite.ts +40 -0
  352. package/src/utils/date-parsing.ts +1 -1
  353. package/src/utils/escape-markdown.ts +3 -8
  354. package/src/utils/format-evaluations.ts +6 -6
  355. package/src/utils/markdown-table.ts +58 -0
  356. package/src/utils/trace-id-shape.ts +20 -0
  357. package/tsconfig.app.json +24 -0
  358. package/tsconfig.json +19 -12
  359. package/uv.lock +416 -296
  360. package/vitest.integration.config.js +10 -0
  361. package/vitest.scenario.config.js +9 -0
  362. package/.eslintrc.cjs +0 -36
  363. package/dist/archive-suite-4T6BSRS7.js +0 -16
  364. package/dist/chunk-77BNWQ3U.js +0 -86
  365. package/dist/chunk-A2LEVYQ5.js +0 -217
  366. package/dist/chunk-TJCXFNDT.js +0 -24
  367. package/dist/chunk-YZLYHLLI.js +0 -48
  368. package/dist/config.d.ts +0 -17
  369. package/dist/create-mcp-server.d.ts +0 -10
  370. package/dist/create-suite-LZS6QIAF.js +0 -39
  371. package/dist/delete-evaluator-33SP2JFX.js +0 -16
  372. package/dist/discover-evaluator-schema-XTAD4X7D.js +0 -2191
  373. package/dist/discover-scenario-schema-FE64QK2D.js +0 -67
  374. package/dist/get-agent-Y7MWZ65F.js +0 -29
  375. package/dist/get-analytics-TETCSOK6.js +0 -73
  376. package/dist/get-dataset-RCMU5VAH.js +0 -49
  377. package/dist/get-prompt-OY5B7TRI.js +0 -46
  378. package/dist/get-suite-J7JVWO6O.js +0 -45
  379. package/dist/index.d.ts +0 -2
  380. package/dist/langwatch-api-secrets-BUBSNCNO.js +0 -41
  381. package/dist/langwatch-api-triggers-EDFUCJN6.js +0 -31
  382. package/dist/list-agents-KFHKGPXV.js +0 -33
  383. package/dist/list-scenarios-F2WYNRIE.js +0 -41
  384. package/dist/list-suites-CRY4VWW6.js +0 -43
  385. package/dist/report-issue-XYVAPAYJ.js +0 -412
  386. package/dist/run-suite-NKZCJ2IN.js +0 -30
  387. package/dist/search-traces-A6HFKPLJ.js +0 -79
  388. package/dist/update-prompt-ODCRQRN6.js +0 -25
  389. package/dist/update-suite-SNO3GS7T.js +0 -40
  390. package/src/__tests__/all-tools.integration.test.ts +0 -1626
  391. package/src/__tests__/config.unit.test.ts +0 -202
  392. package/src/__tests__/datasets.integration.test.ts +0 -620
  393. package/src/__tests__/datasets.unit.test.ts +0 -244
  394. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  395. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  396. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  397. package/src/__tests__/docker.integration.test.ts +0 -318
  398. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  399. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  400. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  401. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  402. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  403. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  404. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  405. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  406. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  407. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  408. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  409. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  410. package/src/__tests__/http-transport.integration.test.ts +0 -395
  411. package/src/__tests__/integration.integration.test.ts +0 -288
  412. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  413. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  414. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  415. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  416. package/src/__tests__/report-issue.integration.test.ts +0 -147
  417. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  418. package/src/__tests__/scenario-tools.unit.test.ts +0 -188
  419. package/src/__tests__/schemas.unit.test.ts +0 -85
  420. package/src/__tests__/support/http-server-harness.ts +0 -138
  421. package/src/__tests__/tools.unit.test.ts +0 -924
  422. package/src/langwatch-api-suites.ts +0 -118
  423. package/src/schemas/filter-fields.ts +0 -119
  424. package/src/schemas/index.ts +0 -4
  425. package/src/tools/archive-suite.ts +0 -12
  426. package/src/tools/create-suite.ts +0 -42
  427. package/src/tools/get-suite.ts +0 -47
  428. package/src/tools/list-suites.ts +0 -43
  429. package/src/tools/run-suite.ts +0 -28
  430. package/src/tools/update-suite.ts +0 -44
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-A2LEVYQ5.js";
3
+ } from "./chunk-UWLE5T2F.js";
4
+
5
+ // src/langwatch-api-agents.ts
6
+ import { z } from "zod";
4
7
 
5
8
  // src/public-http-request.ts
6
9
  import { lookup as dnsLookup } from "dns/promises";
@@ -8,7 +11,7 @@ import { request as httpRequest } from "http";
8
11
  import { request as httpsRequest } from "https";
9
12
  import { isIP } from "net";
10
13
 
11
- // ../../packages/ssrf/src/index.ts
14
+ // ../../packages/egress/src/ssrf/address.ts
12
15
  function ipv4ToBytes(input) {
13
16
  const parts = input.split(".");
14
17
  if (parts.length !== 4) return null;
@@ -21,6 +24,25 @@ function ipv4ToBytes(input) {
21
24
  }
22
25
  return bytes;
23
26
  }
27
+ function parseIpv6Groups(part) {
28
+ if (part === "") return [];
29
+ const out = [];
30
+ for (const group of part.split(":")) {
31
+ if (!/^[0-9a-fA-F]{1,4}$/.test(group)) return null;
32
+ out.push(parseInt(group, 16));
33
+ }
34
+ return out;
35
+ }
36
+ function expandIpv6Groups(halves) {
37
+ const head = parseIpv6Groups(halves[0]);
38
+ if (head === null) return null;
39
+ if (halves.length !== 2) return head;
40
+ const tail = parseIpv6Groups(halves[1]);
41
+ if (tail === null) return null;
42
+ const missing = 8 - head.length - tail.length;
43
+ if (missing < 0) return null;
44
+ return [...head, ...Array.from({ length: missing }, () => 0), ...tail];
45
+ }
24
46
  function ipv6ToBytes(input) {
25
47
  let s = input;
26
48
  const zone = s.indexOf("%");
@@ -36,27 +58,8 @@ function ipv6ToBytes(input) {
36
58
  }
37
59
  const halves = s.split("::");
38
60
  if (halves.length > 2) return null;
39
- const parseGroups = (part) => {
40
- if (part === "") return [];
41
- const out = [];
42
- for (const g of part.split(":")) {
43
- if (!/^[0-9a-fA-F]{1,4}$/.test(g)) return null;
44
- out.push(parseInt(g, 16));
45
- }
46
- return out;
47
- };
48
- const head = parseGroups(halves[0]);
49
- if (head === null) return null;
50
- let groups;
51
- if (halves.length === 2) {
52
- const tail = parseGroups(halves[1]);
53
- if (tail === null) return null;
54
- const missing = 8 - head.length - tail.length;
55
- if (missing < 0) return null;
56
- groups = [...head, ...new Array(missing).fill(0), ...tail];
57
- } else {
58
- groups = head;
59
- }
61
+ const groups = expandIpv6Groups(halves);
62
+ if (groups === null) return null;
60
63
  if (groups.length !== 8) return null;
61
64
  const bytes = new Uint8Array(16);
62
65
  for (let i = 0; i < 8; i++) {
@@ -68,24 +71,31 @@ function ipv6ToBytes(input) {
68
71
  function ipToBytes(ip) {
69
72
  return ip.includes(":") ? ipv6ToBytes(ip) : ipv4ToBytes(ip);
70
73
  }
74
+ function zeroBetween({
75
+ bytes,
76
+ from,
77
+ to
78
+ }) {
79
+ for (let i = from; i < to; i++) {
80
+ if (bytes[i] !== 0) return false;
81
+ }
82
+ return true;
83
+ }
71
84
  function unmap(bytes) {
72
85
  if (bytes.length !== 16) return bytes;
73
- for (let i = 0; i < 10; i++) {
74
- if (bytes[i] !== 0) return bytes;
75
- }
76
- if (bytes[10] === 255 && bytes[11] === 255) return bytes.slice(12, 16);
77
- return bytes;
86
+ if (!zeroBetween({ bytes, from: 0, to: 8 })) return bytes;
87
+ const mapped = zeroBetween({ bytes, from: 8, to: 10 }) && bytes[10] === 255 && bytes[11] === 255;
88
+ const compatible = zeroBetween({ bytes, from: 8, to: 12 });
89
+ const translated = bytes[8] === 255 && bytes[9] === 255 && zeroBetween({ bytes, from: 10, to: 12 });
90
+ return mapped || compatible || translated ? bytes.slice(12, 16) : bytes;
78
91
  }
79
92
  function parsePrefix({ cidr, rfc }) {
80
93
  const slash = cidr.lastIndexOf("/");
81
94
  const bytes = ipToBytes(cidr.slice(0, slash));
82
- if (!bytes) throw new Error(`@langwatch/ssrf: bad prefix ${cidr}`);
95
+ if (!bytes) throw new Error(`ssrf: bad prefix ${cidr}`);
83
96
  return { bytes, bits: Number(cidr.slice(slash + 1)), rfc };
84
97
  }
85
- function prefixContains({
86
- prefix,
87
- addr
88
- }) {
98
+ function prefixContains({ prefix, addr }) {
89
99
  if (prefix.bytes.length !== addr.length) return false;
90
100
  let bits = prefix.bits;
91
101
  let i = 0;
@@ -107,6 +117,10 @@ var METADATA_ADDRESSES = [
107
117
  // AWS ECS/Fargate task metadata
108
118
  "168.63.129.16",
109
119
  // Azure WireServer / host DNS
120
+ "100.100.100.200",
121
+ // Alibaba Cloud ECS metadata
122
+ "192.0.0.192",
123
+ // Oracle Cloud metadata
110
124
  "fd00:ec2::254"
111
125
  // AWS EC2 IMDS over IPv6
112
126
  ].map((ip) => {
@@ -172,12 +186,14 @@ function bytesEqual({ a, b }) {
172
186
  }
173
187
  return true;
174
188
  }
189
+ function isMetadataAddress(addr) {
190
+ return METADATA_ADDRESSES.some((m) => bytesEqual({ a: m, b: addr }));
191
+ }
175
192
  function classify(ip) {
176
193
  const raw = ipToBytes(ip);
177
194
  if (!raw) return "special";
178
195
  const addr = unmap(raw);
179
- if (METADATA_ADDRESSES.some((m) => bytesEqual({ a: m, b: addr })))
180
- return "metadata";
196
+ if (isMetadataAddress(addr)) return "metadata";
181
197
  for (const prefix of SPECIAL_PREFIXES) {
182
198
  if (prefixContains({ prefix, addr })) return "special";
183
199
  }
@@ -200,7 +216,9 @@ var SENSITIVE_REDIRECT_HEADERS = /* @__PURE__ */ new Set([
200
216
  "x-access-token"
201
217
  ]);
202
218
  function unsafeDestinationError() {
203
- return new Error("HTTP agent destinations must resolve only to globally routable public addresses");
219
+ return new Error(
220
+ "HTTP agent destinations must resolve only to globally routable public addresses"
221
+ );
204
222
  }
205
223
  function hostnameWithoutBrackets(hostname) {
206
224
  return hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
@@ -365,33 +383,101 @@ async function requestPublicJson(input, options = {}, redirectCount = 0) {
365
383
  }
366
384
 
367
385
  // src/langwatch-api-agents.ts
386
+ var agentCallParamsSchema = z.record(
387
+ z.string(),
388
+ z.union([z.string(), z.number(), z.boolean()])
389
+ );
368
390
  async function listAgents(params) {
369
391
  const query = new URLSearchParams();
370
392
  if (params?.page) query.set("page", String(params.page));
371
393
  if (params?.limit) query.set("limit", String(params.limit));
372
394
  const qs = query.toString() ? `?${query}` : "";
373
- return makeRequest("GET", `/api/agents${qs}`);
395
+ return makeRequest("GET", `/api/v1/agents${qs}`);
374
396
  }
375
397
  async function getAgent(id) {
376
- return makeRequest(
377
- "GET",
378
- `/api/agents/${encodeURIComponent(id)}`
379
- );
398
+ return makeRequest("GET", `/api/v1/agents/${encodeURIComponent(id)}`);
380
399
  }
381
400
  async function createAgent(data) {
382
- return makeRequest("POST", "/api/agents", data);
401
+ return makeRequest("POST", "/api/v1/agents", data);
383
402
  }
384
403
  async function updateAgent(params) {
385
404
  const { id, ...data } = params;
386
405
  return makeRequest(
387
406
  "PATCH",
388
- `/api/agents/${encodeURIComponent(id)}`,
407
+ `/api/v1/agents/${encodeURIComponent(id)}`,
389
408
  data
390
409
  );
391
410
  }
392
- async function runAgent(id, input) {
411
+ async function callAgent({
412
+ id,
413
+ body
414
+ }) {
415
+ return makeRequest(
416
+ "POST",
417
+ `/api/v1/agents/${encodeURIComponent(id)}/call`,
418
+ body
419
+ );
420
+ }
421
+ async function testAgent(id) {
422
+ return makeRequest(
423
+ "POST",
424
+ `/api/v1/agents/${encodeURIComponent(id)}/test`,
425
+ {}
426
+ );
427
+ }
428
+ var isMessageList = (value) => Array.isArray(value) && value.every(
429
+ (item) => typeof item === "object" && item !== null && typeof item.role === "string"
430
+ );
431
+ function buildRelayBody({
432
+ input,
433
+ message,
434
+ parameters,
435
+ threadId
436
+ }) {
437
+ let messages;
438
+ if (message !== void 0) {
439
+ messages = [{ role: "user", content: message }];
440
+ } else if (isMessageList(input.messages)) {
441
+ messages = input.messages;
442
+ } else {
443
+ return "a connected agent takes a conversation: give `message`, or `input` with a `messages` list.";
444
+ }
445
+ const body = { messages };
446
+ const thread = threadId ?? (typeof input.threadId === "string" ? input.threadId : void 0);
447
+ if (thread) body.threadId = thread;
448
+ if (isMessageList(input.newMessages)) body.newMessages = input.newMessages;
449
+ if (input.session !== void 0) body.session = input.session;
450
+ let inputParams;
451
+ if (input.params !== void 0) {
452
+ const parsed = agentCallParamsSchema.safeParse(input.params);
453
+ if (!parsed.success) {
454
+ return "`params` takes one flat object of string, number or boolean values. Nested objects and arrays are not run parameters.";
455
+ }
456
+ inputParams = parsed.data;
457
+ }
458
+ if (inputParams || parameters) body.params = { ...inputParams, ...parameters };
459
+ return body;
460
+ }
461
+ async function runAgent({
462
+ id,
463
+ input,
464
+ message,
465
+ parameters,
466
+ threadId
467
+ }) {
393
468
  const agent = await getAgent(id);
394
469
  const config = agent.config ?? {};
470
+ if (agent.type === "connected") {
471
+ const body = buildRelayBody({ input: input ?? {}, message, parameters, threadId });
472
+ if (typeof body === "string") throw new Error(body);
473
+ if (agent.status === "offline") {
474
+ throw new Error(
475
+ `Agent "${agent.name}" is offline. Start the process that calls connectAgent (or connect_agent) and try again.`
476
+ );
477
+ }
478
+ const result2 = await callAgent({ id: agent.id, body });
479
+ return { agentType: "connected", result: result2 };
480
+ }
395
481
  if (agent.type === "http") {
396
482
  const url = config.url;
397
483
  if (!url) {
@@ -407,18 +493,15 @@ async function runAgent(id, input) {
407
493
  const workflowId = config.workflowId;
408
494
  if (!workflowId) {
409
495
  throw new Error(
410
- `Agent "${agent.name}" (type: ${agent.type}) cannot be executed directly. Only HTTP agents and workflow-linked agents can be run.`
496
+ `Agent "${agent.name}" (type: ${agent.type}) cannot be executed directly. Only connected agents, HTTP agents and workflow-linked agents can be run.`
411
497
  );
412
498
  }
413
- const { runWorkflow } = await import("./langwatch-api-workflows-NBJX5KOG.js");
499
+ const { runWorkflow } = await import("./langwatch-api-workflows-OKC4FXIF.js");
414
500
  const result = await runWorkflow(workflowId, input);
415
501
  return { agentType: agent.type, result };
416
502
  }
417
503
  async function deleteAgent(id) {
418
- return makeRequest(
419
- "DELETE",
420
- `/api/agents/${encodeURIComponent(id)}`
421
- );
504
+ return makeRequest("DELETE", `/api/v1/agents/${encodeURIComponent(id)}`);
422
505
  }
423
506
 
424
507
  export {
@@ -426,7 +509,8 @@ export {
426
509
  getAgent,
427
510
  createAgent,
428
511
  updateAgent,
512
+ testAgent,
429
513
  runAgent,
430
514
  deleteAgent
431
515
  };
432
- //# sourceMappingURL=chunk-TOXJQDIZ.js.map
516
+ //# sourceMappingURL=chunk-HGELNIVY.js.map
@@ -79,7 +79,54 @@ function createRateLimiter({
79
79
  }
80
80
  };
81
81
  }
82
- var VERIFY_PATH = "/api/me/project";
82
+ var VERIFY_PATH = "/api/v1/me/project";
83
+ function sweepVerdicts(cache) {
84
+ const now = Date.now();
85
+ for (const [key, entry] of cache) {
86
+ if (now >= entry.expiresAt) cache.delete(key);
87
+ }
88
+ }
89
+ function rememberVerdict({
90
+ cache,
91
+ hashed,
92
+ valid,
93
+ maxEntries,
94
+ ttlMs
95
+ }) {
96
+ if (cache.size >= maxEntries) {
97
+ sweepVerdicts(cache);
98
+ while (cache.size >= maxEntries) {
99
+ const oldest = cache.keys().next();
100
+ if (oldest.done) break;
101
+ cache.delete(oldest.value);
102
+ }
103
+ }
104
+ cache.set(hashed, { valid, expiresAt: Date.now() + ttlMs });
105
+ }
106
+ async function askVerifyEndpoint({
107
+ endpoint,
108
+ apiKey,
109
+ fetchImpl,
110
+ requestTimeoutMs
111
+ }) {
112
+ let response;
113
+ try {
114
+ response = await fetchImpl(`${endpoint}${VERIFY_PATH}`, {
115
+ method: "GET",
116
+ headers: { "X-Auth-Token": apiKey },
117
+ // An upstream that accepts the connection and never answers would
118
+ // otherwise leave the in-flight promise unsettled, parking every
119
+ // request for this key behind it until the socket dies.
120
+ signal: AbortSignal.timeout(requestTimeoutMs)
121
+ });
122
+ } catch {
123
+ return null;
124
+ }
125
+ await response.body?.cancel().catch(() => void 0);
126
+ if (response.ok) return true;
127
+ if (response.status === 401 || response.status === 403) return false;
128
+ return null;
129
+ }
83
130
  function createApiKeyVerifier({
84
131
  endpoint,
85
132
  positiveTtlMs = 6e4,
@@ -90,45 +137,15 @@ function createApiKeyVerifier({
90
137
  }) {
91
138
  const cache = /* @__PURE__ */ new Map();
92
139
  const inFlight = /* @__PURE__ */ new Map();
93
- function sweep() {
94
- const now = Date.now();
95
- for (const [key, entry] of cache) {
96
- if (now >= entry.expiresAt) cache.delete(key);
97
- }
98
- }
99
- function remember(hashed, valid) {
100
- if (cache.size >= maxEntries) {
101
- sweep();
102
- while (cache.size >= maxEntries) {
103
- const oldest = cache.keys().next();
104
- if (oldest.done) break;
105
- cache.delete(oldest.value);
106
- }
107
- }
108
- cache.set(hashed, {
109
- valid,
110
- expiresAt: Date.now() + (valid ? positiveTtlMs : negativeTtlMs)
111
- });
112
- }
113
- async function askApi(apiKey) {
114
- let response;
115
- try {
116
- response = await fetchImpl(`${endpoint}${VERIFY_PATH}`, {
117
- method: "GET",
118
- headers: { "X-Auth-Token": apiKey },
119
- // An upstream that accepts the connection and never answers would
120
- // otherwise leave the in-flight promise unsettled, parking every
121
- // request for this key behind it until the socket dies.
122
- signal: AbortSignal.timeout(requestTimeoutMs)
123
- });
124
- } catch {
125
- return null;
126
- }
127
- await response.body?.cancel().catch(() => void 0);
128
- if (response.ok) return true;
129
- if (response.status === 401 || response.status === 403) return false;
130
- return null;
131
- }
140
+ const sweep = () => sweepVerdicts(cache);
141
+ const remember = (hashed, valid) => rememberVerdict({
142
+ cache,
143
+ hashed,
144
+ valid,
145
+ maxEntries,
146
+ ttlMs: valid ? positiveTtlMs : negativeTtlMs
147
+ });
148
+ const askApi = (apiKey) => askVerifyEndpoint({ endpoint, apiKey, fetchImpl, requestTimeoutMs });
132
149
  return {
133
150
  async verify(apiKey) {
134
151
  const hashed = hashApiKey(apiKey);
@@ -152,45 +169,55 @@ function createApiKeyVerifier({
152
169
  }
153
170
  };
154
171
  }
172
+ function releaseSlot({ countByKey }, apiKey) {
173
+ const hashed = hashApiKey(apiKey);
174
+ const next = (countByKey.get(hashed) ?? 1) - 1;
175
+ if (next <= 0) countByKey.delete(hashed);
176
+ else countByKey.set(hashed, next);
177
+ }
178
+ function dropSession({
179
+ table,
180
+ sessionId,
181
+ record
182
+ }) {
183
+ table.sessions.delete(sessionId);
184
+ releaseSlot(table, record.apiKey);
185
+ }
186
+ function reserveSlot({
187
+ table,
188
+ apiKey
189
+ }) {
190
+ const hashed = hashApiKey(apiKey);
191
+ table.countByKey.set(hashed, (table.countByKey.get(hashed) ?? 0) + 1);
192
+ let settled = false;
193
+ return {
194
+ commit({ sessionId, transport }) {
195
+ if (settled) return;
196
+ settled = true;
197
+ const existing = table.sessions.get(sessionId);
198
+ if (existing) dropSession({ table, sessionId, record: existing });
199
+ table.sessions.set(sessionId, {
200
+ transport,
201
+ apiKey,
202
+ lastActivityAt: Date.now()
203
+ });
204
+ },
205
+ release() {
206
+ if (settled) return;
207
+ settled = true;
208
+ releaseSlot(table, apiKey);
209
+ }
210
+ };
211
+ }
155
212
  function createSessionStore({
156
213
  maxAgeMs,
157
214
  closeTransport
158
215
  }) {
159
216
  const sessions = /* @__PURE__ */ new Map();
160
217
  const countByKey = /* @__PURE__ */ new Map();
161
- function decrement(apiKey) {
162
- const hashed = hashApiKey(apiKey);
163
- const next = (countByKey.get(hashed) ?? 1) - 1;
164
- if (next <= 0) countByKey.delete(hashed);
165
- else countByKey.set(hashed, next);
166
- }
167
- function drop(sessionId, record) {
168
- sessions.delete(sessionId);
169
- decrement(record.apiKey);
170
- }
171
- function reserve(apiKey) {
172
- const hashed = hashApiKey(apiKey);
173
- countByKey.set(hashed, (countByKey.get(hashed) ?? 0) + 1);
174
- let settled = false;
175
- return {
176
- commit({ sessionId, transport }) {
177
- if (settled) return;
178
- settled = true;
179
- const existing = sessions.get(sessionId);
180
- if (existing) drop(sessionId, existing);
181
- sessions.set(sessionId, {
182
- transport,
183
- apiKey,
184
- lastActivityAt: Date.now()
185
- });
186
- },
187
- release() {
188
- if (settled) return;
189
- settled = true;
190
- decrement(apiKey);
191
- }
192
- };
193
- }
218
+ const table = { sessions, countByKey };
219
+ const reserve = (apiKey) => reserveSlot({ table, apiKey });
220
+ const drop = (sessionId, record) => dropSession({ table, sessionId, record });
194
221
  return {
195
222
  get(sessionId) {
196
223
  return sessions.get(sessionId);
@@ -264,4 +291,4 @@ export {
264
291
  createSessionStore,
265
292
  admitOAuthToken
266
293
  };
267
- //# sourceMappingURL=chunk-UJPXFA26.js.map
294
+ //# sourceMappingURL=chunk-HHMNZAPD.js.map
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-A2LEVYQ5.js";
3
+ } from "./chunk-UWLE5T2F.js";
4
4
 
5
5
  // src/langwatch-api-scenarios.ts
6
6
  async function listScenarios() {
7
- return makeRequest("GET", "/api/scenarios");
7
+ return makeRequest("GET", "/api/v1/scenarios");
8
8
  }
9
9
  async function getScenario(id) {
10
10
  return makeRequest(
11
11
  "GET",
12
- `/api/scenarios/${encodeURIComponent(id)}`
12
+ `/api/v1/scenarios/${encodeURIComponent(id)}`
13
13
  );
14
14
  }
15
15
  async function createScenario(data) {
16
- return makeRequest("POST", "/api/scenarios", data);
16
+ return makeRequest("POST", "/api/v1/scenarios", data);
17
17
  }
18
18
  async function updateScenario(params) {
19
19
  const { id, ...data } = params;
20
20
  return makeRequest(
21
21
  "PUT",
22
- `/api/scenarios/${encodeURIComponent(id)}`,
22
+ `/api/v1/scenarios/${encodeURIComponent(id)}`,
23
23
  data
24
24
  );
25
25
  }
26
26
  async function archiveScenario(id) {
27
27
  return makeRequest(
28
28
  "DELETE",
29
- `/api/scenarios/${encodeURIComponent(id)}`
29
+ `/api/v1/scenarios/${encodeURIComponent(id)}`
30
30
  );
31
31
  }
32
32
 
@@ -37,4 +37,4 @@ export {
37
37
  updateScenario,
38
38
  archiveScenario
39
39
  };
40
- //# sourceMappingURL=chunk-J42FWRJ2.js.map
40
+ //# sourceMappingURL=chunk-I7ATIZED.js.map
@@ -1,32 +1,29 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-A2LEVYQ5.js";
3
+ } from "./chunk-UWLE5T2F.js";
4
4
 
5
5
  // src/langwatch-api-dashboards.ts
6
6
  async function listDashboards() {
7
- return makeRequest("GET", "/api/dashboards");
7
+ return makeRequest("GET", "/api/v1/dashboards");
8
8
  }
9
9
  async function getDashboard(id) {
10
10
  return makeRequest(
11
11
  "GET",
12
- `/api/dashboards/${encodeURIComponent(id)}`
12
+ `/api/v1/dashboards/${encodeURIComponent(id)}`
13
13
  );
14
14
  }
15
15
  async function createDashboard(data) {
16
- return makeRequest("POST", "/api/dashboards", data);
16
+ return makeRequest("POST", "/api/v1/dashboards", data);
17
17
  }
18
18
  async function renameDashboard(id, data) {
19
19
  return makeRequest(
20
20
  "PATCH",
21
- `/api/dashboards/${encodeURIComponent(id)}`,
21
+ `/api/v1/dashboards/${encodeURIComponent(id)}`,
22
22
  data
23
23
  );
24
24
  }
25
25
  async function deleteDashboard(id) {
26
- return makeRequest(
27
- "DELETE",
28
- `/api/dashboards/${encodeURIComponent(id)}`
29
- );
26
+ return makeRequest("DELETE", `/api/v1/dashboards/${encodeURIComponent(id)}`);
30
27
  }
31
28
 
32
29
  export {
@@ -36,4 +33,4 @@ export {
36
33
  renameDashboard,
37
34
  deleteDashboard
38
35
  };
39
- //# sourceMappingURL=chunk-AQJO2EI5.js.map
36
+ //# sourceMappingURL=chunk-ILZDO25L.js.map