@langwatch/mcp-server 2.1.0 → 3.0.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 (428) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +218 -201
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +70 -68
  6. package/dist/add-dashboard-widget-55UI6H22.js +44 -0
  7. package/dist/add-dashboard-widget-MJHIC3CC.js +45 -0
  8. package/dist/{archive-project-W3IKI7UL.js → archive-project-K5UD7A6X.js} +4 -4
  9. package/dist/archive-project-L4PAKT34.js +19 -0
  10. package/dist/{archive-run-plan-474OKHHU.js → archive-run-plan-5HSQG2HX.js} +4 -4
  11. package/dist/archive-run-plan-AOKNYQIO.js +15 -0
  12. package/dist/archive-scenario-2CWJW2VD.js +19 -0
  13. package/dist/{archive-scenario-V5UNYK26.js → archive-scenario-5IJQESHH.js} +4 -4
  14. package/dist/{archive-test-suite-O7FLDMXK.js → archive-test-suite-OPB7NFI7.js} +4 -4
  15. package/dist/archive-test-suite-ZC3TN6VH.js +15 -0
  16. package/dist/assign-prompt-tag-6DDE6ZZ5.js +23 -0
  17. package/dist/{assign-prompt-tag-Q46WRB6P.js → assign-prompt-tag-D7O23MJM.js} +8 -4
  18. package/dist/chunk-3YLN3ATJ.js +241 -0
  19. package/dist/{chunk-EYXMLE5X.js → chunk-4RX3G62A.js} +56 -47
  20. package/dist/{chunk-UF6XIGYR.js → chunk-6YZUOD34.js} +2 -5
  21. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  22. package/dist/chunk-7CZQDZ2K.js +319 -0
  23. package/dist/{chunk-RVAE2MEA.js → chunk-7GETGE6B.js} +7 -7
  24. package/dist/{chunk-OJLYYJWI.js → chunk-AASW2TO2.js} +7 -10
  25. package/dist/{chunk-QAMP3CGR.js → chunk-B4RFWIUP.js} +4 -4
  26. package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
  27. package/dist/{chunk-G4ZAZTZW.js → chunk-D2HS73VI.js} +7 -10
  28. package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
  29. package/dist/{chunk-WT4PO4A3.js → chunk-DULFP3MK.js} +10 -7
  30. package/dist/chunk-EYPJBL7P.js +516 -0
  31. package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
  32. package/dist/chunk-GA5JUSPT.js +64 -0
  33. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  34. package/dist/chunk-HLQJXUR6.js +67 -0
  35. package/dist/{chunk-JTQJRNFJ.js → chunk-KILVK3FS.js} +4 -4
  36. package/dist/chunk-MOCU5XWF.js +79 -0
  37. package/dist/chunk-O2WGVCED.js +41 -0
  38. package/dist/{chunk-HV4DWKBI.js → chunk-O7EMWEVJ.js} +2 -4
  39. package/dist/{chunk-UFOYFYI7.js → chunk-QXLMHLRC.js} +6 -9
  40. package/dist/{chunk-QRO35SOM.js → chunk-R5YJIYPF.js} +981 -747
  41. package/dist/{chunk-JR6DJZOU.js → chunk-RABYBFX5.js} +4 -10
  42. package/dist/{chunk-SR6QPRIE.js → chunk-RFC2SBEX.js} +7 -13
  43. package/dist/chunk-SHSVN3SE.js +21 -0
  44. package/dist/{chunk-CKNAH5TG.js → chunk-U24EACC4.js} +3 -10
  45. package/dist/{chunk-56OGTS24.js → chunk-VOUGDY2O.js} +4 -11
  46. package/dist/chunk-WCKZDOGF.js +31 -0
  47. package/dist/chunk-XQYH52SI.js +129 -0
  48. package/dist/{chunk-7E4FZIYJ.js → chunk-XUIJYNRJ.js} +1 -1
  49. package/dist/{chunk-6DJDEXET.js → chunk-YCIUEZVK.js} +6 -12
  50. package/dist/config-2WQGMAEN.js +16 -0
  51. package/dist/config.cjs +109 -0
  52. package/dist/config.js +5 -4
  53. package/dist/{create-agent-JFJ2K6X3.js → create-agent-6JNLMYQD.js} +4 -4
  54. package/dist/create-agent-IRZOU4R5.js +23 -0
  55. package/dist/create-analytics-report-N4L4V5QL.js +19 -0
  56. package/dist/create-analytics-report-QEHXG7FU.js +18 -0
  57. package/dist/{create-annotation-EUXXQ6NS.js → create-annotation-CCEGIZ67.js} +10 -5
  58. package/dist/create-annotation-DTHCMWHB.js +29 -0
  59. package/dist/{create-api-key-BGBB76JX.js → create-api-key-JKM2DSZO.js} +5 -7
  60. package/dist/create-api-key-JPEUIXGM.js +24 -0
  61. package/dist/create-dataset-DJNXYJ5B.js +22 -0
  62. package/dist/{create-dataset-FD5VAXU4.js → create-dataset-WON4SOTC.js} +6 -6
  63. package/dist/create-dataset-records-TMEOTLTO.js +20 -0
  64. package/dist/{create-dataset-records-WQUXXOHI.js → create-dataset-records-UJBW3C7C.js} +5 -7
  65. package/dist/create-evaluator-N5AEHI4K.js +27 -0
  66. package/dist/{create-evaluator-6NV33Z52.js → create-evaluator-XYNY2YFY.js} +4 -4
  67. package/dist/create-mcp-server.cjs +9712 -0
  68. package/dist/create-mcp-server.js +2757 -10
  69. package/dist/{create-project-ZQ7TFIO2.js → create-project-EY4XZ7TH.js} +4 -4
  70. package/dist/create-project-YL345T5L.js +44 -0
  71. package/dist/{create-prompt-BS6QRCUU.js → create-prompt-JZQNQ7I3.js} +5 -7
  72. package/dist/create-prompt-ZUMQHHX7.js +37 -0
  73. package/dist/create-prompt-tag-CJ5FZ436.js +17 -0
  74. package/dist/{create-prompt-tag-FCQ5ELSQ.js → create-prompt-tag-JFP2Q3PO.js} +3 -3
  75. package/dist/create-scenario-CQU2SSFB.js +33 -0
  76. package/dist/{create-scenario-DRPTPXU3.js → create-scenario-S6OWWKJO.js} +5 -5
  77. package/dist/create-test-suite-OLGCAGJA.js +36 -0
  78. package/dist/{create-test-suite-ZIZCCFJ4.js → create-test-suite-Y7P2RI4L.js} +6 -6
  79. package/dist/create-trigger-4CNBTISJ.js +48 -0
  80. package/dist/create-trigger-RQ653WYF.js +49 -0
  81. package/dist/dashboards-BA7M6CMO.js +90 -0
  82. package/dist/dashboards-U663GUIB.js +91 -0
  83. package/dist/{delete-agent-SA4JMUZF.js → delete-agent-J2Q4DRZ2.js} +4 -4
  84. package/dist/delete-agent-ZAU4LTXB.js +18 -0
  85. package/dist/delete-analytics-report-QK6X7P4S.js +19 -0
  86. package/dist/delete-analytics-report-YUYLDHLL.js +18 -0
  87. package/dist/delete-annotation-7X4NYXXM.js +17 -0
  88. package/dist/{delete-annotation-X3KKK7QY.js → delete-annotation-KJOCDLV3.js} +4 -4
  89. package/dist/{delete-dataset-W6EZ44HY.js → delete-dataset-NXP7ZPPV.js} +5 -7
  90. package/dist/delete-dataset-RUTZBBVD.js +18 -0
  91. package/dist/{delete-dataset-records-7CNOTALB.js → delete-dataset-records-4Z7DZCDW.js} +5 -7
  92. package/dist/delete-dataset-records-75UAR5IS.js +19 -0
  93. package/dist/delete-evaluator-E3CUNGTQ.js +16 -0
  94. package/dist/delete-evaluator-RI4GALGX.js +15 -0
  95. package/dist/delete-prompt-tag-LE3WJPKS.js +17 -0
  96. package/dist/{delete-prompt-tag-QB3OCZUV.js → delete-prompt-tag-S4KBZTNG.js} +3 -3
  97. package/dist/delete-workflow-4CZFIQCQ.js +17 -0
  98. package/dist/{delete-workflow-NG2VXYYM.js → delete-workflow-PWQPDW6H.js} +4 -4
  99. package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
  100. package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
  101. package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
  102. package/dist/{discover-scenario-schema-W7KBXA4J.js → discover-scenario-schema-OOFIQKOG.js} +37 -17
  103. package/dist/discover-schema-7WHIIATI.js +442 -0
  104. package/dist/{discover-schema-L6QDPON3.js → discover-schema-J2ANOBKO.js} +181 -186
  105. package/dist/get-agent-5T3CXQOR.js +69 -0
  106. package/dist/{get-agent-7THF7HCU.js → get-agent-ZKYQJUQ7.js} +15 -11
  107. package/dist/get-analytics-4MPEK4KV.js +79 -0
  108. package/dist/get-analytics-ZLI3A4F5.js +80 -0
  109. package/dist/get-analytics-report-JCKYMA2S.js +29 -0
  110. package/dist/get-analytics-report-SKIP2JWH.js +30 -0
  111. package/dist/get-dataset-APGZBYMH.js +64 -0
  112. package/dist/get-dataset-LWXDVMVE.js +63 -0
  113. package/dist/get-evaluator-3A7BJBAB.js +47 -0
  114. package/dist/{get-evaluator-RZ44UIN6.js → get-evaluator-IWNJINRY.js} +4 -4
  115. package/dist/get-project-EQVB4LEL.js +26 -0
  116. package/dist/{get-project-QSQEAB33.js → get-project-RK6AJTEP.js} +4 -4
  117. package/dist/{get-prompt-GVKXF5NL.js → get-prompt-TLG2T2DS.js} +53 -58
  118. package/dist/get-prompt-ZER557X3.js +94 -0
  119. package/dist/get-run-plan-5X7DDJRN.js +58 -0
  120. package/dist/{get-run-plan-NY7J5GRE.js → get-run-plan-PEHRO5M3.js} +7 -9
  121. package/dist/{get-scenario-Q3LLQE4T.js → get-scenario-375W5D6I.js} +5 -5
  122. package/dist/get-scenario-UQX45ZZO.js +37 -0
  123. package/dist/{get-simulation-run-WINEYDMK.js → get-simulation-run-2NBXJADG.js} +26 -22
  124. package/dist/get-simulation-run-QZTLGL7W.js +69 -0
  125. package/dist/{get-test-suite-4HKA7OKS.js → get-test-suite-GVIBDG7K.js} +5 -5
  126. package/dist/get-test-suite-OODIR3RI.js +48 -0
  127. package/dist/{get-trace-RCUV7N4O.js → get-trace-AGCHVPJK.js} +11 -13
  128. package/dist/get-trace-KJLYAZRC.js +45 -0
  129. package/dist/get-workflow-3TV2YYC5.js +25 -0
  130. package/dist/{get-workflow-EEOC7Y45.js → get-workflow-7LZSVPP2.js} +4 -4
  131. package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
  132. package/dist/{http-server-WCDUARTH.js → http-server-7CCN3EHJ.js} +4249 -325
  133. package/dist/index.js +59595 -38027
  134. package/dist/langwatch-api-analytics-reports-6CF6KUET.js +17 -0
  135. package/dist/langwatch-api-analytics-reports-RPFB5AO5.js +18 -0
  136. package/dist/{langwatch-api-annotations-6DHVZWUK.js → langwatch-api-annotations-H4AI4TKG.js} +4 -4
  137. package/dist/langwatch-api-annotations-QSJNUQQS.js +17 -0
  138. package/dist/langwatch-api-monitors-ENHLOL3S.js +47 -0
  139. package/dist/{langwatch-api-monitors-6ISFJ7WX.js → langwatch-api-monitors-OHSGADTH.js} +11 -16
  140. package/dist/langwatch-api-secrets-AGW6UUMD.js +55 -0
  141. package/dist/langwatch-api-secrets-CLTS766Q.js +56 -0
  142. package/dist/langwatch-api-triggers-G5UWFNN2.js +22 -0
  143. package/dist/langwatch-api-triggers-QMR7KEXW.js +23 -0
  144. package/dist/langwatch-api-workflows-HKTBIKKY.js +15 -0
  145. package/dist/{langwatch-api-workflows-6UJL5U4Z.js → langwatch-api-workflows-OMROZH2O.js} +4 -4
  146. package/dist/{list-agents-AMVDQPQL.js → list-agents-BYWDNAHT.js} +4 -4
  147. package/dist/list-agents-MG24MHZE.js +42 -0
  148. package/dist/list-analytics-reports-G3EPWGSQ.js +32 -0
  149. package/dist/list-analytics-reports-PPWIFRES.js +33 -0
  150. package/dist/list-annotations-QCLGEK5A.js +38 -0
  151. package/dist/{list-annotations-6PR5NLIC.js → list-annotations-Y4EUBJHG.js} +10 -5
  152. package/dist/list-api-keys-DAVOBPFK.js +42 -0
  153. package/dist/{list-api-keys-GVPNBIHQ.js → list-api-keys-JMW5WRXX.js} +10 -5
  154. package/dist/list-dashboards-2P3VJFRS.js +29 -0
  155. package/dist/list-dashboards-MW5O3MKH.js +30 -0
  156. package/dist/list-dataset-records-KEHT7G6Q.js +43 -0
  157. package/dist/{list-dataset-records-O67HZ35Y.js → list-dataset-records-KMLLMZAZ.js} +14 -10
  158. package/dist/{list-datasets-WXZL6UMP.js → list-datasets-P3JK2ZHS.js} +9 -13
  159. package/dist/list-datasets-Z7OOE4KI.js +56 -0
  160. package/dist/{list-evaluators-PAX72WCN.js → list-evaluators-7RRESBOU.js} +5 -7
  161. package/dist/list-evaluators-VATJVOHR.js +32 -0
  162. package/dist/{list-model-providers-VVLZMLCX.js → list-model-providers-OXDRPUCJ.js} +4 -4
  163. package/dist/list-model-providers-VXQJWDXU.js +35 -0
  164. package/dist/{list-projects-AQVI6SUK.js → list-projects-HUVK7L3W.js} +5 -7
  165. package/dist/list-projects-X72ZXVY5.js +40 -0
  166. package/dist/{list-prompt-tags-WZFBJOHG.js → list-prompt-tags-3I3LWFIR.js} +3 -3
  167. package/dist/list-prompt-tags-DRHUH2ND.js +23 -0
  168. package/dist/list-prompts-6DX3QECJ.js +30 -0
  169. package/dist/{list-prompts-BQOHRHYT.js → list-prompts-PS423RU3.js} +4 -6
  170. package/dist/list-run-plans-5SXPOV3X.js +45 -0
  171. package/dist/{list-run-plans-UBAU2DGH.js → list-run-plans-6VNHINPY.js} +5 -5
  172. package/dist/list-scenarios-EQWCW7Q4.js +45 -0
  173. package/dist/{list-scenarios-MS4IUIVM.js → list-scenarios-GKNH3YND.js} +13 -11
  174. package/dist/{list-simulation-runs-D6YF4ZOU.js → list-simulation-runs-KHY7KALI.js} +12 -8
  175. package/dist/list-simulation-runs-PUDK32C2.js +53 -0
  176. package/dist/list-test-suites-7H2DRILK.js +34 -0
  177. package/dist/{list-test-suites-L7R2O6DR.js → list-test-suites-GY56LGLY.js} +4 -4
  178. package/dist/list-trigger-fires-7RZUP54Y.js +19 -0
  179. package/dist/list-trigger-fires-OZUF65LI.js +20 -0
  180. package/dist/list-triggers-BGUCUXTJ.js +45 -0
  181. package/dist/list-triggers-XC5KMX4C.js +46 -0
  182. package/dist/list-workflows-55NYC3PC.js +33 -0
  183. package/dist/{list-workflows-6MV4XJHF.js → list-workflows-HV7FUWZA.js} +5 -7
  184. package/dist/{rename-prompt-tag-K5LQ4CY6.js → rename-prompt-tag-2I7Z5FCY.js} +3 -3
  185. package/dist/rename-prompt-tag-SZYTOWDX.js +18 -0
  186. package/dist/{rename-test-suite-NTYHAO5X.js → rename-test-suite-27AYY33K.js} +4 -4
  187. package/dist/rename-test-suite-CLIEPZDO.js +20 -0
  188. package/dist/report-issue-5HSL7CNB.js +924 -0
  189. package/dist/{report-issue-RHZZ33IS.js → report-issue-N7ND5TM6.js} +107 -67
  190. package/dist/{rerun-run-plan-MUDWJBE4.js → rerun-run-plan-O3VUZ6CG.js} +5 -5
  191. package/dist/rerun-run-plan-OJTVVGJI.js +21 -0
  192. package/dist/{revoke-api-key-6LAZ3QZZ.js → revoke-api-key-BU6BKGCG.js} +4 -4
  193. package/dist/revoke-api-key-NZNCFOIR.js +15 -0
  194. package/dist/run-agent-244O4Y5M.js +75 -0
  195. package/dist/run-agent-HPCGZGYW.js +74 -0
  196. package/dist/run-plan-2ZPGGZ4H.js +38 -0
  197. package/dist/{run-plan-T4ZYOZGA.js → run-plan-KSXUYQT3.js} +7 -7
  198. package/dist/run-query-4LMOQ5UW.js +47 -0
  199. package/dist/run-query-BQUHIUC2.js +46 -0
  200. package/dist/{run-test-suite-L4MZ7G4D.js → run-test-suite-P3WLVPXC.js} +6 -6
  201. package/dist/run-test-suite-UEOMCON6.js +25 -0
  202. package/dist/run-workflow-EFZ6HG5B.js +36 -0
  203. package/dist/{run-workflow-DFIS23AP.js → run-workflow-I4IHEN54.js} +4 -4
  204. package/dist/search-traces-6IR7PR4L.js +170 -0
  205. package/dist/search-traces-BYML2NQ4.js +171 -0
  206. package/dist/set-model-provider-RBNGWFVI.js +33 -0
  207. package/dist/{set-model-provider-XRNMFOVR.js → set-model-provider-SHEVKWRC.js} +4 -4
  208. package/dist/{update-agent-DUWNYBNA.js → update-agent-PTKTM2B5.js} +4 -4
  209. package/dist/update-agent-ZPXWRMS2.js +20 -0
  210. package/dist/update-dashboard-widget-HKCBXH7X.js +62 -0
  211. package/dist/update-dashboard-widget-IP2TTQ5G.js +63 -0
  212. package/dist/update-dataset-GHIN6JR3.js +22 -0
  213. package/dist/{update-dataset-YSOMDCOB.js → update-dataset-IRVMY5PF.js} +6 -6
  214. package/dist/update-dataset-record-6VI7K2CL.js +19 -0
  215. package/dist/{update-dataset-record-DEA2ITYR.js → update-dataset-record-Z3L7ACNF.js} +4 -4
  216. package/dist/update-evaluator-5NLNE6VY.js +24 -0
  217. package/dist/{update-evaluator-NH7Q5GWV.js → update-evaluator-FEH7H6NS.js} +4 -4
  218. package/dist/update-project-75H3LDQT.js +24 -0
  219. package/dist/{update-project-Q26FBSYH.js → update-project-QPR3QX55.js} +4 -4
  220. package/dist/update-prompt-BCDFTNLK.js +140 -0
  221. package/dist/{update-prompt-ZQQ2C3KU.js → update-prompt-NPRXYSWA.js} +27 -29
  222. package/dist/update-scenario-BNOMDCMV.js +34 -0
  223. package/dist/{update-scenario-WUX34JAR.js → update-scenario-EM5XGMB7.js} +5 -5
  224. package/package.json +35 -39
  225. package/pyproject.toml +23 -8
  226. package/src/config.d.ts +6 -0
  227. package/src/config.ts +22 -29
  228. package/src/create-mcp-server.ts +887 -634
  229. package/src/documentation-fetch.ts +21 -20
  230. package/src/http-security.ts +166 -135
  231. package/src/http-server.ts +189 -224
  232. package/src/index.ts +14 -16
  233. package/src/langwatch-api-agents.ts +18 -21
  234. package/src/langwatch-api-analytics-reports.ts +62 -0
  235. package/src/langwatch-api-annotations.ts +11 -12
  236. package/src/langwatch-api-api-keys.ts +8 -9
  237. package/src/langwatch-api-dashboard-widgets.ts +47 -0
  238. package/src/langwatch-api-dashboards.ts +109 -24
  239. package/src/langwatch-api-datasets.ts +98 -32
  240. package/src/langwatch-api-evaluators.ts +13 -19
  241. package/src/langwatch-api-model-providers.ts +4 -4
  242. package/src/langwatch-api-monitors.ts +14 -18
  243. package/src/langwatch-api-projects.ts +10 -9
  244. package/src/langwatch-api-query.ts +114 -0
  245. package/src/langwatch-api-run-plans.ts +12 -29
  246. package/src/langwatch-api-scenarios.ts +9 -11
  247. package/src/langwatch-api-secrets.ts +31 -24
  248. package/src/langwatch-api-simulation-runs.ts +6 -8
  249. package/src/langwatch-api-test-suites.ts +14 -33
  250. package/src/langwatch-api-triggers.ts +96 -34
  251. package/src/langwatch-api-workflows.ts +9 -9
  252. package/src/langwatch-api.ts +118 -124
  253. package/src/public-http-request.ts +21 -12
  254. package/src/schemas/analytics-metrics.ts +3 -15
  255. package/src/schemas/create-dataset.ts +3 -4
  256. package/src/schemas/run-plan.ts +13 -29
  257. package/src/schemas/suite-fields.ts +6 -23
  258. package/src/schemas/triggers.ts +365 -0
  259. package/src/schemas/widget-sources.ts +33 -0
  260. package/src/tools/add-dashboard-widget.ts +51 -0
  261. package/src/tools/archive-project.ts +2 -4
  262. package/src/tools/archive-run-plan.ts +2 -4
  263. package/src/tools/archive-scenario.ts +2 -4
  264. package/src/tools/archive-test-suite.ts +2 -4
  265. package/src/tools/assign-prompt-tag.ts +6 -2
  266. package/src/tools/create-agent.ts +1 -1
  267. package/src/tools/create-analytics-report.ts +7 -0
  268. package/src/tools/create-annotation.ts +7 -2
  269. package/src/tools/create-api-key.ts +4 -6
  270. package/src/tools/create-dataset-records.ts +4 -8
  271. package/src/tools/create-dataset.ts +5 -7
  272. package/src/tools/create-evaluator.ts +3 -5
  273. package/src/tools/create-project.ts +2 -2
  274. package/src/tools/create-prompt-tag.ts +2 -4
  275. package/src/tools/create-prompt.ts +9 -18
  276. package/src/tools/create-scenario.ts +5 -7
  277. package/src/tools/create-test-suite.ts +4 -9
  278. package/src/tools/create-trigger.ts +55 -0
  279. package/src/tools/dashboard-widget-queries.ts +45 -0
  280. package/src/tools/dashboards.ts +104 -0
  281. package/src/tools/delete-agent.ts +1 -1
  282. package/src/tools/delete-analytics-report.ts +7 -0
  283. package/src/tools/delete-annotation.ts +1 -1
  284. package/src/tools/delete-dataset-records.ts +4 -8
  285. package/src/tools/delete-dataset.ts +3 -7
  286. package/src/tools/delete-evaluator.ts +4 -6
  287. package/src/tools/delete-prompt-tag.ts +2 -4
  288. package/src/tools/delete-workflow.ts +1 -1
  289. package/src/tools/discover-evaluator-schema.ts +34 -25
  290. package/src/tools/discover-scenario-schema.ts +41 -21
  291. package/src/tools/discover-schema.ts +149 -27
  292. package/src/tools/experiment-run-status.ts +2 -8
  293. package/src/tools/format-dataset-mutation.ts +5 -10
  294. package/src/tools/format-run-plan.ts +7 -21
  295. package/src/tools/format-scenario.ts +2 -4
  296. package/src/tools/format-suite-details.ts +6 -12
  297. package/src/tools/get-agent.ts +15 -6
  298. package/src/tools/get-analytics-report.ts +23 -0
  299. package/src/tools/get-analytics.ts +52 -46
  300. package/src/tools/get-dataset.ts +34 -16
  301. package/src/tools/get-evaluator.ts +4 -11
  302. package/src/tools/get-experiment-results.ts +219 -186
  303. package/src/tools/get-project.ts +2 -4
  304. package/src/tools/get-prompt.ts +63 -84
  305. package/src/tools/get-run-plan.ts +4 -6
  306. package/src/tools/get-scenario.ts +4 -6
  307. package/src/tools/get-simulation-run.ts +27 -24
  308. package/src/tools/get-test-suite.ts +2 -5
  309. package/src/tools/get-trace.ts +16 -17
  310. package/src/tools/get-workflow.ts +1 -1
  311. package/src/tools/list-agents.ts +1 -1
  312. package/src/tools/list-analytics-reports.ts +27 -0
  313. package/src/tools/list-annotations.ts +8 -5
  314. package/src/tools/list-api-keys.ts +7 -2
  315. package/src/tools/list-dashboards.ts +20 -21
  316. package/src/tools/list-dataset-records.ts +8 -6
  317. package/src/tools/list-datasets.ts +12 -23
  318. package/src/tools/list-evaluators.ts +4 -8
  319. package/src/tools/list-experiment-runs.ts +5 -9
  320. package/src/tools/list-experiments.ts +5 -11
  321. package/src/tools/list-model-providers.ts +3 -5
  322. package/src/tools/list-projects.ts +2 -4
  323. package/src/tools/list-prompt-tags.ts +3 -3
  324. package/src/tools/list-prompts.ts +4 -8
  325. package/src/tools/list-run-plans.ts +2 -2
  326. package/src/tools/list-scenarios.ts +14 -15
  327. package/src/tools/list-simulation-runs.ts +8 -4
  328. package/src/tools/list-test-suites.ts +1 -1
  329. package/src/tools/list-trigger-fires.ts +17 -0
  330. package/src/tools/list-triggers.ts +39 -0
  331. package/src/tools/list-workflows.ts +2 -4
  332. package/src/tools/rename-prompt-tag.ts +1 -1
  333. package/src/tools/rename-test-suite.ts +2 -5
  334. package/src/tools/report-issue.ts +7 -9
  335. package/src/tools/rerun-run-plan.ts +2 -5
  336. package/src/tools/revoke-api-key.ts +2 -4
  337. package/src/tools/run-agent.ts +29 -26
  338. package/src/tools/run-experiment.ts +37 -34
  339. package/src/tools/run-plan.ts +4 -7
  340. package/src/tools/run-query.ts +47 -0
  341. package/src/tools/run-test-suite.ts +4 -7
  342. package/src/tools/run-workflow.ts +2 -5
  343. package/src/tools/search-traces.ts +161 -47
  344. package/src/tools/set-model-provider.ts +4 -6
  345. package/src/tools/test-agent.ts +2 -2
  346. package/src/tools/update-agent.ts +1 -1
  347. package/src/tools/update-dashboard-widget.ts +86 -0
  348. package/src/tools/update-dataset-record.ts +1 -1
  349. package/src/tools/update-dataset.ts +5 -7
  350. package/src/tools/update-evaluator.ts +3 -5
  351. package/src/tools/update-project.ts +1 -1
  352. package/src/tools/update-prompt.ts +44 -59
  353. package/src/tools/update-scenario.ts +5 -7
  354. package/src/tools/update-test-suite.ts +6 -11
  355. package/src/utils/date-parsing.ts +1 -1
  356. package/src/utils/escape-markdown.ts +3 -8
  357. package/src/utils/format-evaluations.ts +6 -6
  358. package/src/utils/markdown-table.ts +58 -0
  359. package/src/utils/trace-id-shape.ts +20 -0
  360. package/tsconfig.app.json +24 -0
  361. package/tsconfig.json +14 -12
  362. package/uv.lock +667 -341
  363. package/vitest.integration.config.js +10 -0
  364. package/vitest.scenario.config.js +9 -0
  365. package/.eslintrc.cjs +0 -36
  366. package/dist/chunk-AN4OUA4D.js +0 -86
  367. package/dist/chunk-GELJ2MQR.js +0 -226
  368. package/dist/chunk-K37ZNPXK.js +0 -24
  369. package/dist/chunk-S4GVX36W.js +0 -39
  370. package/dist/config.d.ts +0 -17
  371. package/dist/create-dashboard-Z76AIPLS.js +0 -19
  372. package/dist/create-mcp-server.d.ts +0 -10
  373. package/dist/delete-dashboard-LYMRPF27.js +0 -19
  374. package/dist/delete-evaluator-RKYC4TNB.js +0 -16
  375. package/dist/discover-evaluator-schema-ESSHQGPY.js +0 -1912
  376. package/dist/get-analytics-R6AZD3AW.js +0 -73
  377. package/dist/get-dashboard-P4WWVHFU.js +0 -30
  378. package/dist/get-dataset-AKTYSQDI.js +0 -49
  379. package/dist/index.d.ts +0 -2
  380. package/dist/langwatch-api-dashboards-2KJL2M42.js +0 -18
  381. package/dist/langwatch-api-secrets-OEBD6GBU.js +0 -41
  382. package/dist/langwatch-api-triggers-5E6DDGX6.js +0 -31
  383. package/dist/list-dashboards-Z3BZKDGF.js +0 -33
  384. package/dist/run-agent-CAGWGTYT.js +0 -72
  385. package/dist/search-traces-4XTJYXIK.js +0 -79
  386. package/src/__tests__/agent-tools.unit.test.ts +0 -257
  387. package/src/__tests__/all-tools.integration.test.ts +0 -1872
  388. package/src/__tests__/config.unit.test.ts +0 -202
  389. package/src/__tests__/datasets.integration.test.ts +0 -620
  390. package/src/__tests__/datasets.unit.test.ts +0 -244
  391. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  392. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  393. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  394. package/src/__tests__/docker.integration.test.ts +0 -318
  395. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  396. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  397. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  398. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  399. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  400. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  401. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  402. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  403. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  404. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  405. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  406. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  407. package/src/__tests__/http-transport.integration.test.ts +0 -395
  408. package/src/__tests__/integration.integration.test.ts +0 -284
  409. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  410. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  411. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  412. package/src/__tests__/prompt-response-types.unit.test.ts +0 -51
  413. package/src/__tests__/prompts.integration.test.ts +0 -736
  414. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  415. package/src/__tests__/report-issue.integration.test.ts +0 -147
  416. package/src/__tests__/run-plan-tools.unit.test.ts +0 -565
  417. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  418. package/src/__tests__/scenario-tools.unit.test.ts +0 -207
  419. package/src/__tests__/schemas.unit.test.ts +0 -85
  420. package/src/__tests__/simulation-run-tools.unit.test.ts +0 -116
  421. package/src/__tests__/support/http-server-harness.ts +0 -138
  422. package/src/__tests__/test-suite-tools.unit.test.ts +0 -615
  423. package/src/__tests__/tools.integration.test.ts +0 -896
  424. package/src/schemas/filter-fields.ts +0 -119
  425. package/src/schemas/index.ts +0 -9
  426. package/src/tools/create-dashboard.ts +0 -7
  427. package/src/tools/delete-dashboard.ts +0 -7
  428. package/src/tools/get-dashboard.ts +0 -22
@@ -1,4 +1,4 @@
1
- import { makeRequest } from "./langwatch-api.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
2
 
3
3
  // --- Evaluator types ---
4
4
 
@@ -13,8 +13,8 @@ export interface EvaluatorSummary {
13
13
  copiedFromEvaluatorId: string | null;
14
14
  createdAt: string;
15
15
  updatedAt: string;
16
- fields: Array<{ identifier: string; type: string; optional?: boolean }>;
17
- outputFields: Array<{ identifier: string; type: string; optional?: boolean }>;
16
+ fields: { identifier: string; type: string; optional?: boolean }[];
17
+ outputFields: { identifier: string; type: string; optional?: boolean }[];
18
18
  workflowName?: string;
19
19
  workflowIcon?: string;
20
20
  }
@@ -25,25 +25,22 @@ export interface EvaluatorSummary {
25
25
  * Extracts the evaluatorType from an evaluator's config.
26
26
  * Centralises the cast so callers don't repeat it.
27
27
  */
28
- export function getEvaluatorType(
29
- evaluator: Pick<EvaluatorSummary, "config">,
30
- ): string | undefined {
31
- return (evaluator.config as Record<string, unknown> | null)
32
- ?.evaluatorType as string | undefined;
28
+ export function getEvaluatorType(evaluator: Pick<EvaluatorSummary, "config">): string | undefined {
29
+ return (evaluator.config as Record<string, unknown> | null)?.evaluatorType as string | undefined;
33
30
  }
34
31
 
35
32
  // --- Evaluator API functions ---
36
33
 
37
34
  /** Lists all evaluators in the project. */
38
35
  export async function listEvaluators(): Promise<EvaluatorSummary[]> {
39
- return makeRequest("GET", "/api/evaluators") as Promise<EvaluatorSummary[]>;
36
+ return makeRequest("GET", "/api/v1/evaluators") as Promise<EvaluatorSummary[]>;
40
37
  }
41
38
 
42
39
  /** Retrieves a single evaluator by ID or slug. */
43
40
  export async function getEvaluator(idOrSlug: string): Promise<EvaluatorSummary> {
44
41
  return makeRequest(
45
42
  "GET",
46
- `/api/evaluators/${encodeURIComponent(idOrSlug)}`,
43
+ `/api/v1/evaluators/${encodeURIComponent(idOrSlug)}`,
47
44
  ) as Promise<EvaluatorSummary>;
48
45
  }
49
46
 
@@ -52,7 +49,7 @@ export async function createEvaluator(data: {
52
49
  name: string;
53
50
  config: Record<string, unknown>;
54
51
  }): Promise<EvaluatorSummary> {
55
- return makeRequest("POST", "/api/evaluators", data) as Promise<EvaluatorSummary>;
52
+ return makeRequest("POST", "/api/v1/evaluators", data) as Promise<EvaluatorSummary>;
56
53
  }
57
54
 
58
55
  /** Updates an existing evaluator. */
@@ -64,17 +61,14 @@ export async function updateEvaluator(params: {
64
61
  const { id, ...data } = params;
65
62
  return makeRequest(
66
63
  "PUT",
67
- `/api/evaluators/${encodeURIComponent(id)}`,
64
+ `/api/v1/evaluators/${encodeURIComponent(id)}`,
68
65
  data,
69
66
  ) as Promise<EvaluatorSummary>;
70
67
  }
71
68
 
72
69
  /** Archives (soft-deletes) an evaluator. */
73
- export async function deleteEvaluator(
74
- idOrSlug: string,
75
- ): Promise<{ id: string; archived: boolean }> {
76
- return makeRequest(
77
- "DELETE",
78
- `/api/evaluators/${encodeURIComponent(idOrSlug)}`,
79
- ) as Promise<{ id: string; archived: boolean }>;
70
+ export async function deleteEvaluator(idOrSlug: string): Promise<{ success: boolean }> {
71
+ return makeRequest("DELETE", `/api/v1/evaluators/${encodeURIComponent(idOrSlug)}`) as Promise<{
72
+ success: boolean;
73
+ }>;
80
74
  }
@@ -1,4 +1,4 @@
1
- import { makeRequest } from "./langwatch-api.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
2
 
3
3
  // --- Model Provider types ---
4
4
 
@@ -13,14 +13,14 @@ export interface ModelProviderEntry {
13
13
  customEmbeddingsModels?: unknown[] | null;
14
14
  disabledByDefault?: boolean;
15
15
  deploymentMapping?: unknown;
16
- extraHeaders?: Array<{ key: string; value: string }> | null;
16
+ extraHeaders?: { key: string; value: string }[] | null;
17
17
  }
18
18
 
19
19
  // --- Model Provider API functions ---
20
20
 
21
21
  /** Lists all model providers for the project, with masked API keys. */
22
22
  export async function listModelProviders(): Promise<Record<string, ModelProviderEntry>> {
23
- return makeRequest("GET", "/api/model-providers") as Promise<
23
+ return makeRequest("GET", "/api/v1/model-providers") as Promise<
24
24
  Record<string, ModelProviderEntry>
25
25
  >;
26
26
  }
@@ -35,7 +35,7 @@ export async function setModelProvider(params: {
35
35
  const { provider, ...data } = params;
36
36
  return makeRequest(
37
37
  "PUT",
38
- `/api/model-providers/${encodeURIComponent(provider)}`,
38
+ `/api/v1/model-providers/${encodeURIComponent(provider)}`,
39
39
  data,
40
40
  ) as Promise<Record<string, ModelProviderEntry>>;
41
41
  }
@@ -1,4 +1,4 @@
1
- import { makeRequest } from "./langwatch-api.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
2
 
3
3
  export interface MonitorSummary {
4
4
  id: string;
@@ -19,13 +19,13 @@ export interface MonitorSummary {
19
19
  }
20
20
 
21
21
  export async function listMonitors(): Promise<MonitorSummary[]> {
22
- return makeRequest("GET", "/api/monitors") as Promise<MonitorSummary[]>;
22
+ return makeRequest("GET", "/api/v1/monitors") as Promise<MonitorSummary[]>;
23
23
  }
24
24
 
25
25
  export async function getMonitor(id: string): Promise<MonitorSummary> {
26
26
  return makeRequest(
27
27
  "GET",
28
- `/api/monitors/${encodeURIComponent(id)}`
28
+ `/api/v1/monitors/${encodeURIComponent(id)}`,
29
29
  ) as Promise<MonitorSummary>;
30
30
  }
31
31
 
@@ -38,7 +38,7 @@ export async function createMonitor(data: {
38
38
  level?: string;
39
39
  parameters?: Record<string, unknown>;
40
40
  }): Promise<MonitorSummary> {
41
- return makeRequest("POST", "/api/monitors", {
41
+ return makeRequest("POST", "/api/v1/monitors", {
42
42
  ...data,
43
43
  preconditions: [],
44
44
  parameters: data.parameters ?? {},
@@ -56,8 +56,8 @@ export async function updateMonitor(params: {
56
56
  const { id, ...data } = params;
57
57
  return makeRequest(
58
58
  "PATCH",
59
- `/api/monitors/${encodeURIComponent(id)}`,
60
- data
59
+ `/api/v1/monitors/${encodeURIComponent(id)}`,
60
+ data,
61
61
  ) as Promise<MonitorSummary>;
62
62
  }
63
63
 
@@ -65,18 +65,14 @@ export async function toggleMonitor(params: {
65
65
  id: string;
66
66
  enabled: boolean;
67
67
  }): Promise<{ id: string; enabled: boolean }> {
68
- return makeRequest(
69
- "POST",
70
- `/api/monitors/${encodeURIComponent(params.id)}/toggle`,
71
- { enabled: params.enabled }
72
- ) as Promise<{ id: string; enabled: boolean }>;
68
+ return makeRequest("POST", `/api/v1/monitors/${encodeURIComponent(params.id)}/toggle`, {
69
+ enabled: params.enabled,
70
+ }) as Promise<{ id: string; enabled: boolean }>;
73
71
  }
74
72
 
75
- export async function deleteMonitor(
76
- id: string
77
- ): Promise<{ id: string; deleted: boolean }> {
78
- return makeRequest(
79
- "DELETE",
80
- `/api/monitors/${encodeURIComponent(id)}`
81
- ) as Promise<{ id: string; deleted: boolean }>;
73
+ export async function deleteMonitor(id: string): Promise<{ id: string; deleted: boolean }> {
74
+ return makeRequest("DELETE", `/api/v1/monitors/${encodeURIComponent(id)}`) as Promise<{
75
+ id: string;
76
+ deleted: boolean;
77
+ }>;
82
78
  }
@@ -1,4 +1,4 @@
1
- import { makeRequest } from "./langwatch-api.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
2
 
3
3
  export interface ProjectSummary {
4
4
  id: string;
@@ -35,13 +35,13 @@ export async function listProjects(params?: {
35
35
  if (params?.page) query.set("page", String(params.page));
36
36
  if (params?.limit) query.set("limit", String(params.limit));
37
37
  const qs = query.toString() ? `?${query}` : "";
38
- return makeRequest("GET", `/api/projects${qs}`) as Promise<ProjectListResponse>;
38
+ return makeRequest("GET", `/api/v1/projects${qs}`) as Promise<ProjectListResponse>;
39
39
  }
40
40
 
41
41
  export async function getProject(id: string): Promise<ProjectSummary> {
42
42
  return makeRequest(
43
43
  "GET",
44
- `/api/projects/${encodeURIComponent(id)}`,
44
+ `/api/v1/projects/${encodeURIComponent(id)}`,
45
45
  ) as Promise<ProjectSummary>;
46
46
  }
47
47
 
@@ -52,7 +52,7 @@ export async function createProject(data: {
52
52
  teamId?: string;
53
53
  newTeamName?: string;
54
54
  }): Promise<ProjectCreateResponse> {
55
- return makeRequest("POST", "/api/projects", data) as Promise<ProjectCreateResponse>;
55
+ return makeRequest("POST", "/api/v1/projects", data) as Promise<ProjectCreateResponse>;
56
56
  }
57
57
 
58
58
  export async function updateProject(params: {
@@ -65,7 +65,7 @@ export async function updateProject(params: {
65
65
  const { id, ...data } = params;
66
66
  return makeRequest(
67
67
  "PATCH",
68
- `/api/projects/${encodeURIComponent(id)}`,
68
+ `/api/v1/projects/${encodeURIComponent(id)}`,
69
69
  data,
70
70
  ) as Promise<ProjectSummary>;
71
71
  }
@@ -75,8 +75,9 @@ export async function archiveProject(id: string): Promise<{
75
75
  name: string;
76
76
  archivedAt: string;
77
77
  }> {
78
- return makeRequest(
79
- "DELETE",
80
- `/api/projects/${encodeURIComponent(id)}`,
81
- ) as Promise<{ id: string; name: string; archivedAt: string }>;
78
+ return makeRequest("DELETE", `/api/v1/projects/${encodeURIComponent(id)}`) as Promise<{
79
+ id: string;
80
+ name: string;
81
+ archivedAt: string;
82
+ }>;
82
83
  }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * The query family: the analytics SQL door and the reference describing both query languages.
3
+ * Fetched, replacing a hand-copied field list that drifted, so this server cannot describe a
4
+ * missing field.
5
+ * @see specs/mcp-server/schema-discovery.feature
6
+ */
7
+
8
+ import { makeRequest } from "./langwatch-api.ts";
9
+
10
+ /** One column of a query result. */
11
+ export interface QueryResultColumn {
12
+ name: string;
13
+ type: string;
14
+ }
15
+
16
+ /** What `POST /api/v1/query` answers with. */
17
+ export interface QueryRunResponse {
18
+ columns: QueryResultColumn[];
19
+ rows: Record<string, unknown>[];
20
+ statistics: {
21
+ elapsedMs: number;
22
+ rowsRead: number;
23
+ bytesRead: number;
24
+ rowsReturned: number;
25
+ };
26
+ truncated: boolean;
27
+ diagnostics: { code: string; message: string }[];
28
+ }
29
+
30
+ /** One published dataset. */
31
+ export interface QueryReferenceView {
32
+ name: string;
33
+ description: string;
34
+ grain: string;
35
+ joinKeys: string[];
36
+ timeColumn: string;
37
+ freshness: string;
38
+ columns: {
39
+ name: string;
40
+ type: string;
41
+ description: string;
42
+ unit: string | null;
43
+ gates: string[];
44
+ available: boolean;
45
+ }[];
46
+ exampleSql: string;
47
+ }
48
+
49
+ /** One worked query, in either language. */
50
+ export interface QueryReferenceExample {
51
+ id: string;
52
+ title: string;
53
+ intent: string;
54
+ language: "lwql" | "trace-filter";
55
+ tags: string[];
56
+ text: string;
57
+ parameters: { name: string; type: string; description: string }[];
58
+ requires: { gates: string[]; functions: string[] };
59
+ available: boolean;
60
+ notes?: string;
61
+ }
62
+
63
+ /** What `GET /api/v1/query/reference` answers with. */
64
+ export interface QueryReferenceResponse {
65
+ version: string;
66
+ lwql: {
67
+ enabled: boolean;
68
+ schema: { database: string; views: QueryReferenceView[] };
69
+ limits: {
70
+ maxStatementLength: number;
71
+ maxRowsReturned: number;
72
+ maxResultBytes: number;
73
+ maxExecutionTimeSeconds: number;
74
+ pagination: string;
75
+ };
76
+ endpoints: { method: string; path: string; description: string }[];
77
+ };
78
+ traceFilter: {
79
+ syntax: string;
80
+ fields: {
81
+ name: string;
82
+ label: string;
83
+ valueType: string;
84
+ group: string | null;
85
+ facetable: boolean;
86
+ knownValues: string[];
87
+ }[];
88
+ dynamicPrefixes: {
89
+ prefix: string;
90
+ label: string;
91
+ description: string;
92
+ aliases: string[];
93
+ }[];
94
+ endpoints: { method: string; path: string; description: string }[];
95
+ };
96
+ examples: QueryReferenceExample[];
97
+ decisionTable: { when: string; use: string; why: string }[];
98
+ }
99
+
100
+ /** Runs one read-only LangWatchQL statement, as written. */
101
+ export async function runQuery(params: {
102
+ sql: string;
103
+ parameters?: Record<string, string | number | boolean | null>;
104
+ }): Promise<QueryRunResponse> {
105
+ return makeRequest("POST", "/api/v1/query", {
106
+ sql: params.sql,
107
+ ...(params.parameters ? { parameters: params.parameters } : {}),
108
+ }) as Promise<QueryRunResponse>;
109
+ }
110
+
111
+ /** Reads the query reference: both languages, their fields and worked examples. */
112
+ export async function getQueryReference(): Promise<QueryReferenceResponse> {
113
+ return makeRequest("GET", "/api/v1/query/reference") as Promise<QueryReferenceResponse>;
114
+ }
@@ -1,22 +1,16 @@
1
1
  import type { z } from "zod";
2
- import { makeRequest } from "./langwatch-api.js";
2
+
3
+ import { makeRequest } from "./langwatch-api.ts";
3
4
  import type {
4
5
  runParametersSchema,
5
6
  runPlanScopeSchema,
6
7
  runPlanTargetSchema,
7
8
  RunPlanTargetWire,
8
- } from "./schemas/run-plan.js";
9
- import type { EvaluatorAttachmentWire } from "./schemas/suite-fields.js";
9
+ } from "./schemas/run-plan.ts";
10
+ import type { EvaluatorAttachmentWire } from "./schemas/suite-fields.ts";
10
11
 
11
- /**
12
- * Client for `/api/v1/run-plans`.
13
- *
14
- * A run plan is what you run, and its NAME identifies it: running against a
15
- * name that exists replaces that plan's configuration, running against a new
16
- * name creates one. Configuration is the scope, the targets, the repeat count
17
- * and the two models. Parameters, the note and the idempotency key belong to
18
- * one run, not to the plan.
19
- */
12
+ // Client for /api/v1/run-plans. A run plan is identified by name; re-using the
13
+ // name replaces its config while parameters/notes belong to one run only.
20
14
 
21
15
  /**
22
16
  * The shapes the run plan tools accept, taken from the zod that validates
@@ -77,12 +71,12 @@ export interface RunPlanRunResult {
77
71
  scenarios: string[];
78
72
  targets: string[];
79
73
  };
80
- items: Array<{
74
+ items: {
81
75
  scenarioRunId: string;
82
76
  scenarioId: string;
83
77
  target: RunPlanTargetWire;
84
78
  name: string | null;
85
- }>;
79
+ }[];
86
80
  runPlanId: string;
87
81
  planName: string;
88
82
  /** True when this run created the plan, false when it joined an existing one. */
@@ -96,19 +90,14 @@ export interface RunPlanArchiveResponse {
96
90
  }
97
91
 
98
92
  /** Lists the run plans of the project. */
99
- export async function listRunPlans(params?: {
100
- includeArchived?: boolean;
101
- }): Promise<RunPlan[]> {
93
+ export async function listRunPlans(params?: { includeArchived?: boolean }): Promise<RunPlan[]> {
102
94
  const query = params?.includeArchived ? "?includeArchived=true" : "";
103
95
  return makeRequest("GET", `/api/v1/run-plans${query}`) as Promise<RunPlan[]>;
104
96
  }
105
97
 
106
98
  /** Retrieves a single run plan by id. */
107
99
  export async function getRunPlan(id: string): Promise<RunPlan> {
108
- return makeRequest(
109
- "GET",
110
- `/api/v1/run-plans/${encodeURIComponent(id)}`,
111
- ) as Promise<RunPlan>;
100
+ return makeRequest("GET", `/api/v1/run-plans/${encodeURIComponent(id)}`) as Promise<RunPlan>;
112
101
  }
113
102
 
114
103
  /**
@@ -123,11 +112,7 @@ export async function runRunPlan(data: {
123
112
  parameters?: RunParameters;
124
113
  note?: string;
125
114
  }): Promise<RunPlanRunResult> {
126
- return makeRequest(
127
- "POST",
128
- "/api/v1/run-plans/run",
129
- data,
130
- ) as Promise<RunPlanRunResult>;
115
+ return makeRequest("POST", "/api/v1/run-plans/run", data) as Promise<RunPlanRunResult>;
131
116
  }
132
117
 
133
118
  /** Runs a plan again with the configuration it already holds. */
@@ -147,9 +132,7 @@ export async function rerunRunPlan(
147
132
  }
148
133
 
149
134
  /** Archives a run plan. */
150
- export async function archiveRunPlan(
151
- id: string,
152
- ): Promise<RunPlanArchiveResponse> {
135
+ export async function archiveRunPlan(id: string): Promise<RunPlanArchiveResponse> {
153
136
  return makeRequest(
154
137
  "DELETE",
155
138
  `/api/v1/run-plans/${encodeURIComponent(id)}`,
@@ -1,5 +1,5 @@
1
- import { makeRequest } from "./langwatch-api.js";
2
- import type { ScenarioFieldValues } from "./schemas/suite-fields.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
+ import type { ScenarioFieldValues } from "./schemas/suite-fields.ts";
3
3
 
4
4
  // --- Scenario types ---
5
5
 
@@ -24,14 +24,14 @@ export interface ScenarioArchiveResponse {
24
24
 
25
25
  /** Lists all scenarios in the project. */
26
26
  export async function listScenarios(): Promise<ScenarioSummary[]> {
27
- return makeRequest("GET", "/api/scenarios") as Promise<ScenarioSummary[]>;
27
+ return makeRequest("GET", "/api/v1/scenarios") as Promise<ScenarioSummary[]>;
28
28
  }
29
29
 
30
30
  /** Retrieves a single scenario by ID. */
31
31
  export async function getScenario(id: string): Promise<ScenarioSummary> {
32
32
  return makeRequest(
33
33
  "GET",
34
- `/api/scenarios/${encodeURIComponent(id)}`
34
+ `/api/v1/scenarios/${encodeURIComponent(id)}`,
35
35
  ) as Promise<ScenarioSummary>;
36
36
  }
37
37
 
@@ -44,7 +44,7 @@ export async function createScenario(data: {
44
44
  testSuiteId?: string | null;
45
45
  fields?: ScenarioFieldValues;
46
46
  }): Promise<ScenarioSummary> {
47
- return makeRequest("POST", "/api/scenarios", data) as Promise<ScenarioSummary>;
47
+ return makeRequest("POST", "/api/v1/scenarios", data) as Promise<ScenarioSummary>;
48
48
  }
49
49
 
50
50
  /** Updates an existing scenario. */
@@ -60,17 +60,15 @@ export async function updateScenario(params: {
60
60
  const { id, ...data } = params;
61
61
  return makeRequest(
62
62
  "PUT",
63
- `/api/scenarios/${encodeURIComponent(id)}`,
64
- data
63
+ `/api/v1/scenarios/${encodeURIComponent(id)}`,
64
+ data,
65
65
  ) as Promise<ScenarioSummary>;
66
66
  }
67
67
 
68
68
  /** Archives (soft-deletes) a scenario. */
69
- export async function archiveScenario(
70
- id: string
71
- ): Promise<ScenarioArchiveResponse> {
69
+ export async function archiveScenario(id: string): Promise<ScenarioArchiveResponse> {
72
70
  return makeRequest(
73
71
  "DELETE",
74
- `/api/scenarios/${encodeURIComponent(id)}`
72
+ `/api/v1/scenarios/${encodeURIComponent(id)}`,
75
73
  ) as Promise<ScenarioArchiveResponse>;
76
74
  }
@@ -1,4 +1,5 @@
1
- import { makeRequest } from "./langwatch-api.js";
1
+ import { getConfig } from "./config.ts";
2
+ import { makeRequest } from "./langwatch-api.ts";
2
3
 
3
4
  export interface SecretSummary {
4
5
  id: string;
@@ -8,41 +9,47 @@ export interface SecretSummary {
8
9
  updatedAt: string;
9
10
  }
10
11
 
12
+ function projectId(): string {
13
+ const projectId = getConfig().projectId;
14
+ if (!projectId) {
15
+ throw new Error("LANGWATCH_PROJECT_ID is required for secret operations");
16
+ }
17
+ return projectId;
18
+ }
19
+
11
20
  export async function listSecrets(): Promise<SecretSummary[]> {
12
- return makeRequest("GET", "/api/secrets") as Promise<SecretSummary[]>;
21
+ const targetProjectId = projectId();
22
+ return makeRequest(
23
+ "GET",
24
+ `/api/v1/secrets?projectId=${encodeURIComponent(targetProjectId)}`,
25
+ ) as Promise<SecretSummary[]>;
13
26
  }
14
27
 
15
28
  export async function getSecret(id: string): Promise<SecretSummary> {
29
+ const targetProjectId = projectId();
16
30
  return makeRequest(
17
31
  "GET",
18
- `/api/secrets/${encodeURIComponent(id)}`
32
+ `/api/v1/secrets/${encodeURIComponent(id)}?projectId=${encodeURIComponent(targetProjectId)}`,
19
33
  ) as Promise<SecretSummary>;
20
34
  }
21
35
 
22
- export async function createSecret(data: {
23
- name: string;
24
- value: string;
25
- }): Promise<SecretSummary> {
26
- return makeRequest("POST", "/api/secrets", data) as Promise<SecretSummary>;
36
+ export async function createSecret(data: { name: string; value: string }): Promise<SecretSummary> {
37
+ return makeRequest("POST", "/api/v1/secrets", {
38
+ projectId: projectId(),
39
+ ...data,
40
+ }) as Promise<SecretSummary>;
27
41
  }
28
42
 
29
- export async function updateSecret(params: {
30
- id: string;
31
- value: string;
32
- }): Promise<SecretSummary> {
43
+ export async function updateSecret(params: { id: string; value: string }): Promise<SecretSummary> {
33
44
  const { id, value } = params;
34
- return makeRequest(
35
- "PUT",
36
- `/api/secrets/${encodeURIComponent(id)}`,
37
- { value }
38
- ) as Promise<SecretSummary>;
45
+ return makeRequest("PUT", `/api/v1/secrets/${encodeURIComponent(id)}`, {
46
+ projectId: projectId(),
47
+ value,
48
+ }) as Promise<SecretSummary>;
39
49
  }
40
50
 
41
- export async function deleteSecret(
42
- id: string
43
- ): Promise<{ id: string; deleted: boolean }> {
44
- return makeRequest(
45
- "DELETE",
46
- `/api/secrets/${encodeURIComponent(id)}`
47
- ) as Promise<{ id: string; deleted: boolean }>;
51
+ export async function deleteSecret(id: string): Promise<{ id: string; deleted: boolean }> {
52
+ return makeRequest("DELETE", `/api/v1/secrets/${encodeURIComponent(id)}`, {
53
+ projectId: projectId(),
54
+ }) as Promise<{ id: string; deleted: boolean }>;
48
55
  }
@@ -1,5 +1,5 @@
1
- import { makeRequest } from "./langwatch-api.js";
2
- import type { SimulationRunEvaluation } from "./tools/format-suite-details.js";
1
+ import { makeRequest } from "./langwatch-api.ts";
2
+ import type { SimulationRunEvaluation } from "./tools/format-suite-details.ts";
3
3
 
4
4
  export interface SimulationRunSummary {
5
5
  scenarioRunId: string;
@@ -18,7 +18,7 @@ export interface SimulationRunSummary {
18
18
  /** One result per evaluator that ran after the conversation. */
19
19
  evaluations?: SimulationRunEvaluation[];
20
20
  } | null;
21
- messages?: Array<{ role: string; content: string }>;
21
+ messages?: { role: string; content: string }[];
22
22
  /** Why the run was started, as given when it was queued. Null without one. */
23
23
  note?: string | null;
24
24
  timestamp: number;
@@ -42,15 +42,13 @@ export async function listSimulationRuns(params?: {
42
42
  if (params?.batchRunId) query.set("batchRunId", params.batchRunId);
43
43
  if (params?.limit) query.set("limit", String(params.limit));
44
44
  const qs = query.toString() ? `?${query}` : "";
45
- return makeRequest("GET", `/api/simulation-runs${qs}`) as Promise<SimulationRunListResponse>;
45
+ return makeRequest("GET", `/api/v1/simulation-runs${qs}`) as Promise<SimulationRunListResponse>;
46
46
  }
47
47
 
48
48
  /** Gets a single simulation run by its ID. */
49
- export async function getSimulationRun(
50
- scenarioRunId: string,
51
- ): Promise<SimulationRunSummary> {
49
+ export async function getSimulationRun(scenarioRunId: string): Promise<SimulationRunSummary> {
52
50
  return makeRequest(
53
51
  "GET",
54
- `/api/simulation-runs/${encodeURIComponent(scenarioRunId)}`,
52
+ `/api/v1/simulation-runs/${encodeURIComponent(scenarioRunId)}`,
55
53
  ) as Promise<SimulationRunSummary>;
56
54
  }