@langwatch/mcp-server 2.1.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 (415) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +192 -201
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +70 -68
  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-W3IKI7UL.js → archive-project-SPVHXK6A.js} +4 -4
  10. package/dist/{archive-run-plan-474OKHHU.js → archive-run-plan-65QN3XRX.js} +4 -4
  11. package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
  12. package/dist/{archive-scenario-V5UNYK26.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-O7FLDMXK.js → archive-test-suite-NKZDZY3D.js} +4 -4
  16. package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
  17. package/dist/{assign-prompt-tag-Q46WRB6P.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
  18. package/dist/{chunk-OJLYYJWI.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-UF6XIGYR.js → chunk-6YZUOD34.js} +2 -5
  22. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  23. package/dist/chunk-7VNSRCXO.js +129 -0
  24. package/dist/{chunk-G4ZAZTZW.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-EYXMLE5X.js → chunk-HGELNIVY.js} +56 -47
  30. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  31. package/dist/{chunk-RVAE2MEA.js → chunk-I7ATIZED.js} +7 -7
  32. package/dist/{chunk-S4GVX36W.js → chunk-ILZDO25L.js} +7 -10
  33. package/dist/{chunk-QRO35SOM.js → chunk-J7PQKBLD.js} +652 -528
  34. package/dist/{chunk-SR6QPRIE.js → chunk-JRJPH75H.js} +7 -13
  35. package/dist/chunk-K2I7Z3LZ.js +28 -0
  36. package/dist/{chunk-UFOYFYI7.js → chunk-NKMTIHIJ.js} +6 -9
  37. package/dist/{chunk-HV4DWKBI.js → chunk-O7EMWEVJ.js} +2 -4
  38. package/dist/{chunk-56OGTS24.js → chunk-PTDR56Z3.js} +4 -11
  39. package/dist/{chunk-JR6DJZOU.js → chunk-RABYBFX5.js} +4 -10
  40. package/dist/chunk-SUPUUC4W.js +64 -0
  41. package/dist/{chunk-JTQJRNFJ.js → chunk-SXFC3FNH.js} +4 -4
  42. package/dist/{chunk-CKNAH5TG.js → chunk-U24EACC4.js} +3 -10
  43. package/dist/chunk-UNJM3BIL.js +21 -0
  44. package/dist/{chunk-QAMP3CGR.js → chunk-UTJCWXPZ.js} +4 -4
  45. package/dist/chunk-UWLE5T2F.js +312 -0
  46. package/dist/{chunk-6DJDEXET.js → chunk-VMWJD732.js} +6 -12
  47. package/dist/{chunk-7E4FZIYJ.js → chunk-XUIJYNRJ.js} +1 -1
  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-JFJ2K6X3.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-EUXXQ6NS.js → create-annotation-VUSXULQK.js} +10 -5
  57. package/dist/{create-api-key-BGBB76JX.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-Z76AIPLS.js → create-dashboard-WTKKS5Z6.js} +4 -4
  61. package/dist/{create-dataset-FD5VAXU4.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-WQUXXOHI.js → create-dataset-records-W4GLN2FV.js} +5 -7
  65. package/dist/{create-evaluator-6NV33Z52.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 -10
  69. package/dist/create-project-6N7PIYRY.js +44 -0
  70. package/dist/{create-project-ZQ7TFIO2.js → create-project-KAIC46UY.js} +4 -4
  71. package/dist/{create-prompt-BS6QRCUU.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-FCQ5ELSQ.js → create-prompt-tag-OPQUEXWB.js} +3 -3
  75. package/dist/create-scenario-5PJBMAXO.js +33 -0
  76. package/dist/{create-scenario-DRPTPXU3.js → create-scenario-UEM77OE7.js} +5 -5
  77. package/dist/{create-test-suite-ZIZCCFJ4.js → create-test-suite-4IPXVSFQ.js} +6 -6
  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-SA4JMUZF.js → delete-agent-QMEK3XHK.js} +4 -4
  83. package/dist/delete-annotation-HY3O2OGR.js +17 -0
  84. package/dist/{delete-annotation-X3KKK7QY.js → delete-annotation-VKIQWUYW.js} +4 -4
  85. package/dist/delete-dashboard-76N66XXL.js +18 -0
  86. package/dist/{delete-dashboard-LYMRPF27.js → delete-dashboard-JVIVHNJM.js} +4 -4
  87. package/dist/delete-dataset-HQCR66MG.js +18 -0
  88. package/dist/{delete-dataset-W6EZ44HY.js → delete-dataset-WKRUW4FP.js} +5 -7
  89. package/dist/{delete-dataset-records-7CNOTALB.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-QB3OCZUV.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
  95. package/dist/{delete-workflow-NG2VXYYM.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-W7KBXA4J.js → discover-scenario-schema-OOFIQKOG.js} +37 -17
  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-7THF7HCU.js → get-agent-OTIYUFZA.js} +15 -11
  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-P4WWVHFU.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-RZ44UIN6.js → get-evaluator-ISMC4LLI.js} +4 -4
  112. package/dist/get-evaluator-XEUZGZCH.js +47 -0
  113. package/dist/{get-project-QSQEAB33.js → get-project-5VKROSDH.js} +4 -4
  114. package/dist/get-project-RM6FRCBK.js +26 -0
  115. package/dist/{get-prompt-GVKXF5NL.js → get-prompt-OWXJZHQQ.js} +53 -58
  116. package/dist/get-prompt-W52DY36E.js +94 -0
  117. package/dist/{get-run-plan-NY7J5GRE.js → get-run-plan-BE3M2AUX.js} +7 -9
  118. package/dist/get-run-plan-RUXQ6PAX.js +58 -0
  119. package/dist/get-scenario-RNM7BAX2.js +37 -0
  120. package/dist/{get-scenario-Q3LLQE4T.js → get-scenario-YM4ODWW6.js} +5 -5
  121. package/dist/get-simulation-run-6GIATQE5.js +69 -0
  122. package/dist/{get-simulation-run-WINEYDMK.js → get-simulation-run-LCFSMPGQ.js} +26 -22
  123. package/dist/{get-test-suite-4HKA7OKS.js → get-test-suite-GC2O7YH6.js} +5 -5
  124. package/dist/get-test-suite-P5LJ6VLF.js +48 -0
  125. package/dist/get-trace-KBRVV4NN.js +45 -0
  126. package/dist/{get-trace-RCUV7N4O.js → get-trace-SEF3FMR5.js} +11 -13
  127. package/dist/get-workflow-7PVED7JE.js +25 -0
  128. package/dist/{get-workflow-EEOC7Y45.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-WCDUARTH.js → http-server-IR4QOS43.js} +4071 -347
  131. package/dist/index.js +58671 -37983
  132. package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
  133. package/dist/{langwatch-api-annotations-6DHVZWUK.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
  134. package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
  135. package/dist/{langwatch-api-dashboards-2KJL2M42.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
  136. package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
  137. package/dist/{langwatch-api-monitors-6ISFJ7WX.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-6UJL5U4Z.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
  143. package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
  144. package/dist/{list-agents-AMVDQPQL.js → list-agents-HVYWEQMI.js} +4 -4
  145. package/dist/list-agents-RBAOCF53.js +42 -0
  146. package/dist/list-annotations-HJH4NBLD.js +38 -0
  147. package/dist/{list-annotations-6PR5NLIC.js → list-annotations-J4UAHSUN.js} +10 -5
  148. package/dist/{list-api-keys-GVPNBIHQ.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-Z3BZKDGF.js → list-dashboards-ROSYFLDQ.js} +4 -4
  153. package/dist/list-dashboards-RQ635ZU7.js +32 -0
  154. package/dist/{list-dataset-records-O67HZ35Y.js → list-dataset-records-M5TKA6LK.js} +14 -10
  155. package/dist/list-dataset-records-WFM7F33C.js +43 -0
  156. package/dist/{list-datasets-WXZL6UMP.js → list-datasets-B5X4P7BQ.js} +9 -13
  157. package/dist/list-datasets-THUKQHPX.js +56 -0
  158. package/dist/{list-evaluators-PAX72WCN.js → list-evaluators-MYH2OVCI.js} +5 -7
  159. package/dist/list-evaluators-NLVWF6K7.js +32 -0
  160. package/dist/{list-model-providers-VVLZMLCX.js → list-model-providers-3JUGP4YI.js} +4 -4
  161. package/dist/list-model-providers-H3XKORFO.js +35 -0
  162. package/dist/{list-projects-AQVI6SUK.js → list-projects-6EJ5YYEW.js} +5 -7
  163. package/dist/list-projects-YNNSRMLC.js +40 -0
  164. package/dist/{list-prompt-tags-WZFBJOHG.js → list-prompt-tags-NVFQO6WX.js} +3 -3
  165. package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
  166. package/dist/{list-prompts-BQOHRHYT.js → list-prompts-HSIMMHTF.js} +4 -6
  167. package/dist/list-prompts-IRI6AIXO.js +30 -0
  168. package/dist/{list-run-plans-UBAU2DGH.js → list-run-plans-PX2XI6EK.js} +5 -5
  169. package/dist/list-run-plans-QALLCN2K.js +45 -0
  170. package/dist/{list-scenarios-MS4IUIVM.js → list-scenarios-QZRPVHS4.js} +13 -11
  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-D6YF4ZOU.js → list-simulation-runs-OEADLLQR.js} +12 -8
  174. package/dist/list-test-suites-ANAQBLDG.js +34 -0
  175. package/dist/{list-test-suites-L7R2O6DR.js → list-test-suites-N4WVLBKK.js} +4 -4
  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-6MV4XJHF.js → list-workflows-IMSX7SXU.js} +5 -7
  181. package/dist/list-workflows-ZHTX5LCL.js +33 -0
  182. package/dist/{rename-prompt-tag-K5LQ4CY6.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
  183. package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
  184. package/dist/{rename-test-suite-NTYHAO5X.js → rename-test-suite-4J7UX5S2.js} +4 -4
  185. package/dist/rename-test-suite-NNVLMLKY.js +20 -0
  186. package/dist/report-issue-AS34ZMJF.js +898 -0
  187. package/dist/{report-issue-RHZZ33IS.js → report-issue-DCZFLGDO.js} +81 -67
  188. package/dist/{rerun-run-plan-MUDWJBE4.js → rerun-run-plan-TG2V4WM4.js} +5 -5
  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-6LAZ3QZZ.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-T4ZYOZGA.js → run-plan-PAARQSI4.js} +7 -7
  196. package/dist/run-query-KJDH544C.js +47 -0
  197. package/dist/run-query-T4QW2Z5O.js +46 -0
  198. package/dist/{run-test-suite-L4MZ7G4D.js → run-test-suite-SQJELEZX.js} +6 -6
  199. package/dist/run-test-suite-STB6NUJM.js +25 -0
  200. package/dist/{run-workflow-DFIS23AP.js → run-workflow-D6PQNBI6.js} +4 -4
  201. package/dist/run-workflow-SP32SO5M.js +36 -0
  202. package/dist/search-traces-HCBGOG6R.js +170 -0
  203. package/dist/search-traces-HSTQ6WTQ.js +171 -0
  204. package/dist/{set-model-provider-XRNMFOVR.js → set-model-provider-GF7NXUJA.js} +4 -4
  205. package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
  206. package/dist/{update-agent-DUWNYBNA.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-YSOMDCOB.js → update-dataset-SQZ6T4WX.js} +6 -6
  212. package/dist/{update-dataset-record-DEA2ITYR.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-NH7Q5GWV.js → update-evaluator-IGTX6PX4.js} +4 -4
  216. package/dist/{update-project-Q26FBSYH.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-ZQQ2C3KU.js → update-prompt-MY263DYF.js} +27 -29
  220. package/dist/update-scenario-7KA3JDXA.js +34 -0
  221. package/dist/{update-scenario-WUX34JAR.js → update-scenario-MOHRQKAQ.js} +5 -5
  222. package/package.json +35 -39
  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 +755 -609
  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 +18 -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 +12 -29
  244. package/src/langwatch-api-scenarios.ts +9 -11
  245. package/src/langwatch-api-secrets.ts +31 -24
  246. package/src/langwatch-api-simulation-runs.ts +6 -8
  247. package/src/langwatch-api-test-suites.ts +14 -33
  248. package/src/langwatch-api-triggers.ts +96 -34
  249. package/src/langwatch-api-workflows.ts +9 -9
  250. package/src/langwatch-api.ts +108 -124
  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 +13 -29
  255. package/src/schemas/suite-fields.ts +6 -23
  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 +2 -4
  260. package/src/tools/archive-scenario.ts +2 -4
  261. package/src/tools/archive-test-suite.ts +2 -4
  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 +5 -7
  274. package/src/tools/create-test-suite.ts +4 -9
  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 +41 -21
  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 +7 -21
  292. package/src/tools/format-scenario.ts +2 -4
  293. package/src/tools/format-suite-details.ts +6 -12
  294. package/src/tools/get-agent.ts +15 -6
  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 +63 -84
  302. package/src/tools/get-run-plan.ts +4 -6
  303. package/src/tools/get-scenario.ts +4 -6
  304. package/src/tools/get-simulation-run.ts +27 -24
  305. package/src/tools/get-test-suite.ts +2 -5
  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 +1 -1
  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 +2 -2
  323. package/src/tools/list-scenarios.ts +14 -15
  324. package/src/tools/list-simulation-runs.ts +8 -4
  325. package/src/tools/list-test-suites.ts +1 -1
  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 +2 -5
  331. package/src/tools/report-issue.ts +5 -9
  332. package/src/tools/rerun-run-plan.ts +2 -5
  333. package/src/tools/revoke-api-key.ts +2 -4
  334. package/src/tools/run-agent.ts +29 -26
  335. package/src/tools/run-experiment.ts +36 -37
  336. package/src/tools/run-plan.ts +4 -7
  337. package/src/tools/run-query.ts +47 -0
  338. package/src/tools/run-test-suite.ts +4 -7
  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 +2 -2
  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 +44 -59
  350. package/src/tools/update-scenario.ts +5 -7
  351. package/src/tools/update-test-suite.ts +6 -11
  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 +14 -12
  359. package/vitest.integration.config.js +10 -0
  360. package/vitest.scenario.config.js +9 -0
  361. package/.eslintrc.cjs +0 -36
  362. package/dist/chunk-AN4OUA4D.js +0 -86
  363. package/dist/chunk-GELJ2MQR.js +0 -226
  364. package/dist/chunk-K37ZNPXK.js +0 -24
  365. package/dist/config.d.ts +0 -17
  366. package/dist/create-mcp-server.d.ts +0 -10
  367. package/dist/delete-evaluator-RKYC4TNB.js +0 -16
  368. package/dist/discover-evaluator-schema-ESSHQGPY.js +0 -1912
  369. package/dist/get-analytics-R6AZD3AW.js +0 -73
  370. package/dist/get-dataset-AKTYSQDI.js +0 -49
  371. package/dist/index.d.ts +0 -2
  372. package/dist/langwatch-api-secrets-OEBD6GBU.js +0 -41
  373. package/dist/langwatch-api-triggers-5E6DDGX6.js +0 -31
  374. package/dist/run-agent-CAGWGTYT.js +0 -72
  375. package/dist/search-traces-4XTJYXIK.js +0 -79
  376. package/src/__tests__/agent-tools.unit.test.ts +0 -257
  377. package/src/__tests__/all-tools.integration.test.ts +0 -1872
  378. package/src/__tests__/config.unit.test.ts +0 -202
  379. package/src/__tests__/datasets.integration.test.ts +0 -620
  380. package/src/__tests__/datasets.unit.test.ts +0 -244
  381. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  382. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  383. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  384. package/src/__tests__/docker.integration.test.ts +0 -318
  385. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  386. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  387. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  388. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  389. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  390. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  391. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  392. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  393. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  394. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  395. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  396. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  397. package/src/__tests__/http-transport.integration.test.ts +0 -395
  398. package/src/__tests__/integration.integration.test.ts +0 -284
  399. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  400. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  401. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  402. package/src/__tests__/prompt-response-types.unit.test.ts +0 -51
  403. package/src/__tests__/prompts.integration.test.ts +0 -736
  404. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  405. package/src/__tests__/report-issue.integration.test.ts +0 -147
  406. package/src/__tests__/run-plan-tools.unit.test.ts +0 -565
  407. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  408. package/src/__tests__/scenario-tools.unit.test.ts +0 -207
  409. package/src/__tests__/schemas.unit.test.ts +0 -85
  410. package/src/__tests__/simulation-run-tools.unit.test.ts +0 -116
  411. package/src/__tests__/support/http-server-harness.ts +0 -138
  412. package/src/__tests__/test-suite-tools.unit.test.ts +0 -615
  413. package/src/__tests__/tools.integration.test.ts +0 -896
  414. package/src/schemas/filter-fields.ts +0 -119
  415. package/src/schemas/index.ts +0 -9
@@ -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,16 +35,33 @@ 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
 
48
+ /** Identity of the project the calling API key belongs to. */
49
+ export interface CurrentProjectIdentity {
50
+ id: string;
51
+ name: string;
52
+ slug: string;
53
+ isPersonal: boolean;
54
+ }
55
+
56
+ /**
57
+ * Resolves the project behind the configured API key. Needed for the
58
+ * `/api/v1/projects/:projectId/...` route family, whose path must name the
59
+ * caller's own project — there is no "current project" shorthand there.
60
+ */
61
+ export async function getCurrentProject(): Promise<CurrentProjectIdentity> {
62
+ return makeRequest("GET", "/api/v1/me/project") as Promise<CurrentProjectIdentity>;
63
+ }
64
+
48
65
  export async function createProject(data: {
49
66
  name: string;
50
67
  language: string;
@@ -52,7 +69,7 @@ export async function createProject(data: {
52
69
  teamId?: string;
53
70
  newTeamName?: string;
54
71
  }): Promise<ProjectCreateResponse> {
55
- return makeRequest("POST", "/api/projects", data) as Promise<ProjectCreateResponse>;
72
+ return makeRequest("POST", "/api/v1/projects", data) as Promise<ProjectCreateResponse>;
56
73
  }
57
74
 
58
75
  export async function updateProject(params: {
@@ -65,7 +82,7 @@ export async function updateProject(params: {
65
82
  const { id, ...data } = params;
66
83
  return makeRequest(
67
84
  "PATCH",
68
- `/api/projects/${encodeURIComponent(id)}`,
85
+ `/api/v1/projects/${encodeURIComponent(id)}`,
69
86
  data,
70
87
  ) as Promise<ProjectSummary>;
71
88
  }
@@ -75,8 +92,9 @@ export async function archiveProject(id: string): Promise<{
75
92
  name: string;
76
93
  archivedAt: string;
77
94
  }> {
78
- return makeRequest(
79
- "DELETE",
80
- `/api/projects/${encodeURIComponent(id)}`,
81
- ) as Promise<{ id: string; name: string; archivedAt: string }>;
95
+ return makeRequest("DELETE", `/api/v1/projects/${encodeURIComponent(id)}`) as Promise<{
96
+ id: string;
97
+ name: string;
98
+ archivedAt: string;
99
+ }>;
82
100
  }
@@ -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
  }
@@ -1,20 +1,12 @@
1
- import { makeRequest } from "./langwatch-api.js";
2
- import type {
3
- RunParameters,
4
- RunPlanRunResult,
5
- } from "./langwatch-api-run-plans.js";
6
- import type { RunPlanTargetWire } from "./schemas/run-plan.js";
7
- import type {
8
- EvaluatorAttachmentWire,
9
- SuiteField,
10
- } from "./schemas/suite-fields.js";
1
+ import type { RunParameters, RunPlanRunResult } from "./langwatch-api-run-plans.ts";
2
+ import { makeRequest } from "./langwatch-api.ts";
3
+ import type { RunPlanTargetWire } from "./schemas/run-plan.ts";
4
+ import type { EvaluatorAttachmentWire, SuiteField } from "./schemas/suite-fields.ts";
11
5
 
12
6
  /**
13
- * Client for `/api/v1/test-suites`.
14
- *
15
- * A test suite groups scenarios: a name and the scenarios filed in it.
16
- * Running one is sugar over a run plan, so the run returns the same result a
17
- * run plan does.
7
+ * Client for `/api/v1/test-suites`. A test suite groups scenarios by
8
+ * name; running one is sugar over a run plan, returning the same
9
+ * result shape.
18
10
  */
19
11
 
20
12
  export interface TestSuite {
@@ -34,7 +26,7 @@ export interface TestSuite {
34
26
  }
35
27
 
36
28
  export interface TestSuiteDetail extends TestSuite {
37
- scenarios: Array<{ id: string; name: string }>;
29
+ scenarios: { id: string; name: string }[];
38
30
  }
39
31
 
40
32
  export interface TestSuiteArchiveResponse {
@@ -53,11 +45,7 @@ export async function createTestSuite(data: {
53
45
  fields?: SuiteField[];
54
46
  evaluators?: EvaluatorAttachmentWire[];
55
47
  }): Promise<TestSuite> {
56
- return makeRequest(
57
- "POST",
58
- "/api/v1/test-suites",
59
- data,
60
- ) as Promise<TestSuite>;
48
+ return makeRequest("POST", "/api/v1/test-suites", data) as Promise<TestSuite>;
61
49
  }
62
50
 
63
51
  /** Retrieves a test suite with the scenarios filed in it. */
@@ -87,21 +75,14 @@ export async function updateTestSuite(params: {
87
75
  }
88
76
 
89
77
  /** Renames a test suite. */
90
- export async function renameTestSuite(params: {
91
- id: string;
92
- name: string;
93
- }): Promise<TestSuite> {
94
- return makeRequest(
95
- "PATCH",
96
- `/api/v1/test-suites/${encodeURIComponent(params.id)}`,
97
- { name: params.name },
98
- ) as Promise<TestSuite>;
78
+ export async function renameTestSuite(params: { id: string; name: string }): Promise<TestSuite> {
79
+ return makeRequest("PATCH", `/api/v1/test-suites/${encodeURIComponent(params.id)}`, {
80
+ name: params.name,
81
+ }) as Promise<TestSuite>;
99
82
  }
100
83
 
101
84
  /** Archives a test suite and the scenarios filed in it. */
102
- export async function archiveTestSuite(
103
- id: string,
104
- ): Promise<TestSuiteArchiveResponse> {
85
+ export async function archiveTestSuite(id: string): Promise<TestSuiteArchiveResponse> {
105
86
  return makeRequest(
106
87
  "DELETE",
107
88
  `/api/v1/test-suites/${encodeURIComponent(id)}`,