@langwatch/mcp-server 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +280 -200
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +82 -52
  6. package/dist/add-dashboard-widget-4ZC5UN73.js +50 -0
  7. package/dist/add-dashboard-widget-ACC6QYBG.js +49 -0
  8. package/dist/archive-project-KWFM3I5Z.js +19 -0
  9. package/dist/{archive-project-4EQGLBJJ.js → archive-project-SPVHXK6A.js} +4 -4
  10. package/dist/archive-run-plan-65QN3XRX.js +16 -0
  11. package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
  12. package/dist/{archive-scenario-W6BXYDZ3.js → archive-scenario-A6QV5LOW.js} +4 -4
  13. package/dist/archive-scenario-FXEYQNEH.js +19 -0
  14. package/dist/archive-test-suite-5ADQ3KPQ.js +15 -0
  15. package/dist/archive-test-suite-NKZDZY3D.js +16 -0
  16. package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
  17. package/dist/{assign-prompt-tag-VLXUWEKU.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
  18. package/dist/{chunk-CDYQOY5U.js → chunk-3OCG3QPU.js} +7 -10
  19. package/dist/chunk-3YLN3ATJ.js +241 -0
  20. package/dist/chunk-5FNCQRCX.js +91 -0
  21. package/dist/chunk-6YZUOD34.js +55 -0
  22. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  23. package/dist/chunk-7VNSRCXO.js +129 -0
  24. package/dist/{chunk-7RHG56OH.js → chunk-B4J3PJLX.js} +11 -10
  25. package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
  26. package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
  27. package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
  28. package/dist/{chunk-WT4PO4A3.js → chunk-H6WGMG2T.js} +10 -7
  29. package/dist/{chunk-TOXJQDIZ.js → chunk-HGELNIVY.js} +135 -51
  30. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  31. package/dist/{chunk-J42FWRJ2.js → chunk-I7ATIZED.js} +7 -7
  32. package/dist/{chunk-AQJO2EI5.js → chunk-ILZDO25L.js} +7 -10
  33. package/dist/{chunk-4QC7SA2L.js → chunk-J7PQKBLD.js} +884 -559
  34. package/dist/{chunk-YX3A3CFM.js → chunk-JRJPH75H.js} +7 -13
  35. package/dist/chunk-K2I7Z3LZ.js +28 -0
  36. package/dist/{chunk-5CCZFUXS.js → chunk-NKMTIHIJ.js} +6 -9
  37. package/dist/chunk-O7EMWEVJ.js +44 -0
  38. package/dist/chunk-PTDR56Z3.js +37 -0
  39. package/dist/chunk-RABYBFX5.js +43 -0
  40. package/dist/chunk-SUPUUC4W.js +64 -0
  41. package/dist/{chunk-SFB4MU6H.js → chunk-SXFC3FNH.js} +4 -4
  42. package/dist/chunk-U24EACC4.js +67 -0
  43. package/dist/chunk-UNJM3BIL.js +21 -0
  44. package/dist/{chunk-ZWIL4EFL.js → chunk-UTJCWXPZ.js} +4 -4
  45. package/dist/chunk-UWLE5T2F.js +312 -0
  46. package/dist/chunk-VMWJD732.js +57 -0
  47. package/dist/chunk-XUIJYNRJ.js +15 -0
  48. package/dist/chunk-Y34DHR5K.js +67 -0
  49. package/dist/chunk-YCARO42Z.js +516 -0
  50. package/dist/config-EAKW6F26.js +16 -0
  51. package/dist/config.cjs +109 -0
  52. package/dist/config.js +5 -4
  53. package/dist/{create-agent-7XHO6UIS.js → create-agent-AYZ3LB3V.js} +4 -4
  54. package/dist/create-agent-S5ZBCEFT.js +23 -0
  55. package/dist/create-annotation-LHNCLHYP.js +29 -0
  56. package/dist/{create-annotation-YQXRQC6A.js → create-annotation-VUSXULQK.js} +10 -5
  57. package/dist/{create-api-key-YUS36KBU.js → create-api-key-NNYKARMG.js} +5 -7
  58. package/dist/create-api-key-T4KSNPKB.js +24 -0
  59. package/dist/create-dashboard-DHVFMEU4.js +18 -0
  60. package/dist/{create-dashboard-4Z5JO5LB.js → create-dashboard-WTKKS5Z6.js} +4 -4
  61. package/dist/{create-dataset-E6NMSVX7.js → create-dataset-2MC4SD4O.js} +6 -6
  62. package/dist/create-dataset-LUP5PVDM.js +22 -0
  63. package/dist/create-dataset-records-NSKBZP3G.js +20 -0
  64. package/dist/{create-dataset-records-SKHPRD2K.js → create-dataset-records-W4GLN2FV.js} +5 -7
  65. package/dist/{create-evaluator-JXF5PF33.js → create-evaluator-643G6LXL.js} +4 -4
  66. package/dist/create-evaluator-HMTYO5SS.js +27 -0
  67. package/dist/create-mcp-server.cjs +9513 -0
  68. package/dist/create-mcp-server.js +2647 -5
  69. package/dist/create-project-6N7PIYRY.js +44 -0
  70. package/dist/{create-project-CS2CB57Y.js → create-project-KAIC46UY.js} +4 -4
  71. package/dist/{create-prompt-F5RMX3L3.js → create-prompt-E67LXIYT.js} +5 -7
  72. package/dist/create-prompt-PKJ7EDRR.js +37 -0
  73. package/dist/create-prompt-tag-4YO3FSJ3.js +17 -0
  74. package/dist/{create-prompt-tag-GMRWTEFR.js → create-prompt-tag-OPQUEXWB.js} +3 -3
  75. package/dist/create-scenario-5PJBMAXO.js +33 -0
  76. package/dist/{create-scenario-JDR2VB2H.js → create-scenario-UEM77OE7.js} +11 -4
  77. package/dist/create-test-suite-4IPXVSFQ.js +37 -0
  78. package/dist/create-test-suite-SZEPVXSE.js +36 -0
  79. package/dist/create-trigger-5HZSCRAN.js +49 -0
  80. package/dist/create-trigger-PRELMT6J.js +48 -0
  81. package/dist/delete-agent-JUIZWAXG.js +18 -0
  82. package/dist/{delete-agent-O3EEH4S5.js → delete-agent-QMEK3XHK.js} +4 -4
  83. package/dist/delete-annotation-HY3O2OGR.js +17 -0
  84. package/dist/{delete-annotation-XP6FQM7A.js → delete-annotation-VKIQWUYW.js} +4 -4
  85. package/dist/delete-dashboard-76N66XXL.js +18 -0
  86. package/dist/{delete-dashboard-RFUNYCNP.js → delete-dashboard-JVIVHNJM.js} +4 -4
  87. package/dist/delete-dataset-HQCR66MG.js +18 -0
  88. package/dist/{delete-dataset-3MJFRDLP.js → delete-dataset-WKRUW4FP.js} +5 -7
  89. package/dist/{delete-dataset-records-WPMU5GL5.js → delete-dataset-records-C2IQFFVQ.js} +5 -7
  90. package/dist/delete-dataset-records-SDUHQLLM.js +19 -0
  91. package/dist/delete-evaluator-4SNSCLEE.js +16 -0
  92. package/dist/delete-evaluator-QP3QHTLN.js +15 -0
  93. package/dist/delete-prompt-tag-NZ4JQMYG.js +17 -0
  94. package/dist/{delete-prompt-tag-KNMZVSPB.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
  95. package/dist/{delete-workflow-3NUXO46U.js → delete-workflow-5J46T73T.js} +4 -4
  96. package/dist/delete-workflow-JSWABL5F.js +17 -0
  97. package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
  98. package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
  99. package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
  100. package/dist/discover-scenario-schema-OOFIQKOG.js +139 -0
  101. package/dist/{discover-schema-L6QDPON3.js → discover-schema-55YJBFGQ.js} +181 -186
  102. package/dist/discover-schema-A33SLMXW.js +442 -0
  103. package/dist/get-agent-LJQX7OF4.js +69 -0
  104. package/dist/get-agent-OTIYUFZA.js +70 -0
  105. package/dist/get-analytics-DCS72353.js +80 -0
  106. package/dist/get-analytics-IQZKJHLW.js +79 -0
  107. package/dist/get-dashboard-5NYJEIX2.js +29 -0
  108. package/dist/{get-dashboard-KHBEGZGL.js → get-dashboard-QMTYDQAZ.js} +4 -4
  109. package/dist/get-dataset-ALSP7RTX.js +64 -0
  110. package/dist/get-dataset-X4B5JDG2.js +63 -0
  111. package/dist/{get-evaluator-ADMKVWYZ.js → get-evaluator-ISMC4LLI.js} +4 -4
  112. package/dist/get-evaluator-XEUZGZCH.js +47 -0
  113. package/dist/{get-project-RAK7URQJ.js → get-project-5VKROSDH.js} +4 -4
  114. package/dist/get-project-RM6FRCBK.js +26 -0
  115. package/dist/get-prompt-OWXJZHQQ.js +95 -0
  116. package/dist/get-prompt-W52DY36E.js +94 -0
  117. package/dist/get-run-plan-BE3M2AUX.js +59 -0
  118. package/dist/get-run-plan-RUXQ6PAX.js +58 -0
  119. package/dist/get-scenario-RNM7BAX2.js +37 -0
  120. package/dist/{get-scenario-ZTAJJL5T.js → get-scenario-YM4ODWW6.js} +8 -4
  121. package/dist/get-simulation-run-6GIATQE5.js +69 -0
  122. package/dist/{get-simulation-run-T2ZQWYH2.js → get-simulation-run-LCFSMPGQ.js} +33 -20
  123. package/dist/get-test-suite-GC2O7YH6.js +49 -0
  124. package/dist/get-test-suite-P5LJ6VLF.js +48 -0
  125. package/dist/get-trace-KBRVV4NN.js +45 -0
  126. package/dist/{get-trace-K7U234Q4.js → get-trace-SEF3FMR5.js} +11 -13
  127. package/dist/get-workflow-7PVED7JE.js +25 -0
  128. package/dist/{get-workflow-L5L2PSK3.js → get-workflow-YXULW4GC.js} +4 -4
  129. package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
  130. package/dist/{http-server-YXHFPPGA.js → http-server-IR4QOS43.js} +4071 -342
  131. package/dist/index.js +60221 -38077
  132. package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
  133. package/dist/{langwatch-api-annotations-FDAS6NQ7.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
  134. package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
  135. package/dist/{langwatch-api-dashboards-JTVCS7ZJ.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
  136. package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
  137. package/dist/{langwatch-api-monitors-3J7UIQME.js → langwatch-api-monitors-YNWA2M5Y.js} +11 -16
  138. package/dist/langwatch-api-secrets-ADTOJELP.js +56 -0
  139. package/dist/langwatch-api-secrets-RNFO4LF2.js +55 -0
  140. package/dist/langwatch-api-triggers-KQDQC6L5.js +22 -0
  141. package/dist/langwatch-api-triggers-QS7HDIVW.js +23 -0
  142. package/dist/{langwatch-api-workflows-NBJX5KOG.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
  143. package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
  144. package/dist/list-agents-HVYWEQMI.js +43 -0
  145. package/dist/list-agents-RBAOCF53.js +42 -0
  146. package/dist/list-annotations-HJH4NBLD.js +38 -0
  147. package/dist/{list-annotations-ZTVP4EEL.js → list-annotations-J4UAHSUN.js} +10 -5
  148. package/dist/{list-api-keys-CWD4UQT5.js → list-api-keys-7UTJRZDG.js} +10 -5
  149. package/dist/list-api-keys-A2PMV435.js +42 -0
  150. package/dist/list-dashboard-boards-OPWROHMG.js +33 -0
  151. package/dist/list-dashboard-boards-U2GJ7GC5.js +34 -0
  152. package/dist/{list-dashboards-PWG6P6KR.js → list-dashboards-ROSYFLDQ.js} +4 -4
  153. package/dist/list-dashboards-RQ635ZU7.js +32 -0
  154. package/dist/{list-dataset-records-IOE7LQXS.js → list-dataset-records-M5TKA6LK.js} +14 -10
  155. package/dist/list-dataset-records-WFM7F33C.js +43 -0
  156. package/dist/{list-datasets-ZT4JYUDT.js → list-datasets-B5X4P7BQ.js} +9 -13
  157. package/dist/list-datasets-THUKQHPX.js +56 -0
  158. package/dist/{list-evaluators-SJHC7VBH.js → list-evaluators-MYH2OVCI.js} +5 -7
  159. package/dist/list-evaluators-NLVWF6K7.js +32 -0
  160. package/dist/{list-model-providers-PPD2WPD2.js → list-model-providers-3JUGP4YI.js} +4 -4
  161. package/dist/list-model-providers-H3XKORFO.js +35 -0
  162. package/dist/{list-projects-K7QAIX2I.js → list-projects-6EJ5YYEW.js} +5 -7
  163. package/dist/list-projects-YNNSRMLC.js +40 -0
  164. package/dist/{list-prompt-tags-FOO6TNHB.js → list-prompt-tags-NVFQO6WX.js} +3 -3
  165. package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
  166. package/dist/{list-prompts-SC2HAUFG.js → list-prompts-HSIMMHTF.js} +4 -6
  167. package/dist/list-prompts-IRI6AIXO.js +30 -0
  168. package/dist/list-run-plans-PX2XI6EK.js +46 -0
  169. package/dist/list-run-plans-QALLCN2K.js +45 -0
  170. package/dist/list-scenarios-QZRPVHS4.js +46 -0
  171. package/dist/list-scenarios-SSJQEMJP.js +45 -0
  172. package/dist/list-simulation-runs-KNOLGMDV.js +53 -0
  173. package/dist/{list-simulation-runs-KF5THG5H.js → list-simulation-runs-OEADLLQR.js} +19 -9
  174. package/dist/list-test-suites-ANAQBLDG.js +34 -0
  175. package/dist/list-test-suites-N4WVLBKK.js +35 -0
  176. package/dist/list-trigger-fires-JV3WFYYG.js +19 -0
  177. package/dist/list-trigger-fires-WTW4DVIW.js +20 -0
  178. package/dist/list-triggers-SQNIG35Q.js +45 -0
  179. package/dist/list-triggers-V4Y356AK.js +46 -0
  180. package/dist/{list-workflows-QSJWURCK.js → list-workflows-IMSX7SXU.js} +5 -7
  181. package/dist/list-workflows-ZHTX5LCL.js +33 -0
  182. package/dist/{rename-prompt-tag-EKWU5QF3.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
  183. package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
  184. package/dist/rename-test-suite-4J7UX5S2.js +21 -0
  185. package/dist/rename-test-suite-NNVLMLKY.js +20 -0
  186. package/dist/report-issue-AS34ZMJF.js +898 -0
  187. package/dist/report-issue-DCZFLGDO.js +899 -0
  188. package/dist/rerun-run-plan-TG2V4WM4.js +22 -0
  189. package/dist/rerun-run-plan-ZI5OY3VA.js +21 -0
  190. package/dist/revoke-api-key-3J3ZA4UB.js +15 -0
  191. package/dist/{revoke-api-key-FTRTZMOF.js → revoke-api-key-SFMEFWJC.js} +4 -4
  192. package/dist/run-agent-W4VJP72Z.js +75 -0
  193. package/dist/run-agent-YNV6ZHW4.js +74 -0
  194. package/dist/run-plan-6C77GWG4.js +38 -0
  195. package/dist/run-plan-PAARQSI4.js +39 -0
  196. package/dist/run-query-KJDH544C.js +47 -0
  197. package/dist/run-query-T4QW2Z5O.js +46 -0
  198. package/dist/run-test-suite-SQJELEZX.js +26 -0
  199. package/dist/run-test-suite-STB6NUJM.js +25 -0
  200. package/dist/{run-workflow-QPXC627O.js → run-workflow-D6PQNBI6.js} +4 -4
  201. package/dist/{run-agent-6SM4XNA7.js → run-workflow-SP32SO5M.js} +10 -11
  202. package/dist/search-traces-HCBGOG6R.js +170 -0
  203. package/dist/search-traces-HSTQ6WTQ.js +171 -0
  204. package/dist/{set-model-provider-3WKT63ZN.js → set-model-provider-GF7NXUJA.js} +4 -4
  205. package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
  206. package/dist/{update-agent-SMAEHLXH.js → update-agent-DWG43T2P.js} +4 -4
  207. package/dist/update-agent-MXNOBS4H.js +20 -0
  208. package/dist/update-dashboard-widget-CJKJLCDY.js +71 -0
  209. package/dist/update-dashboard-widget-CYQDS2NR.js +70 -0
  210. package/dist/update-dataset-DQH3OHOU.js +22 -0
  211. package/dist/{update-dataset-BDUK7TUO.js → update-dataset-SQZ6T4WX.js} +6 -6
  212. package/dist/{update-dataset-record-4ZSDRBSW.js → update-dataset-record-3AT4IPBC.js} +4 -4
  213. package/dist/update-dataset-record-7PLDGTMR.js +19 -0
  214. package/dist/update-evaluator-4LFTKFPT.js +24 -0
  215. package/dist/{update-evaluator-LS6TIBY7.js → update-evaluator-IGTX6PX4.js} +4 -4
  216. package/dist/{update-project-LKVYXENH.js → update-project-PLJIOZS6.js} +4 -4
  217. package/dist/update-project-QVHSJRUP.js +24 -0
  218. package/dist/update-prompt-GDKRYJI3.js +140 -0
  219. package/dist/update-prompt-MY263DYF.js +141 -0
  220. package/dist/update-scenario-7KA3JDXA.js +34 -0
  221. package/dist/{update-scenario-NEXCAQI7.js → update-scenario-MOHRQKAQ.js} +11 -4
  222. package/package.json +39 -44
  223. package/pyproject.toml +8 -8
  224. package/src/config.d.ts +4 -0
  225. package/src/config.ts +20 -29
  226. package/src/create-mcp-server.ts +1021 -596
  227. package/src/documentation-fetch.ts +21 -20
  228. package/src/http-security.ts +166 -135
  229. package/src/http-server.ts +189 -224
  230. package/src/index.ts +14 -16
  231. package/src/langwatch-api-agents.ts +202 -21
  232. package/src/langwatch-api-annotations.ts +11 -12
  233. package/src/langwatch-api-api-keys.ts +8 -9
  234. package/src/langwatch-api-boards.ts +46 -0
  235. package/src/langwatch-api-dashboard-widgets.ts +112 -0
  236. package/src/langwatch-api-dashboards.ts +13 -10
  237. package/src/langwatch-api-datasets.ts +98 -32
  238. package/src/langwatch-api-evaluators.ts +13 -19
  239. package/src/langwatch-api-model-providers.ts +4 -4
  240. package/src/langwatch-api-monitors.ts +14 -18
  241. package/src/langwatch-api-projects.ts +27 -9
  242. package/src/langwatch-api-query.ts +114 -0
  243. package/src/langwatch-api-run-plans.ts +140 -0
  244. package/src/langwatch-api-scenarios.ts +17 -10
  245. package/src/langwatch-api-secrets.ts +31 -24
  246. package/src/langwatch-api-simulation-runs.ts +10 -7
  247. package/src/langwatch-api-test-suites.ts +116 -0
  248. package/src/langwatch-api-triggers.ts +96 -34
  249. package/src/langwatch-api-workflows.ts +9 -9
  250. package/src/langwatch-api.ts +143 -109
  251. package/src/public-http-request.ts +21 -12
  252. package/src/schemas/analytics-metrics.ts +3 -15
  253. package/src/schemas/create-dataset.ts +3 -4
  254. package/src/schemas/run-plan.ts +76 -0
  255. package/src/schemas/suite-fields.ts +132 -0
  256. package/src/schemas/triggers.ts +365 -0
  257. package/src/tools/add-dashboard-widget.ts +63 -0
  258. package/src/tools/archive-project.ts +2 -4
  259. package/src/tools/archive-run-plan.ts +10 -0
  260. package/src/tools/archive-scenario.ts +2 -4
  261. package/src/tools/archive-test-suite.ts +10 -0
  262. package/src/tools/assign-prompt-tag.ts +6 -2
  263. package/src/tools/create-agent.ts +1 -1
  264. package/src/tools/create-annotation.ts +7 -2
  265. package/src/tools/create-api-key.ts +4 -6
  266. package/src/tools/create-dashboard.ts +1 -1
  267. package/src/tools/create-dataset-records.ts +4 -8
  268. package/src/tools/create-dataset.ts +5 -7
  269. package/src/tools/create-evaluator.ts +3 -5
  270. package/src/tools/create-project.ts +2 -2
  271. package/src/tools/create-prompt-tag.ts +2 -4
  272. package/src/tools/create-prompt.ts +9 -18
  273. package/src/tools/create-scenario.ts +11 -5
  274. package/src/tools/create-test-suite.ts +38 -0
  275. package/src/tools/create-trigger.ts +55 -0
  276. package/src/tools/dashboard-exists.ts +25 -0
  277. package/src/tools/dashboard-widget-queries.ts +32 -0
  278. package/src/tools/delete-agent.ts +1 -1
  279. package/src/tools/delete-annotation.ts +1 -1
  280. package/src/tools/delete-dashboard.ts +1 -1
  281. package/src/tools/delete-dataset-records.ts +4 -8
  282. package/src/tools/delete-dataset.ts +3 -7
  283. package/src/tools/delete-evaluator.ts +4 -6
  284. package/src/tools/delete-prompt-tag.ts +2 -4
  285. package/src/tools/delete-workflow.ts +1 -1
  286. package/src/tools/discover-evaluator-schema.ts +34 -25
  287. package/src/tools/discover-scenario-schema.ts +86 -12
  288. package/src/tools/discover-schema.ts +149 -27
  289. package/src/tools/experiment-run-status.ts +2 -8
  290. package/src/tools/format-dataset-mutation.ts +5 -10
  291. package/src/tools/format-run-plan.ts +54 -0
  292. package/src/tools/format-scenario.ts +12 -0
  293. package/src/tools/format-suite-details.ts +90 -0
  294. package/src/tools/get-agent.ts +54 -3
  295. package/src/tools/get-analytics.ts +52 -46
  296. package/src/tools/get-dashboard.ts +1 -1
  297. package/src/tools/get-dataset.ts +34 -16
  298. package/src/tools/get-evaluator.ts +4 -11
  299. package/src/tools/get-experiment-results.ts +219 -186
  300. package/src/tools/get-project.ts +2 -4
  301. package/src/tools/get-prompt.ts +100 -37
  302. package/src/tools/get-run-plan.ts +60 -0
  303. package/src/tools/get-scenario.ts +6 -5
  304. package/src/tools/get-simulation-run.ts +32 -20
  305. package/src/tools/get-test-suite.ts +46 -0
  306. package/src/tools/get-trace.ts +16 -17
  307. package/src/tools/get-workflow.ts +1 -1
  308. package/src/tools/list-agents.ts +20 -3
  309. package/src/tools/list-annotations.ts +8 -5
  310. package/src/tools/list-api-keys.ts +7 -2
  311. package/src/tools/list-dashboard-boards.ts +28 -0
  312. package/src/tools/list-dashboards.ts +1 -1
  313. package/src/tools/list-dataset-records.ts +8 -6
  314. package/src/tools/list-datasets.ts +12 -23
  315. package/src/tools/list-evaluators.ts +4 -8
  316. package/src/tools/list-experiment-runs.ts +5 -9
  317. package/src/tools/list-experiments.ts +5 -11
  318. package/src/tools/list-model-providers.ts +3 -5
  319. package/src/tools/list-projects.ts +2 -4
  320. package/src/tools/list-prompt-tags.ts +3 -3
  321. package/src/tools/list-prompts.ts +4 -8
  322. package/src/tools/list-run-plans.ts +47 -0
  323. package/src/tools/list-scenarios.ts +26 -17
  324. package/src/tools/list-simulation-runs.ts +13 -5
  325. package/src/tools/list-test-suites.ts +35 -0
  326. package/src/tools/list-trigger-fires.ts +17 -0
  327. package/src/tools/list-triggers.ts +39 -0
  328. package/src/tools/list-workflows.ts +2 -4
  329. package/src/tools/rename-prompt-tag.ts +1 -1
  330. package/src/tools/rename-test-suite.ts +15 -0
  331. package/src/tools/report-issue.ts +5 -9
  332. package/src/tools/rerun-run-plan.ts +18 -0
  333. package/src/tools/revoke-api-key.ts +2 -4
  334. package/src/tools/run-agent.ts +65 -14
  335. package/src/tools/run-experiment.ts +36 -37
  336. package/src/tools/run-plan.ts +46 -0
  337. package/src/tools/run-query.ts +47 -0
  338. package/src/tools/run-test-suite.ts +27 -0
  339. package/src/tools/run-workflow.ts +2 -5
  340. package/src/tools/search-traces.ts +161 -47
  341. package/src/tools/set-model-provider.ts +4 -6
  342. package/src/tools/test-agent.ts +18 -0
  343. package/src/tools/update-agent.ts +1 -1
  344. package/src/tools/update-dashboard-widget.ts +97 -0
  345. package/src/tools/update-dataset-record.ts +1 -1
  346. package/src/tools/update-dataset.ts +5 -7
  347. package/src/tools/update-evaluator.ts +3 -5
  348. package/src/tools/update-project.ts +1 -1
  349. package/src/tools/update-prompt.ts +185 -15
  350. package/src/tools/update-scenario.ts +11 -5
  351. package/src/tools/update-test-suite.ts +40 -0
  352. package/src/utils/date-parsing.ts +1 -1
  353. package/src/utils/escape-markdown.ts +3 -8
  354. package/src/utils/format-evaluations.ts +6 -6
  355. package/src/utils/markdown-table.ts +58 -0
  356. package/src/utils/trace-id-shape.ts +20 -0
  357. package/tsconfig.app.json +24 -0
  358. package/tsconfig.json +19 -12
  359. package/uv.lock +416 -296
  360. package/vitest.integration.config.js +10 -0
  361. package/vitest.scenario.config.js +9 -0
  362. package/.eslintrc.cjs +0 -36
  363. package/dist/archive-suite-4T6BSRS7.js +0 -16
  364. package/dist/chunk-77BNWQ3U.js +0 -86
  365. package/dist/chunk-A2LEVYQ5.js +0 -217
  366. package/dist/chunk-TJCXFNDT.js +0 -24
  367. package/dist/chunk-YZLYHLLI.js +0 -48
  368. package/dist/config.d.ts +0 -17
  369. package/dist/create-mcp-server.d.ts +0 -10
  370. package/dist/create-suite-LZS6QIAF.js +0 -39
  371. package/dist/delete-evaluator-33SP2JFX.js +0 -16
  372. package/dist/discover-evaluator-schema-XTAD4X7D.js +0 -2191
  373. package/dist/discover-scenario-schema-FE64QK2D.js +0 -67
  374. package/dist/get-agent-Y7MWZ65F.js +0 -29
  375. package/dist/get-analytics-TETCSOK6.js +0 -73
  376. package/dist/get-dataset-RCMU5VAH.js +0 -49
  377. package/dist/get-prompt-OY5B7TRI.js +0 -46
  378. package/dist/get-suite-J7JVWO6O.js +0 -45
  379. package/dist/index.d.ts +0 -2
  380. package/dist/langwatch-api-secrets-BUBSNCNO.js +0 -41
  381. package/dist/langwatch-api-triggers-EDFUCJN6.js +0 -31
  382. package/dist/list-agents-KFHKGPXV.js +0 -33
  383. package/dist/list-scenarios-F2WYNRIE.js +0 -41
  384. package/dist/list-suites-CRY4VWW6.js +0 -43
  385. package/dist/report-issue-XYVAPAYJ.js +0 -412
  386. package/dist/run-suite-NKZCJ2IN.js +0 -30
  387. package/dist/search-traces-A6HFKPLJ.js +0 -79
  388. package/dist/update-prompt-ODCRQRN6.js +0 -25
  389. package/dist/update-suite-SNO3GS7T.js +0 -40
  390. package/src/__tests__/all-tools.integration.test.ts +0 -1626
  391. package/src/__tests__/config.unit.test.ts +0 -202
  392. package/src/__tests__/datasets.integration.test.ts +0 -620
  393. package/src/__tests__/datasets.unit.test.ts +0 -244
  394. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  395. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  396. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  397. package/src/__tests__/docker.integration.test.ts +0 -318
  398. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  399. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  400. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  401. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  402. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  403. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  404. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  405. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  406. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  407. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  408. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  409. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  410. package/src/__tests__/http-transport.integration.test.ts +0 -395
  411. package/src/__tests__/integration.integration.test.ts +0 -288
  412. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  413. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  414. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  415. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  416. package/src/__tests__/report-issue.integration.test.ts +0 -147
  417. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  418. package/src/__tests__/scenario-tools.unit.test.ts +0 -188
  419. package/src/__tests__/schemas.unit.test.ts +0 -85
  420. package/src/__tests__/support/http-server-harness.ts +0 -138
  421. package/src/__tests__/tools.unit.test.ts +0 -924
  422. package/src/langwatch-api-suites.ts +0 -118
  423. package/src/schemas/filter-fields.ts +0 -119
  424. package/src/schemas/index.ts +0 -4
  425. package/src/tools/archive-suite.ts +0 -12
  426. package/src/tools/create-suite.ts +0 -42
  427. package/src/tools/get-suite.ts +0 -47
  428. package/src/tools/list-suites.ts +0 -43
  429. package/src/tools/run-suite.ts +0 -28
  430. package/src/tools/update-suite.ts +0 -44
@@ -1,412 +0,0 @@
1
- import {
2
- getConfig
3
- } from "./chunk-WT4PO4A3.js";
4
- import "./chunk-SAS5OB7F.js";
5
-
6
- // ../../packages/redaction/src/markers.ts
7
- var SECRET_MARKER = "[SECRET]";
8
- function formatPiiMarker(entity) {
9
- return `[${entity}]`;
10
- }
11
-
12
- // ../../packages/redaction/src/secrets.ts
13
- var SECRETS_REDACTION_MARKER = SECRET_MARKER;
14
- var REPLACEMENT = SECRETS_REDACTION_MARKER;
15
- var MAX_SCAN_LENGTH = 25e4;
16
- var VALUE_RULES = [
17
- {
18
- id: "pem_private_key",
19
- description: "PEM private key block",
20
- regex: /-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/g
21
- },
22
- {
23
- id: "aws_access_key_id",
24
- description: "AWS access key id",
25
- regex: /\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA)[0-9A-Z]{16}\b/g
26
- },
27
- {
28
- id: "github_token",
29
- description: "GitHub token",
30
- regex: /\b(?:gh[posru]_[A-Za-z0-9]{36,}|github_pat_[A-Za-z0-9_]{60,})\b/g
31
- },
32
- {
33
- // Provider secret keys share the `sk-` namespace: OpenAI (`sk-proj-...`,
34
- // legacy `sk-...`), Anthropic (`sk-ant-...`), LangWatch (`sk-lw-...`), and
35
- // others. The body is base64url, so it includes `_` and `-` and has no inner
36
- // word boundary; matching the whole token and stopping at the next non-key
37
- // char catches modern keys a `[A-Za-z0-9]+\b` rule misses.
38
- id: "provider_api_key",
39
- description: "Provider API key (sk-...)",
40
- regex: /\bsk-[A-Za-z0-9_-]{20,}(?![A-Za-z0-9_-])/g
41
- },
42
- {
43
- id: "stripe_secret_key",
44
- description: "Stripe secret key",
45
- regex: /\b[rs]k_(?:live|test)_[A-Za-z0-9]{16,}\b/g
46
- },
47
- {
48
- id: "slack_token",
49
- description: "Slack token",
50
- regex: /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/g
51
- },
52
- {
53
- id: "google_api_key",
54
- description: "Google API key",
55
- regex: /\bAIza[0-9A-Za-z_-]{35}\b/g
56
- },
57
- {
58
- id: "jwt",
59
- description: "JSON Web Token",
60
- regex: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g
61
- },
62
- {
63
- id: "url_credentials",
64
- description: "Password embedded in a connection URL",
65
- // scheme://user:password@host -> keep everything but the password. The
66
- // scheme length is bounded (real schemes are short) so a long run of
67
- // name-like characters costs constant backtracking per position instead
68
- // of a quadratic scan on huge inputs.
69
- regex: /([a-z][a-z0-9+.-]{0,30}:\/\/[^\s:@/]+:)([^\s:@/]+)(@)/gi,
70
- render: (_m, prefix, _password, at) => `${prefix}${REPLACEMENT}${at}`
71
- },
72
- {
73
- id: "bearer_token",
74
- description: "Bearer authorization token",
75
- regex: /\b(Bearer\s+)[A-Za-z0-9._~+/-]{10,}=*/gi,
76
- render: (_m, prefix) => `${prefix}${REPLACEMENT}`
77
- }
78
- ];
79
- var BUILTIN_SECRET_RULES = VALUE_RULES.map(({ id, description }) => ({ id, description }));
80
- var SENSITIVE_KEY_REGEX = /(?:^|[._-])(?:password|passwd|pwd|secret|api[_-]?key|apikey|access[_-]?token|auth[_-]?token|authorization|auth|bearer|credentials?|private[_-]?key|client[_-]?secret|db[_-]?password|connection[_-]?string|session[_-]?token|refresh[_-]?token|set[_-]?cookie|cookie|x-api-key)(?:$|[._-])/i;
81
- function isSensitiveAttributeKey(key) {
82
- return SENSITIVE_KEY_REGEX.test(key);
83
- }
84
- var VALUE_BOUNDARY = /["'`]/;
85
- function keptLengthAtBoundary(match) {
86
- const index = match.search(VALUE_BOUNDARY);
87
- return index === -1 ? match.length : index;
88
- }
89
- function redactSecretsInText({
90
- text,
91
- customPatterns = []
92
- }) {
93
- if (typeof text !== "string" || text.length === 0 || text.length > MAX_SCAN_LENGTH) {
94
- return { text, redactedCount: 0 };
95
- }
96
- let redactedCount = 0;
97
- let result = text;
98
- for (const rule of VALUE_RULES) {
99
- result = result.replace(rule.regex, (...args) => {
100
- if (rule.render) {
101
- redactedCount++;
102
- return rule.render(...args);
103
- }
104
- const full = args[0] ?? "";
105
- const kept = keptLengthAtBoundary(full);
106
- if (kept === 0) return full;
107
- redactedCount++;
108
- return REPLACEMENT + full.slice(kept);
109
- });
110
- }
111
- for (const pattern of customPatterns) {
112
- result = result.replace(pattern, (...args) => {
113
- const full = args[0] ?? "";
114
- const kept = keptLengthAtBoundary(full);
115
- if (kept === 0) return full;
116
- redactedCount++;
117
- return REPLACEMENT + full.slice(kept);
118
- });
119
- }
120
- return { text: result, redactedCount };
121
- }
122
-
123
- // ../../packages/redaction/src/sessionReport.ts
124
- var EMAIL_MARKER = formatPiiMarker("EMAIL_ADDRESS");
125
- var PHONE_MARKER = formatPiiMarker("PHONE_NUMBER");
126
- var CARD_MARKER = formatPiiMarker("CREDIT_CARD");
127
- var IP_MARKER = formatPiiMarker("IP_ADDRESS");
128
- var ENV_SECRET_NAME_REGEX = /(?:^|[._-])(?:key|token|secret|password|passwd|pwd|credentials?|auth)(?:$|[._-])/i;
129
- var MIN_ENV_SECRET_LENGTH = 8;
130
- function collectSensitiveEnvValues(env) {
131
- const values = /* @__PURE__ */ new Set();
132
- for (const [name, value] of Object.entries(env)) {
133
- if (!value) continue;
134
- const trimmed = value.trim();
135
- if (trimmed.length < MIN_ENV_SECRET_LENGTH) continue;
136
- if (!ENV_SECRET_NAME_REGEX.test(name)) continue;
137
- values.add(trimmed);
138
- }
139
- return [...values].sort((a, b) => b.length - a.length);
140
- }
141
- var EMAIL_REGEX = /[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,253}\.[A-Za-z]{2,24}/g;
142
- var INTL_PHONE_REGEX = /(?<![\w.+-])\+[1-9]\d{0,2}(?:[\s.-]?(?:\(\d{1,4}\)[\s.-]?)?\d{1,4}){1,5}(?!\d)/g;
143
- var NATIONAL_PHONE_REGEX = /(?<!\d)(?:\(\d{3}\)[\s.-]?|\d{3}[.-])\d{3}[.-]\d{4}(?!\d)/g;
144
- var CARD_REGEX = /(?<![\d.-])\d(?:[ -]?\d){12,18}(?![\d.-])/g;
145
- var IPV4_REGEX = /\b(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\b/g;
146
- var countDigits = (value) => value.replace(/\D/g, "").length;
147
- function passesLuhn(digits) {
148
- let sum = 0;
149
- let double = false;
150
- for (let i = digits.length - 1; i >= 0; i--) {
151
- let d = digits.charCodeAt(i) - 48;
152
- if (double) {
153
- d *= 2;
154
- if (d > 9) d -= 9;
155
- }
156
- sum += d;
157
- double = !double;
158
- }
159
- return sum % 10 === 0;
160
- }
161
- function isCardNumber(candidate) {
162
- const digits = candidate.replace(/[ -]/g, "");
163
- if (!/^\d+$/.test(digits)) return false;
164
- const separated = /[ -]/.test(candidate);
165
- if (!separated && (digits.length < 14 || digits.length > 16)) return false;
166
- if (digits.length < 13 || digits.length > 19) return false;
167
- return passesLuhn(digits);
168
- }
169
- function isPrivateOrLocalIp(ip) {
170
- const parts = ip.split(".").map(Number);
171
- const [a = 0, b = 0] = parts;
172
- if (a === 0 || a === 10 || a === 127) return true;
173
- if (a === 192 && b === 168) return true;
174
- if (a === 172 && b >= 16 && b <= 31) return true;
175
- if (a === 169 && b === 254) return true;
176
- if (a === 100 && b >= 64 && b <= 127) return true;
177
- if (a >= 224) return true;
178
- return false;
179
- }
180
- var SLICE_TARGET = 2e5;
181
- function sliceLongText(text) {
182
- if (text.length <= SLICE_TARGET) return [text];
183
- const slices = [];
184
- let start = 0;
185
- while (start < text.length) {
186
- let end = Math.min(start + SLICE_TARGET, text.length);
187
- if (end < text.length) {
188
- const newline = text.lastIndexOf("\n", end);
189
- if (newline > start + SLICE_TARGET / 2) end = newline;
190
- }
191
- slices.push(text.slice(start, end));
192
- start = end;
193
- }
194
- return slices;
195
- }
196
- function redactPiiPatterns(text) {
197
- let redactedCount = 0;
198
- let result = text.replace(EMAIL_REGEX, () => {
199
- redactedCount++;
200
- return EMAIL_MARKER;
201
- });
202
- result = result.replace(CARD_REGEX, (match) => {
203
- if (!isCardNumber(match)) return match;
204
- redactedCount++;
205
- return CARD_MARKER;
206
- });
207
- result = result.replace(INTL_PHONE_REGEX, (match) => {
208
- const digits = countDigits(match);
209
- if (digits < 7 || digits > 15) return match;
210
- redactedCount++;
211
- return PHONE_MARKER;
212
- });
213
- result = result.replace(NATIONAL_PHONE_REGEX, () => {
214
- redactedCount++;
215
- return PHONE_MARKER;
216
- });
217
- result = result.replace(IPV4_REGEX, (match) => {
218
- if (isPrivateOrLocalIp(match)) return match;
219
- redactedCount++;
220
- return IP_MARKER;
221
- });
222
- return { text: result, redactedCount };
223
- }
224
- function scrubEnvLiterals(text, envValues) {
225
- let result = text;
226
- let redactedCount = 0;
227
- for (const value of envValues) {
228
- if (!result.includes(value)) continue;
229
- const parts = result.split(value);
230
- redactedCount += parts.length - 1;
231
- result = parts.join(SECRET_MARKER);
232
- }
233
- return { text: result, redactedCount };
234
- }
235
- function redactReportText({
236
- text,
237
- envValues = []
238
- }) {
239
- if (typeof text !== "string" || text.length === 0) {
240
- return { text, redactedCount: 0 };
241
- }
242
- const envPass = scrubEnvLiterals(text, envValues);
243
- let redactedCount = envPass.redactedCount;
244
- const pieces = sliceLongText(envPass.text).map((slice) => {
245
- const secrets = redactSecretsInText({ text: slice });
246
- redactedCount += secrets.redactedCount;
247
- const pii = redactPiiPatterns(secrets.text);
248
- redactedCount += pii.redactedCount;
249
- return pii.text;
250
- });
251
- return { text: pieces.join(""), redactedCount };
252
- }
253
- function redactJsonValue(value, envValues, count) {
254
- if (typeof value === "string") {
255
- const result = redactReportText({ text: value, envValues });
256
- count.redacted += result.redactedCount;
257
- return result.text;
258
- }
259
- if (Array.isArray(value)) {
260
- return value.map((item) => redactJsonValue(item, envValues, count));
261
- }
262
- if (value && typeof value === "object") {
263
- const out = {};
264
- for (const [key, entry] of Object.entries(value)) {
265
- if (isSensitiveAttributeKey(key) && entry !== null && entry !== void 0) {
266
- out[key] = SECRET_MARKER;
267
- count.redacted++;
268
- continue;
269
- }
270
- out[key] = redactJsonValue(entry, envValues, count);
271
- }
272
- return out;
273
- }
274
- return value;
275
- }
276
- function redactSessionJsonl({
277
- jsonl,
278
- envValues = []
279
- }) {
280
- let redactedCount = 0;
281
- const lines = jsonl.split("\n").map((line) => {
282
- if (line.trim().length === 0) return line;
283
- try {
284
- const parsed = JSON.parse(line);
285
- const count = { redacted: 0 };
286
- const redacted = redactJsonValue(parsed, envValues, count);
287
- redactedCount += count.redacted;
288
- return JSON.stringify(redacted);
289
- } catch {
290
- const result = redactReportText({ text: line, envValues });
291
- redactedCount += result.redactedCount;
292
- return result.text;
293
- }
294
- });
295
- return { text: lines.join("\n"), redactedCount };
296
- }
297
- function truncateJsonlToByteBudget({
298
- jsonl,
299
- maxBytes
300
- }) {
301
- const encoder = new TextEncoder();
302
- if (encoder.encode(jsonl).length <= maxBytes) {
303
- return { text: jsonl, truncated: false };
304
- }
305
- const lines = jsonl.split("\n");
306
- const kept = [];
307
- let used = 0;
308
- for (let i = lines.length - 1; i >= 0; i--) {
309
- const line = lines[i] ?? "";
310
- const size = encoder.encode(line).length + 1;
311
- if (used + size > maxBytes) break;
312
- kept.unshift(line);
313
- used += size;
314
- }
315
- return { text: kept.join("\n"), truncated: true };
316
- }
317
- var REDACTION_AUDIT_URL = "https://github.com/langwatch/langwatch/blob/main/packages/redaction/src/sessionReport.ts";
318
-
319
- // src/tools/report-issue.ts
320
- var MAX_SESSION_BYTES = 8 * 1024 * 1024;
321
- var REQUEST_TIMEOUT_MS = 6e4;
322
- function redactReport(params) {
323
- const envValues = collectSensitiveEnvValues(process.env);
324
- let redactedCount = 0;
325
- const titleResult = redactReportText({ text: params.title, envValues });
326
- redactedCount += titleResult.redactedCount;
327
- let summary;
328
- if (params.summary) {
329
- const result = redactReportText({ text: params.summary, envValues });
330
- summary = result.text;
331
- redactedCount += result.redactedCount;
332
- }
333
- let sessionData;
334
- let sessionTruncated = false;
335
- if (params.session_content) {
336
- const redacted = redactSessionJsonl({
337
- jsonl: params.session_content,
338
- envValues
339
- });
340
- redactedCount += redacted.redactedCount;
341
- const truncated = truncateJsonlToByteBudget({
342
- jsonl: redacted.text,
343
- maxBytes: MAX_SESSION_BYTES
344
- });
345
- sessionData = truncated.text;
346
- sessionTruncated = truncated.truncated;
347
- }
348
- return {
349
- title: titleResult.text,
350
- summary,
351
- sessionData,
352
- sessionTruncated,
353
- redactedCount
354
- };
355
- }
356
- async function deliverReport(report, params) {
357
- const config = getConfig();
358
- const endpoint = config.endpoint.replace(/\/+$/, "");
359
- const response = await fetch(`${endpoint}/api/bug-reports`, {
360
- method: "POST",
361
- headers: {
362
- "content-type": "application/json",
363
- ...config.apiKey ? { authorization: `Bearer ${config.apiKey}` } : {}
364
- },
365
- body: JSON.stringify({
366
- source: "mcp",
367
- kind: report.sessionData ? "full_session" : "summary",
368
- title: report.title,
369
- ...report.summary ? { summary: report.summary } : {},
370
- ...report.sessionData ? { sessionData: report.sessionData, sessionTruncated: report.sessionTruncated } : {},
371
- ...params.agent ? { agent: params.agent } : {},
372
- ...params.contact_email ? { contactEmail: params.contact_email } : {}
373
- }),
374
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
375
- }).catch(() => {
376
- throw new Error(
377
- `Could not reach ${endpoint} to deliver the report. Retry in a moment; if it keeps failing, email support@langwatch.ai with the same content.`
378
- );
379
- });
380
- if (!response.ok) {
381
- const body = (await response.text().catch(() => "")).slice(0, 300);
382
- throw new Error(
383
- `The reports endpoint answered HTTP ${response.status}: ${body}. Retry in a moment; if it keeps failing, email support@langwatch.ai.`
384
- );
385
- }
386
- const { id } = await response.json();
387
- return id;
388
- }
389
- async function handleReportIssue(params) {
390
- if (!params.user_approved) {
391
- throw new Error(
392
- `This sends a report to the LangWatch team, so the user must approve it first. Ask the user: "Can I send this issue report to LangWatch to help them fix it?" If they agree, call again with user_approved=true. Secrets and personal data are redacted locally before sending; audit the rules at ${REDACTION_AUDIT_URL}`
393
- );
394
- }
395
- if (!params.summary?.trim() && !params.session_content?.trim()) {
396
- throw new Error(
397
- "Nothing to report: pass a summary (what you tried, verbatim errors, what you had to figure out), session_content, or both."
398
- );
399
- }
400
- const report = redactReport(params);
401
- const id = await deliverReport(report, params);
402
- return [
403
- `Report sent to the LangWatch team (${id}). Thank you!`,
404
- `Redacted ${report.redactedCount} sensitive value${report.redactedCount === 1 ? "" : "s"} locally before sending.`,
405
- ...report.sessionTruncated ? ["The session content was truncated to the most recent activity to fit the upload limit."] : [],
406
- "Reports like this directly shape what gets fixed next."
407
- ].join(" ");
408
- }
409
- export {
410
- handleReportIssue
411
- };
412
- //# sourceMappingURL=report-issue-XYVAPAYJ.js.map
@@ -1,30 +0,0 @@
1
- import {
2
- runSuite
3
- } from "./chunk-YZLYHLLI.js";
4
- import "./chunk-A2LEVYQ5.js";
5
- import "./chunk-WT4PO4A3.js";
6
- import "./chunk-SAS5OB7F.js";
7
-
8
- // src/tools/run-suite.ts
9
- async function handleRunSuite(params) {
10
- const result = await runSuite(params.id);
11
- const lines = [];
12
- lines.push(`Suite run scheduled successfully.`);
13
- lines.push("");
14
- lines.push(`**Batch Run ID**: ${result.batchRunId}`);
15
- lines.push(`**Jobs**: ${result.jobCount}`);
16
- lines.push(`**Set ID**: ${result.setId}`);
17
- if (result.skippedArchived.scenarios.length > 0) {
18
- lines.push(`
19
- \u26A0\uFE0F Skipped archived scenarios: ${result.skippedArchived.scenarios.join(", ")}`);
20
- }
21
- if (result.skippedArchived.targets.length > 0) {
22
- lines.push(`\u26A0\uFE0F Skipped archived targets: ${result.skippedArchived.targets.join(", ")}`);
23
- }
24
- lines.push("\nView results in the LangWatch dashboard under Simulations.");
25
- return lines.join("\n");
26
- }
27
- export {
28
- handleRunSuite
29
- };
30
- //# sourceMappingURL=run-suite-NKZCJ2IN.js.map
@@ -1,79 +0,0 @@
1
- import {
2
- formatEvaluationLines
3
- } from "./chunk-37SMPMQS.js";
4
- import {
5
- parseRelativeDate
6
- } from "./chunk-ZXKLPC2E.js";
7
- import {
8
- searchTraces
9
- } from "./chunk-A2LEVYQ5.js";
10
- import "./chunk-WT4PO4A3.js";
11
- import "./chunk-SAS5OB7F.js";
12
-
13
- // src/tools/search-traces.ts
14
- async function handleSearchTraces(params) {
15
- const now = Date.now();
16
- const startDate = params.startDate ? parseRelativeDate(params.startDate) : now - 864e5;
17
- const endDate = params.endDate ? parseRelativeDate(params.endDate) : now;
18
- const format = params.format ?? "digest";
19
- const result = await searchTraces({
20
- query: params.query,
21
- filters: params.filters,
22
- startDate,
23
- endDate,
24
- pageSize: params.pageSize ?? 25,
25
- scrollId: params.scrollId,
26
- format
27
- });
28
- const traces = result.traces ?? [];
29
- if (traces.length === 0) {
30
- return "No traces found matching your query.";
31
- }
32
- if (format === "json") {
33
- return JSON.stringify(result, null, 2);
34
- }
35
- const lines = [];
36
- lines.push(
37
- `Found ${result.pagination?.totalHits ?? traces.length} traces:
38
- `
39
- );
40
- for (const trace of traces) {
41
- lines.push(`### Trace: ${trace.trace_id}`);
42
- if (trace.formatted_trace) {
43
- lines.push(trace.formatted_trace);
44
- } else {
45
- const inputStr = trace.input?.value ? String(trace.input.value) : "N/A";
46
- const outputStr = trace.output?.value ? String(trace.output.value) : "N/A";
47
- lines.push(
48
- `- **Input**: ${inputStr.slice(0, 100)}${inputStr.length > 100 ? "..." : ""}`
49
- );
50
- lines.push(
51
- `- **Output**: ${outputStr.slice(0, 100)}${outputStr.length > 100 ? "..." : ""}`
52
- );
53
- }
54
- if (trace.timestamps) {
55
- lines.push(`- **Time**: ${trace.timestamps.started_at || "N/A"}`);
56
- }
57
- if (trace.error) {
58
- lines.push(`- **Error**: ${JSON.stringify(trace.error)}`);
59
- }
60
- if (trace.evaluations && trace.evaluations.length > 0) {
61
- lines.push(...formatEvaluationLines(trace.evaluations));
62
- }
63
- lines.push("");
64
- }
65
- if (result.pagination?.scrollId) {
66
- lines.push(
67
- `
68
- **More results available.** Use scrollId: "${result.pagination.scrollId}" to get next page.`
69
- );
70
- }
71
- lines.push(
72
- '\n> Tip: Use `get_trace` with a trace_id for full details. Use `search_traces` with `format: "json"` for raw data. Use `discover_schema` to see available filter fields.'
73
- );
74
- return lines.join("\n");
75
- }
76
- export {
77
- handleSearchTraces
78
- };
79
- //# sourceMappingURL=search-traces-A6HFKPLJ.js.map
@@ -1,25 +0,0 @@
1
- import {
2
- updatePrompt
3
- } from "./chunk-A2LEVYQ5.js";
4
- import "./chunk-WT4PO4A3.js";
5
- import "./chunk-SAS5OB7F.js";
6
-
7
- // src/tools/update-prompt.ts
8
- async function handleUpdatePrompt(params) {
9
- const { idOrHandle, ...data } = params;
10
- const result = await updatePrompt(idOrHandle, data);
11
- const lines = [];
12
- lines.push("Prompt updated successfully!\n");
13
- if (result.id) lines.push(`**ID**: ${result.id}`);
14
- if (result.handle) lines.push(`**Handle**: ${result.handle}`);
15
- if (result.latestVersionNumber != null)
16
- lines.push(`**Version**: v${result.latestVersionNumber}`);
17
- lines.push(`**Commit**: ${params.commitMessage}`);
18
- if (params.tags && params.tags.length > 0)
19
- lines.push(`**Tags**: ${params.tags.join(", ")}`);
20
- return lines.join("\n");
21
- }
22
- export {
23
- handleUpdatePrompt
24
- };
25
- //# sourceMappingURL=update-prompt-ODCRQRN6.js.map
@@ -1,40 +0,0 @@
1
- import {
2
- updateSuite
3
- } from "./chunk-YZLYHLLI.js";
4
- import "./chunk-A2LEVYQ5.js";
5
- import "./chunk-WT4PO4A3.js";
6
- import "./chunk-SAS5OB7F.js";
7
-
8
- // src/tools/update-suite.ts
9
- async function handleUpdateSuite(params) {
10
- let parsedTargets;
11
- if (params.targets) {
12
- try {
13
- parsedTargets = JSON.parse(params.targets);
14
- } catch {
15
- return "Error: `targets` must be a valid JSON array.";
16
- }
17
- }
18
- const suite = await updateSuite({
19
- id: params.id,
20
- name: params.name,
21
- description: params.description,
22
- scenarioIds: params.scenarioIds,
23
- targets: parsedTargets,
24
- repeatCount: params.repeatCount,
25
- labels: params.labels
26
- });
27
- return [
28
- `Suite "${suite.name}" updated successfully.`,
29
- "",
30
- `**ID**: ${suite.id}`,
31
- `**Slug**: ${suite.slug}`,
32
- `**Scenarios**: ${suite.scenarioIds.length}`,
33
- `**Targets**: ${suite.targets.length}`,
34
- `**Repeat**: ${suite.repeatCount}x`
35
- ].join("\n");
36
- }
37
- export {
38
- handleUpdateSuite
39
- };
40
- //# sourceMappingURL=update-suite-SNO3GS7T.js.map