@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,31 +1,201 @@
1
- import { updatePrompt as apiUpdatePrompt } from "../langwatch-api.js";
1
+ import {
2
+ getPrompt as apiGetPrompt,
3
+ getPromptVersions as apiGetPromptVersions,
4
+ updatePrompt as apiUpdatePrompt,
5
+ type PromptDetailResponse,
6
+ type PromptTag,
7
+ } from "../langwatch-api.ts";
2
8
 
3
- /**
4
- * Handles the platform_update_prompt MCP tool invocation.
5
- *
6
- * Updates an existing prompt via the PUT endpoint.
7
- * Every update with a commitMessage creates a new version automatically.
8
- */
9
+ // Updates a prompt via PUT, creating a new version. Re-fetches the full prompt
10
+ // to get tags since the mutation response doesn't include them.
9
11
  export async function handleUpdatePrompt(params: {
10
12
  idOrHandle: string;
11
- messages?: Array<{ role: string; content: string }>;
13
+ messages?: { role: string; content: string }[];
12
14
  model?: string;
13
15
  commitMessage: string;
14
16
  tags?: string[];
15
17
  }): Promise<string> {
16
18
  const { idOrHandle, ...data } = params;
17
19
 
18
- const result = await apiUpdatePrompt(idOrHandle, data);
20
+ let updated;
21
+ try {
22
+ updated = await apiUpdatePrompt(idOrHandle, data);
23
+ } catch (err) {
24
+ // The platform commits the version before assigning tags, so a
25
+ // rejection while tags were requested may still have created a version.
26
+ // Re-fetch to find out rather than reporting a bare failure.
27
+ if (params.tags && params.tags.length > 0) {
28
+ return renderTagFailure({ idOrHandle, params });
29
+ }
30
+ throw err;
31
+ }
32
+
33
+ return renderUpdateSuccess({ idOrHandle, params, updated });
34
+ }
35
+
36
+ interface IdentifiedVersion {
37
+ version?: number;
38
+ versionId?: string;
39
+ }
40
+
41
+ /**
42
+ * Finds the version created by this update. The GET detail response IS
43
+ * the latest version, so a commitMessage match identifies it directly;
44
+ * otherwise the versions listing is consulted, best-effort.
45
+ */
46
+ async function identifyNewVersion({
47
+ idOrHandle,
48
+ prompt,
49
+ commitMessage,
50
+ }: {
51
+ idOrHandle: string;
52
+ prompt: PromptDetailResponse;
53
+ commitMessage: string;
54
+ }): Promise<IdentifiedVersion | undefined> {
55
+ if (prompt.commitMessage === commitMessage) {
56
+ return { version: prompt.version, versionId: prompt.versionId };
57
+ }
58
+ try {
59
+ const versions = await apiGetPromptVersions(idOrHandle);
60
+ const match = (Array.isArray(versions) ? versions : []).find(
61
+ (v) => v.commitMessage === commitMessage,
62
+ );
63
+ if (match) return { version: match.version, versionId: match.versionId };
64
+ } catch {
65
+ // Identification failure is reported by the caller.
66
+ }
67
+ return undefined;
68
+ }
69
+
70
+ /** The prompt's deployment tags, excluding the built-in "latest" tag. */
71
+ function deploymentTagsOf(prompt: PromptDetailResponse): PromptTag[] {
72
+ return (prompt.tags ?? []).filter((tag) => tag?.name !== "latest");
73
+ }
74
+
75
+ function deploymentLines({
76
+ prompt,
77
+ newVersion,
78
+ }: {
79
+ prompt: PromptDetailResponse;
80
+ newVersion: IdentifiedVersion;
81
+ }): string[] {
82
+ const allDeployments = deploymentTagsOf(prompt);
83
+ const newTags = allDeployments
84
+ .filter((tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId)
85
+ .map((tag) => tag.name);
86
+ if (newTags.length > 0) {
87
+ return [`**Deployed to**: ${newTags.join(", ")}`];
88
+ }
89
+ const lines = [`**Deployment**: not deployed`];
90
+
91
+ // Tags pointing at other versions are untouched by this update —
92
+ // surface them on their own line so no line pairs a version number
93
+ // with a deployment tag name.
94
+ const otherTags = Array.from(
95
+ new Set(
96
+ allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name),
97
+ ),
98
+ );
99
+ if (otherTags.length > 0) {
100
+ lines.push(`**Existing deployments (untouched)**: ${otherTags.join(", ")}`);
101
+ }
102
+ return lines;
103
+ }
104
+
105
+ async function renderUpdateSuccess({
106
+ idOrHandle,
107
+ params,
108
+ updated,
109
+ }: {
110
+ idOrHandle: string;
111
+ params: { commitMessage: string; tags?: string[] };
112
+ updated?: { id?: string; handle?: string };
113
+ }): Promise<string> {
114
+ let prompt;
115
+ try {
116
+ prompt = await apiGetPrompt(idOrHandle, {
117
+ version: undefined,
118
+ tag: undefined,
119
+ });
120
+ } catch {
121
+ // The update itself succeeded; a failed confirmation read must not
122
+ // surface as a tool failure — that invites a dangerous retry.
123
+ const lines: string[] = [];
124
+ lines.push("Prompt updated successfully!\n");
125
+ if (updated?.id) lines.push(`**ID**: ${updated.id}`);
126
+ if (updated?.handle) lines.push(`**Handle**: ${updated.handle}`);
127
+ lines.push(`**Commit**: ${params.commitMessage}`);
128
+ lines.push(
129
+ `**Note**: the update succeeded, but version and deployment details are unavailable (confirmation read failed). Run platform_get_prompt to inspect the current state. Do not retry the update.`,
130
+ );
131
+ return lines.join("\n");
132
+ }
133
+
134
+ const newVersion = await identifyNewVersion({
135
+ idOrHandle,
136
+ prompt,
137
+ commitMessage: params.commitMessage,
138
+ });
19
139
 
20
140
  const lines: string[] = [];
21
141
  lines.push("Prompt updated successfully!\n");
22
- if (result.id) lines.push(`**ID**: ${result.id}`);
23
- if (result.handle) lines.push(`**Handle**: ${result.handle}`);
24
- if (result.latestVersionNumber != null)
25
- lines.push(`**Version**: v${result.latestVersionNumber}`);
142
+ if (prompt.id) lines.push(`**ID**: ${prompt.id}`);
143
+ if (prompt.handle) lines.push(`**Handle**: ${prompt.handle}`);
144
+ if (newVersion?.version != null) lines.push(`**Version**: v${newVersion.version}`);
145
+ if (newVersion?.versionId) lines.push(`**Version ID**: ${newVersion.versionId}`);
26
146
  lines.push(`**Commit**: ${params.commitMessage}`);
27
- if (params.tags && params.tags.length > 0)
28
- lines.push(`**Tags**: ${params.tags.join(", ")}`);
147
+
148
+ if (!newVersion) {
149
+ // The update succeeded but the re-fetch could not identify the new
150
+ // version by commit message — say so instead of silently omitting the
151
+ // version and deployment lines.
152
+ lines.push(
153
+ `**Note**: update succeeded, but the new version could not be identified in the re-fetched prompt — version and deployment details are unavailable. Run platform_get_prompt to inspect the current state.`,
154
+ );
155
+ }
156
+
157
+ if (newVersion) {
158
+ lines.push(...deploymentLines({ prompt, newVersion }));
159
+ }
29
160
 
30
161
  return lines.join("\n");
31
162
  }
163
+
164
+ async function renderTagFailure({
165
+ idOrHandle,
166
+ params,
167
+ }: {
168
+ idOrHandle: string;
169
+ params: { commitMessage: string; tags?: string[] };
170
+ }): Promise<string> {
171
+ const failedTags = params.tags?.join(", ") ?? "";
172
+ let prompt;
173
+ try {
174
+ prompt = await apiGetPrompt(idOrHandle, {
175
+ version: undefined,
176
+ tag: undefined,
177
+ });
178
+ } catch {
179
+ // The confirmation read failed too — report the tag-assignment failure
180
+ // without claiming whether a version was created.
181
+ return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}". Whether a new version was created could not be confirmed (confirmation read failed) — run platform_get_prompt before retrying.`;
182
+ }
183
+
184
+ const matched = await identifyNewVersion({
185
+ idOrHandle,
186
+ prompt,
187
+ commitMessage: params.commitMessage,
188
+ });
189
+
190
+ if (matched) {
191
+ const lines: string[] = [];
192
+ lines.push("Prompt update partially failed.\n");
193
+ lines.push("A new version was created, but assigning the requested tag(s) failed.");
194
+ if (matched.versionId) lines.push(`**Version ID**: ${matched.versionId}`);
195
+ lines.push(`**Status**: created, untagged`);
196
+ lines.push(`**Failed tag(s)**: ${failedTags}`);
197
+ return lines.join("\n");
198
+ }
199
+
200
+ return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}".`;
201
+ }
@@ -1,10 +1,10 @@
1
- import { updateScenario as apiUpdateScenario } from "../langwatch-api-scenarios.js";
1
+ import { updateScenario as apiUpdateScenario } from "../langwatch-api-scenarios.ts";
2
+ import type { ScenarioFieldValues } from "../schemas/suite-fields.ts";
3
+ import { formatScenarioFields } from "./format-scenario.ts";
2
4
 
3
5
  /**
4
- * Handles the platform_update_scenario MCP tool invocation.
5
- *
6
- * Updates an existing scenario and returns a confirmation
7
- * with the updated details.
6
+ * Handles the platform_update_scenario MCP tool: updates a scenario and
7
+ * returns a confirmation with the updated details.
8
8
  */
9
9
  export async function handleUpdateScenario(params: {
10
10
  scenarioId: string;
@@ -12,6 +12,8 @@ export async function handleUpdateScenario(params: {
12
12
  situation?: string;
13
13
  criteria?: string[];
14
14
  labels?: string[];
15
+ testSuiteId?: string | null;
16
+ fields?: ScenarioFieldValues;
15
17
  }): Promise<string> {
16
18
  const { scenarioId, ...data } = params;
17
19
  const result = await apiUpdateScenario({ id: scenarioId, ...data });
@@ -27,6 +29,10 @@ export async function handleUpdateScenario(params: {
27
29
  if (Array.isArray(result.labels) && result.labels.length > 0) {
28
30
  lines.push(`**Labels**: ${result.labels.join(", ")}`);
29
31
  }
32
+ if (result.testSuiteId) {
33
+ lines.push(`**Test suite**: ${result.testSuiteId}`);
34
+ }
35
+ lines.push(...formatScenarioFields(result.fields));
30
36
 
31
37
  return lines.join("\n");
32
38
  }
@@ -0,0 +1,40 @@
1
+ import { updateTestSuite as apiUpdateTestSuite } from "../langwatch-api-test-suites.ts";
2
+ import {
3
+ type EvaluatorAttachmentInput,
4
+ type SuiteField,
5
+ toWireAttachments,
6
+ } from "../schemas/suite-fields.ts";
7
+ import { formatEvaluatorAttachments, formatSuiteFields } from "./format-suite-details.ts";
8
+
9
+ /**
10
+ * Handles the platform_update_test_suite MCP tool: updates any of name,
11
+ * fields and evaluators. A field or evaluator list replaces what the
12
+ * suite holds; a key left out keeps its current value.
13
+ */
14
+ export async function handleUpdateTestSuite(params: {
15
+ id: string;
16
+ name?: string;
17
+ fields?: SuiteField[];
18
+ evaluators?: EvaluatorAttachmentInput[];
19
+ }): Promise<string> {
20
+ const suite = await apiUpdateTestSuite({
21
+ id: params.id,
22
+ ...(params.name !== undefined ? { name: params.name } : {}),
23
+ ...(params.fields !== undefined ? { fields: params.fields } : {}),
24
+ ...(params.evaluators !== undefined
25
+ ? { evaluators: toWireAttachments(params.evaluators) }
26
+ : {}),
27
+ });
28
+
29
+ return [
30
+ `Test suite "${suite.name}" updated.`,
31
+ "",
32
+ `**ID**: ${suite.id}`,
33
+ `**Slug**: ${suite.slug}`,
34
+ `**Scenarios**: ${suite.scenarioCount}`,
35
+ ...formatSuiteFields(suite.fields),
36
+ ...formatEvaluatorAttachments(suite.evaluators),
37
+ "",
38
+ `**View**: ${suite.platformUrl}`,
39
+ ].join("\n");
40
+ }
@@ -24,7 +24,7 @@ export function parseRelativeDate(input: string): number {
24
24
  const parsed = Date.parse(input);
25
25
  if (Number.isNaN(parsed)) {
26
26
  throw new Error(
27
- `Invalid date: "${input}". Use a relative duration (e.g. "24h", "7d", "4w") or an ISO date string.`
27
+ `Invalid date: "${input}". Use a relative duration (e.g. "24h", "7d", "4w") or an ISO date string.`,
28
28
  );
29
29
  }
30
30
  return parsed;
@@ -1,12 +1,7 @@
1
1
  /**
2
- * Escapes characters that would break markdown table formatting.
3
- *
4
- * Replaces pipe characters (`|`) with `\|` and newlines with spaces
5
- * so that values can be safely embedded in markdown tables and headers.
2
+ * Escapes characters that would break markdown table formatting:
3
+ * replaces `|` with `\|` and newlines with spaces.
6
4
  */
7
5
  export function escapeMarkdown(value: string): string {
8
- return value
9
- .replace(/\\/g, "\\\\")
10
- .replace(/\|/g, "\\|")
11
- .replace(/\n/g, " ");
6
+ return value.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\n/g, " ");
12
7
  }
@@ -9,12 +9,12 @@ export interface EvaluationSummary {
9
9
  /** Formats a trace's evaluation results as markdown bullet lines, one per evaluation. */
10
10
  export function formatEvaluationLines(evaluations: EvaluationSummary[]): string[] {
11
11
  return evaluations.map((evaluation) => {
12
- const status =
13
- evaluation.passed === true
14
- ? "PASSED"
15
- : evaluation.passed === false
16
- ? "FAILED"
17
- : "N/A";
12
+ let status = "N/A";
13
+ if (evaluation.passed === true) {
14
+ status = "PASSED";
15
+ } else if (evaluation.passed === false) {
16
+ status = "FAILED";
17
+ }
18
18
  return `- **${evaluation.name || evaluation.evaluator_id}**: ${status}${evaluation.score != null ? ` (score: ${evaluation.score})` : ""}${evaluation.label ? ` [${evaluation.label}]` : ""}`;
19
19
  });
20
20
  }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * One markdown table renderer for caller-chosen columns. Cells are captured content, so they are
3
+ * escaped: one pipe in a cell would split the row for every reader.
4
+ */
5
+
6
+ import { escapeMarkdown } from "./escape-markdown.ts";
7
+
8
+ /** Longest a single cell is rendered before it is cut. */
9
+ const MAX_CELL_LENGTH = 200;
10
+
11
+ /** One cell: escaped, flattened to a line, and bounded. */
12
+ export function markdownCell(value: unknown): string {
13
+ if (value === null || value === undefined) return "";
14
+ const text = cellText(value);
15
+ const escaped = escapeMarkdown(text);
16
+ return escaped.length > MAX_CELL_LENGTH ? `${escaped.slice(0, MAX_CELL_LENGTH - 1)}…` : escaped;
17
+ }
18
+
19
+ /**
20
+ * A markdown table, or a line saying there is nothing to show. `rows` are read by header, so a row
21
+ * missing a key renders an empty cell rather than shifting every cell after it one column left.
22
+ */
23
+ export function markdownTable({
24
+ headers,
25
+ rows,
26
+ emptyMessage = "No rows.",
27
+ }: {
28
+ headers: readonly string[];
29
+ rows: readonly Record<string, unknown>[];
30
+ emptyMessage?: string;
31
+ }): string {
32
+ if (headers.length === 0 || rows.length === 0) return emptyMessage;
33
+ const lines = [
34
+ `| ${headers.map(markdownCell).join(" | ")} |`,
35
+ `| ${headers.map(() => "---").join(" | ")} |`,
36
+ ];
37
+ for (const row of rows) {
38
+ lines.push(`| ${headers.map((header) => markdownCell(row[header])).join(" | ")} |`);
39
+ }
40
+ return lines.join("\n");
41
+ }
42
+
43
+ function cellText(value: {}): string {
44
+ switch (typeof value) {
45
+ case "string":
46
+ return value;
47
+ case "number":
48
+ case "boolean":
49
+ case "bigint":
50
+ return String(value);
51
+ case "symbol":
52
+ return value.toString();
53
+ case "function":
54
+ return value.name;
55
+ default:
56
+ return JSON.stringify(value);
57
+ }
58
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Whether a free-text query looks like a trace id. Advisory only: it adds a sentence to an
3
+ * empty result (ADR-164). Restates the platform's trace-id constants; no server code is shared.
4
+ */
5
+
6
+ /** Hex-only, matching the server's prefix resolver. */
7
+ const HEX_ONLY = /^[0-9a-f]+$/i;
8
+
9
+ /** Shortest hex string worth calling an id; no upper bound (CLI truncates to 20, OTel is 32). */
10
+ const MIN_TRACE_ID_LENGTH = 8;
11
+
12
+ /** The `trace_`-prefixed form the collector accepts (`trace_` + nanoid). */
13
+ const PREFIXED_TRACE_ID = /^trace_[A-Za-z0-9_-]{8,}$/;
14
+
15
+ export function looksLikeTraceId(query: string): boolean {
16
+ const candidate = query.trim();
17
+ if (candidate.includes(" ")) return false;
18
+ if (PREFIXED_TRACE_ID.test(candidate)) return true;
19
+ return HEX_ONLY.test(candidate) && candidate.length >= MIN_TRACE_ID_LENGTH;
20
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "composite": false,
5
+ "noEmit": true,
6
+ "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo"
7
+ },
8
+ "include": ["**/*.ts"],
9
+ "exclude": ["node_modules", "./dist/**/*", "./example/**/*"],
10
+ "references": [
11
+ {
12
+ "path": "../../modules/evaluator/contract/tsconfig.build.json"
13
+ },
14
+ {
15
+ "path": "../../packages/redaction/tsconfig.build.json"
16
+ },
17
+ {
18
+ "path": "../../packages/handled-error/tsconfig.build.json"
19
+ },
20
+ {
21
+ "path": "../../packages/egress/tsconfig.build.json"
22
+ }
23
+ ]
24
+ }
package/tsconfig.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
+ "extends": "../../tsconfig.shared.json",
2
3
  "compilerOptions": {
3
- "target": "ES2022",
4
+ // This package emits declarations only (tsup writes the JavaScript), so
5
+ // `noEmit` from the shared base is turned back off for them.
6
+ "noEmit": false,
7
+ "emitDeclarationOnly": true,
4
8
  "module": "ESNext",
5
9
  "declaration": true,
6
10
  "declarationMap": true,
7
11
  "outDir": "./dist",
8
- "strict": true,
9
12
  "esModuleInterop": true,
10
13
  "resolveJsonModule": true,
11
14
  "allowJs": true,
12
15
  "checkJs": true,
13
- "skipLibCheck": true,
14
- "forceConsistentCasingInFileNames": true,
15
- "moduleResolution": "bundler",
16
16
  "rootDir": "../..",
17
17
  // The evaluator catalog we import (services/langevals/ts-integration/evaluators.generated.ts)
18
18
  // is Zod-first and imports `zod`, but lives outside this package's
@@ -20,15 +20,22 @@
20
20
  // package's own copy (a declared dependency) so the type-checker resolves it.
21
21
  // Paths are resolved relative to this tsconfig (no baseUrl — tsgo removed it).
22
22
  "paths": { "zod": ["./node_modules/zod"] },
23
+ // tsup's dts worker sets `baseUrl` itself, and TypeScript 6 makes that a
24
+ // hard error rather than a warning — this package cannot build without the
25
+ // transition flag until a d.ts bundler exists that speaks the TypeScript 7
26
+ // API. See ADR-099.
27
+ "ignoreDeprecations": "6.0",
23
28
  "isolatedModules": true,
24
29
  "jsx": "preserve",
25
- "incremental": true,
26
30
  "noUncheckedIndexedAccess": true,
27
- "tsBuildInfoFile": "./tsconfig.tsbuildinfo"
31
+ "tsBuildInfoFile": "dist/tsconfig.typecheck.tsbuildinfo",
32
+ "composite": true
28
33
  },
29
- "include": [
30
- ".eslintrc.cjs",
31
- "**/*.ts",
32
- ],
33
- "exclude": ["node_modules", "./dist/**/*", "./example/**/*"]
34
+ "files": [],
35
+ "include": [],
36
+ "references": [
37
+ {
38
+ "path": "./tsconfig.app.json"
39
+ }
40
+ ]
34
41
  }