@langwatch/mcp-server 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +218 -201
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +70 -68
  6. package/dist/add-dashboard-widget-55UI6H22.js +44 -0
  7. package/dist/add-dashboard-widget-MJHIC3CC.js +45 -0
  8. package/dist/{archive-project-W3IKI7UL.js → archive-project-K5UD7A6X.js} +4 -4
  9. package/dist/archive-project-L4PAKT34.js +19 -0
  10. package/dist/{archive-run-plan-474OKHHU.js → archive-run-plan-5HSQG2HX.js} +4 -4
  11. package/dist/archive-run-plan-AOKNYQIO.js +15 -0
  12. package/dist/archive-scenario-2CWJW2VD.js +19 -0
  13. package/dist/{archive-scenario-V5UNYK26.js → archive-scenario-5IJQESHH.js} +4 -4
  14. package/dist/{archive-test-suite-O7FLDMXK.js → archive-test-suite-OPB7NFI7.js} +4 -4
  15. package/dist/archive-test-suite-ZC3TN6VH.js +15 -0
  16. package/dist/assign-prompt-tag-6DDE6ZZ5.js +23 -0
  17. package/dist/{assign-prompt-tag-Q46WRB6P.js → assign-prompt-tag-D7O23MJM.js} +8 -4
  18. package/dist/chunk-3YLN3ATJ.js +241 -0
  19. package/dist/{chunk-EYXMLE5X.js → chunk-4RX3G62A.js} +56 -47
  20. package/dist/{chunk-UF6XIGYR.js → chunk-6YZUOD34.js} +2 -5
  21. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  22. package/dist/chunk-7CZQDZ2K.js +319 -0
  23. package/dist/{chunk-RVAE2MEA.js → chunk-7GETGE6B.js} +7 -7
  24. package/dist/{chunk-OJLYYJWI.js → chunk-AASW2TO2.js} +7 -10
  25. package/dist/{chunk-QAMP3CGR.js → chunk-B4RFWIUP.js} +4 -4
  26. package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
  27. package/dist/{chunk-G4ZAZTZW.js → chunk-D2HS73VI.js} +7 -10
  28. package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
  29. package/dist/{chunk-WT4PO4A3.js → chunk-DULFP3MK.js} +10 -7
  30. package/dist/chunk-EYPJBL7P.js +516 -0
  31. package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
  32. package/dist/chunk-GA5JUSPT.js +64 -0
  33. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  34. package/dist/chunk-HLQJXUR6.js +67 -0
  35. package/dist/{chunk-JTQJRNFJ.js → chunk-KILVK3FS.js} +4 -4
  36. package/dist/chunk-MOCU5XWF.js +79 -0
  37. package/dist/chunk-O2WGVCED.js +41 -0
  38. package/dist/{chunk-HV4DWKBI.js → chunk-O7EMWEVJ.js} +2 -4
  39. package/dist/{chunk-UFOYFYI7.js → chunk-QXLMHLRC.js} +6 -9
  40. package/dist/{chunk-QRO35SOM.js → chunk-R5YJIYPF.js} +981 -747
  41. package/dist/{chunk-JR6DJZOU.js → chunk-RABYBFX5.js} +4 -10
  42. package/dist/{chunk-SR6QPRIE.js → chunk-RFC2SBEX.js} +7 -13
  43. package/dist/chunk-SHSVN3SE.js +21 -0
  44. package/dist/{chunk-CKNAH5TG.js → chunk-U24EACC4.js} +3 -10
  45. package/dist/{chunk-56OGTS24.js → chunk-VOUGDY2O.js} +4 -11
  46. package/dist/chunk-WCKZDOGF.js +31 -0
  47. package/dist/chunk-XQYH52SI.js +129 -0
  48. package/dist/{chunk-7E4FZIYJ.js → chunk-XUIJYNRJ.js} +1 -1
  49. package/dist/{chunk-6DJDEXET.js → chunk-YCIUEZVK.js} +6 -12
  50. package/dist/config-2WQGMAEN.js +16 -0
  51. package/dist/config.cjs +109 -0
  52. package/dist/config.js +5 -4
  53. package/dist/{create-agent-JFJ2K6X3.js → create-agent-6JNLMYQD.js} +4 -4
  54. package/dist/create-agent-IRZOU4R5.js +23 -0
  55. package/dist/create-analytics-report-N4L4V5QL.js +19 -0
  56. package/dist/create-analytics-report-QEHXG7FU.js +18 -0
  57. package/dist/{create-annotation-EUXXQ6NS.js → create-annotation-CCEGIZ67.js} +10 -5
  58. package/dist/create-annotation-DTHCMWHB.js +29 -0
  59. package/dist/{create-api-key-BGBB76JX.js → create-api-key-JKM2DSZO.js} +5 -7
  60. package/dist/create-api-key-JPEUIXGM.js +24 -0
  61. package/dist/create-dataset-DJNXYJ5B.js +22 -0
  62. package/dist/{create-dataset-FD5VAXU4.js → create-dataset-WON4SOTC.js} +6 -6
  63. package/dist/create-dataset-records-TMEOTLTO.js +20 -0
  64. package/dist/{create-dataset-records-WQUXXOHI.js → create-dataset-records-UJBW3C7C.js} +5 -7
  65. package/dist/create-evaluator-N5AEHI4K.js +27 -0
  66. package/dist/{create-evaluator-6NV33Z52.js → create-evaluator-XYNY2YFY.js} +4 -4
  67. package/dist/create-mcp-server.cjs +9712 -0
  68. package/dist/create-mcp-server.js +2757 -10
  69. package/dist/{create-project-ZQ7TFIO2.js → create-project-EY4XZ7TH.js} +4 -4
  70. package/dist/create-project-YL345T5L.js +44 -0
  71. package/dist/{create-prompt-BS6QRCUU.js → create-prompt-JZQNQ7I3.js} +5 -7
  72. package/dist/create-prompt-ZUMQHHX7.js +37 -0
  73. package/dist/create-prompt-tag-CJ5FZ436.js +17 -0
  74. package/dist/{create-prompt-tag-FCQ5ELSQ.js → create-prompt-tag-JFP2Q3PO.js} +3 -3
  75. package/dist/create-scenario-CQU2SSFB.js +33 -0
  76. package/dist/{create-scenario-DRPTPXU3.js → create-scenario-S6OWWKJO.js} +5 -5
  77. package/dist/create-test-suite-OLGCAGJA.js +36 -0
  78. package/dist/{create-test-suite-ZIZCCFJ4.js → create-test-suite-Y7P2RI4L.js} +6 -6
  79. package/dist/create-trigger-4CNBTISJ.js +48 -0
  80. package/dist/create-trigger-RQ653WYF.js +49 -0
  81. package/dist/dashboards-BA7M6CMO.js +90 -0
  82. package/dist/dashboards-U663GUIB.js +91 -0
  83. package/dist/{delete-agent-SA4JMUZF.js → delete-agent-J2Q4DRZ2.js} +4 -4
  84. package/dist/delete-agent-ZAU4LTXB.js +18 -0
  85. package/dist/delete-analytics-report-QK6X7P4S.js +19 -0
  86. package/dist/delete-analytics-report-YUYLDHLL.js +18 -0
  87. package/dist/delete-annotation-7X4NYXXM.js +17 -0
  88. package/dist/{delete-annotation-X3KKK7QY.js → delete-annotation-KJOCDLV3.js} +4 -4
  89. package/dist/{delete-dataset-W6EZ44HY.js → delete-dataset-NXP7ZPPV.js} +5 -7
  90. package/dist/delete-dataset-RUTZBBVD.js +18 -0
  91. package/dist/{delete-dataset-records-7CNOTALB.js → delete-dataset-records-4Z7DZCDW.js} +5 -7
  92. package/dist/delete-dataset-records-75UAR5IS.js +19 -0
  93. package/dist/delete-evaluator-E3CUNGTQ.js +16 -0
  94. package/dist/delete-evaluator-RI4GALGX.js +15 -0
  95. package/dist/delete-prompt-tag-LE3WJPKS.js +17 -0
  96. package/dist/{delete-prompt-tag-QB3OCZUV.js → delete-prompt-tag-S4KBZTNG.js} +3 -3
  97. package/dist/delete-workflow-4CZFIQCQ.js +17 -0
  98. package/dist/{delete-workflow-NG2VXYYM.js → delete-workflow-PWQPDW6H.js} +4 -4
  99. package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
  100. package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
  101. package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
  102. package/dist/{discover-scenario-schema-W7KBXA4J.js → discover-scenario-schema-OOFIQKOG.js} +37 -17
  103. package/dist/discover-schema-7WHIIATI.js +442 -0
  104. package/dist/{discover-schema-L6QDPON3.js → discover-schema-J2ANOBKO.js} +181 -186
  105. package/dist/get-agent-5T3CXQOR.js +69 -0
  106. package/dist/{get-agent-7THF7HCU.js → get-agent-ZKYQJUQ7.js} +15 -11
  107. package/dist/get-analytics-4MPEK4KV.js +79 -0
  108. package/dist/get-analytics-ZLI3A4F5.js +80 -0
  109. package/dist/get-analytics-report-JCKYMA2S.js +29 -0
  110. package/dist/get-analytics-report-SKIP2JWH.js +30 -0
  111. package/dist/get-dataset-APGZBYMH.js +64 -0
  112. package/dist/get-dataset-LWXDVMVE.js +63 -0
  113. package/dist/get-evaluator-3A7BJBAB.js +47 -0
  114. package/dist/{get-evaluator-RZ44UIN6.js → get-evaluator-IWNJINRY.js} +4 -4
  115. package/dist/get-project-EQVB4LEL.js +26 -0
  116. package/dist/{get-project-QSQEAB33.js → get-project-RK6AJTEP.js} +4 -4
  117. package/dist/{get-prompt-GVKXF5NL.js → get-prompt-TLG2T2DS.js} +53 -58
  118. package/dist/get-prompt-ZER557X3.js +94 -0
  119. package/dist/get-run-plan-5X7DDJRN.js +58 -0
  120. package/dist/{get-run-plan-NY7J5GRE.js → get-run-plan-PEHRO5M3.js} +7 -9
  121. package/dist/{get-scenario-Q3LLQE4T.js → get-scenario-375W5D6I.js} +5 -5
  122. package/dist/get-scenario-UQX45ZZO.js +37 -0
  123. package/dist/{get-simulation-run-WINEYDMK.js → get-simulation-run-2NBXJADG.js} +26 -22
  124. package/dist/get-simulation-run-QZTLGL7W.js +69 -0
  125. package/dist/{get-test-suite-4HKA7OKS.js → get-test-suite-GVIBDG7K.js} +5 -5
  126. package/dist/get-test-suite-OODIR3RI.js +48 -0
  127. package/dist/{get-trace-RCUV7N4O.js → get-trace-AGCHVPJK.js} +11 -13
  128. package/dist/get-trace-KJLYAZRC.js +45 -0
  129. package/dist/get-workflow-3TV2YYC5.js +25 -0
  130. package/dist/{get-workflow-EEOC7Y45.js → get-workflow-7LZSVPP2.js} +4 -4
  131. package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
  132. package/dist/{http-server-WCDUARTH.js → http-server-7CCN3EHJ.js} +4249 -325
  133. package/dist/index.js +59595 -38027
  134. package/dist/langwatch-api-analytics-reports-6CF6KUET.js +17 -0
  135. package/dist/langwatch-api-analytics-reports-RPFB5AO5.js +18 -0
  136. package/dist/{langwatch-api-annotations-6DHVZWUK.js → langwatch-api-annotations-H4AI4TKG.js} +4 -4
  137. package/dist/langwatch-api-annotations-QSJNUQQS.js +17 -0
  138. package/dist/langwatch-api-monitors-ENHLOL3S.js +47 -0
  139. package/dist/{langwatch-api-monitors-6ISFJ7WX.js → langwatch-api-monitors-OHSGADTH.js} +11 -16
  140. package/dist/langwatch-api-secrets-AGW6UUMD.js +55 -0
  141. package/dist/langwatch-api-secrets-CLTS766Q.js +56 -0
  142. package/dist/langwatch-api-triggers-G5UWFNN2.js +22 -0
  143. package/dist/langwatch-api-triggers-QMR7KEXW.js +23 -0
  144. package/dist/langwatch-api-workflows-HKTBIKKY.js +15 -0
  145. package/dist/{langwatch-api-workflows-6UJL5U4Z.js → langwatch-api-workflows-OMROZH2O.js} +4 -4
  146. package/dist/{list-agents-AMVDQPQL.js → list-agents-BYWDNAHT.js} +4 -4
  147. package/dist/list-agents-MG24MHZE.js +42 -0
  148. package/dist/list-analytics-reports-G3EPWGSQ.js +32 -0
  149. package/dist/list-analytics-reports-PPWIFRES.js +33 -0
  150. package/dist/list-annotations-QCLGEK5A.js +38 -0
  151. package/dist/{list-annotations-6PR5NLIC.js → list-annotations-Y4EUBJHG.js} +10 -5
  152. package/dist/list-api-keys-DAVOBPFK.js +42 -0
  153. package/dist/{list-api-keys-GVPNBIHQ.js → list-api-keys-JMW5WRXX.js} +10 -5
  154. package/dist/list-dashboards-2P3VJFRS.js +29 -0
  155. package/dist/list-dashboards-MW5O3MKH.js +30 -0
  156. package/dist/list-dataset-records-KEHT7G6Q.js +43 -0
  157. package/dist/{list-dataset-records-O67HZ35Y.js → list-dataset-records-KMLLMZAZ.js} +14 -10
  158. package/dist/{list-datasets-WXZL6UMP.js → list-datasets-P3JK2ZHS.js} +9 -13
  159. package/dist/list-datasets-Z7OOE4KI.js +56 -0
  160. package/dist/{list-evaluators-PAX72WCN.js → list-evaluators-7RRESBOU.js} +5 -7
  161. package/dist/list-evaluators-VATJVOHR.js +32 -0
  162. package/dist/{list-model-providers-VVLZMLCX.js → list-model-providers-OXDRPUCJ.js} +4 -4
  163. package/dist/list-model-providers-VXQJWDXU.js +35 -0
  164. package/dist/{list-projects-AQVI6SUK.js → list-projects-HUVK7L3W.js} +5 -7
  165. package/dist/list-projects-X72ZXVY5.js +40 -0
  166. package/dist/{list-prompt-tags-WZFBJOHG.js → list-prompt-tags-3I3LWFIR.js} +3 -3
  167. package/dist/list-prompt-tags-DRHUH2ND.js +23 -0
  168. package/dist/list-prompts-6DX3QECJ.js +30 -0
  169. package/dist/{list-prompts-BQOHRHYT.js → list-prompts-PS423RU3.js} +4 -6
  170. package/dist/list-run-plans-5SXPOV3X.js +45 -0
  171. package/dist/{list-run-plans-UBAU2DGH.js → list-run-plans-6VNHINPY.js} +5 -5
  172. package/dist/list-scenarios-EQWCW7Q4.js +45 -0
  173. package/dist/{list-scenarios-MS4IUIVM.js → list-scenarios-GKNH3YND.js} +13 -11
  174. package/dist/{list-simulation-runs-D6YF4ZOU.js → list-simulation-runs-KHY7KALI.js} +12 -8
  175. package/dist/list-simulation-runs-PUDK32C2.js +53 -0
  176. package/dist/list-test-suites-7H2DRILK.js +34 -0
  177. package/dist/{list-test-suites-L7R2O6DR.js → list-test-suites-GY56LGLY.js} +4 -4
  178. package/dist/list-trigger-fires-7RZUP54Y.js +19 -0
  179. package/dist/list-trigger-fires-OZUF65LI.js +20 -0
  180. package/dist/list-triggers-BGUCUXTJ.js +45 -0
  181. package/dist/list-triggers-XC5KMX4C.js +46 -0
  182. package/dist/list-workflows-55NYC3PC.js +33 -0
  183. package/dist/{list-workflows-6MV4XJHF.js → list-workflows-HV7FUWZA.js} +5 -7
  184. package/dist/{rename-prompt-tag-K5LQ4CY6.js → rename-prompt-tag-2I7Z5FCY.js} +3 -3
  185. package/dist/rename-prompt-tag-SZYTOWDX.js +18 -0
  186. package/dist/{rename-test-suite-NTYHAO5X.js → rename-test-suite-27AYY33K.js} +4 -4
  187. package/dist/rename-test-suite-CLIEPZDO.js +20 -0
  188. package/dist/report-issue-5HSL7CNB.js +924 -0
  189. package/dist/{report-issue-RHZZ33IS.js → report-issue-N7ND5TM6.js} +107 -67
  190. package/dist/{rerun-run-plan-MUDWJBE4.js → rerun-run-plan-O3VUZ6CG.js} +5 -5
  191. package/dist/rerun-run-plan-OJTVVGJI.js +21 -0
  192. package/dist/{revoke-api-key-6LAZ3QZZ.js → revoke-api-key-BU6BKGCG.js} +4 -4
  193. package/dist/revoke-api-key-NZNCFOIR.js +15 -0
  194. package/dist/run-agent-244O4Y5M.js +75 -0
  195. package/dist/run-agent-HPCGZGYW.js +74 -0
  196. package/dist/run-plan-2ZPGGZ4H.js +38 -0
  197. package/dist/{run-plan-T4ZYOZGA.js → run-plan-KSXUYQT3.js} +7 -7
  198. package/dist/run-query-4LMOQ5UW.js +47 -0
  199. package/dist/run-query-BQUHIUC2.js +46 -0
  200. package/dist/{run-test-suite-L4MZ7G4D.js → run-test-suite-P3WLVPXC.js} +6 -6
  201. package/dist/run-test-suite-UEOMCON6.js +25 -0
  202. package/dist/run-workflow-EFZ6HG5B.js +36 -0
  203. package/dist/{run-workflow-DFIS23AP.js → run-workflow-I4IHEN54.js} +4 -4
  204. package/dist/search-traces-6IR7PR4L.js +170 -0
  205. package/dist/search-traces-BYML2NQ4.js +171 -0
  206. package/dist/set-model-provider-RBNGWFVI.js +33 -0
  207. package/dist/{set-model-provider-XRNMFOVR.js → set-model-provider-SHEVKWRC.js} +4 -4
  208. package/dist/{update-agent-DUWNYBNA.js → update-agent-PTKTM2B5.js} +4 -4
  209. package/dist/update-agent-ZPXWRMS2.js +20 -0
  210. package/dist/update-dashboard-widget-HKCBXH7X.js +62 -0
  211. package/dist/update-dashboard-widget-IP2TTQ5G.js +63 -0
  212. package/dist/update-dataset-GHIN6JR3.js +22 -0
  213. package/dist/{update-dataset-YSOMDCOB.js → update-dataset-IRVMY5PF.js} +6 -6
  214. package/dist/update-dataset-record-6VI7K2CL.js +19 -0
  215. package/dist/{update-dataset-record-DEA2ITYR.js → update-dataset-record-Z3L7ACNF.js} +4 -4
  216. package/dist/update-evaluator-5NLNE6VY.js +24 -0
  217. package/dist/{update-evaluator-NH7Q5GWV.js → update-evaluator-FEH7H6NS.js} +4 -4
  218. package/dist/update-project-75H3LDQT.js +24 -0
  219. package/dist/{update-project-Q26FBSYH.js → update-project-QPR3QX55.js} +4 -4
  220. package/dist/update-prompt-BCDFTNLK.js +140 -0
  221. package/dist/{update-prompt-ZQQ2C3KU.js → update-prompt-NPRXYSWA.js} +27 -29
  222. package/dist/update-scenario-BNOMDCMV.js +34 -0
  223. package/dist/{update-scenario-WUX34JAR.js → update-scenario-EM5XGMB7.js} +5 -5
  224. package/package.json +35 -39
  225. package/pyproject.toml +23 -8
  226. package/src/config.d.ts +6 -0
  227. package/src/config.ts +22 -29
  228. package/src/create-mcp-server.ts +887 -634
  229. package/src/documentation-fetch.ts +21 -20
  230. package/src/http-security.ts +166 -135
  231. package/src/http-server.ts +189 -224
  232. package/src/index.ts +14 -16
  233. package/src/langwatch-api-agents.ts +18 -21
  234. package/src/langwatch-api-analytics-reports.ts +62 -0
  235. package/src/langwatch-api-annotations.ts +11 -12
  236. package/src/langwatch-api-api-keys.ts +8 -9
  237. package/src/langwatch-api-dashboard-widgets.ts +47 -0
  238. package/src/langwatch-api-dashboards.ts +109 -24
  239. package/src/langwatch-api-datasets.ts +98 -32
  240. package/src/langwatch-api-evaluators.ts +13 -19
  241. package/src/langwatch-api-model-providers.ts +4 -4
  242. package/src/langwatch-api-monitors.ts +14 -18
  243. package/src/langwatch-api-projects.ts +10 -9
  244. package/src/langwatch-api-query.ts +114 -0
  245. package/src/langwatch-api-run-plans.ts +12 -29
  246. package/src/langwatch-api-scenarios.ts +9 -11
  247. package/src/langwatch-api-secrets.ts +31 -24
  248. package/src/langwatch-api-simulation-runs.ts +6 -8
  249. package/src/langwatch-api-test-suites.ts +14 -33
  250. package/src/langwatch-api-triggers.ts +96 -34
  251. package/src/langwatch-api-workflows.ts +9 -9
  252. package/src/langwatch-api.ts +118 -124
  253. package/src/public-http-request.ts +21 -12
  254. package/src/schemas/analytics-metrics.ts +3 -15
  255. package/src/schemas/create-dataset.ts +3 -4
  256. package/src/schemas/run-plan.ts +13 -29
  257. package/src/schemas/suite-fields.ts +6 -23
  258. package/src/schemas/triggers.ts +365 -0
  259. package/src/schemas/widget-sources.ts +33 -0
  260. package/src/tools/add-dashboard-widget.ts +51 -0
  261. package/src/tools/archive-project.ts +2 -4
  262. package/src/tools/archive-run-plan.ts +2 -4
  263. package/src/tools/archive-scenario.ts +2 -4
  264. package/src/tools/archive-test-suite.ts +2 -4
  265. package/src/tools/assign-prompt-tag.ts +6 -2
  266. package/src/tools/create-agent.ts +1 -1
  267. package/src/tools/create-analytics-report.ts +7 -0
  268. package/src/tools/create-annotation.ts +7 -2
  269. package/src/tools/create-api-key.ts +4 -6
  270. package/src/tools/create-dataset-records.ts +4 -8
  271. package/src/tools/create-dataset.ts +5 -7
  272. package/src/tools/create-evaluator.ts +3 -5
  273. package/src/tools/create-project.ts +2 -2
  274. package/src/tools/create-prompt-tag.ts +2 -4
  275. package/src/tools/create-prompt.ts +9 -18
  276. package/src/tools/create-scenario.ts +5 -7
  277. package/src/tools/create-test-suite.ts +4 -9
  278. package/src/tools/create-trigger.ts +55 -0
  279. package/src/tools/dashboard-widget-queries.ts +45 -0
  280. package/src/tools/dashboards.ts +104 -0
  281. package/src/tools/delete-agent.ts +1 -1
  282. package/src/tools/delete-analytics-report.ts +7 -0
  283. package/src/tools/delete-annotation.ts +1 -1
  284. package/src/tools/delete-dataset-records.ts +4 -8
  285. package/src/tools/delete-dataset.ts +3 -7
  286. package/src/tools/delete-evaluator.ts +4 -6
  287. package/src/tools/delete-prompt-tag.ts +2 -4
  288. package/src/tools/delete-workflow.ts +1 -1
  289. package/src/tools/discover-evaluator-schema.ts +34 -25
  290. package/src/tools/discover-scenario-schema.ts +41 -21
  291. package/src/tools/discover-schema.ts +149 -27
  292. package/src/tools/experiment-run-status.ts +2 -8
  293. package/src/tools/format-dataset-mutation.ts +5 -10
  294. package/src/tools/format-run-plan.ts +7 -21
  295. package/src/tools/format-scenario.ts +2 -4
  296. package/src/tools/format-suite-details.ts +6 -12
  297. package/src/tools/get-agent.ts +15 -6
  298. package/src/tools/get-analytics-report.ts +23 -0
  299. package/src/tools/get-analytics.ts +52 -46
  300. package/src/tools/get-dataset.ts +34 -16
  301. package/src/tools/get-evaluator.ts +4 -11
  302. package/src/tools/get-experiment-results.ts +219 -186
  303. package/src/tools/get-project.ts +2 -4
  304. package/src/tools/get-prompt.ts +63 -84
  305. package/src/tools/get-run-plan.ts +4 -6
  306. package/src/tools/get-scenario.ts +4 -6
  307. package/src/tools/get-simulation-run.ts +27 -24
  308. package/src/tools/get-test-suite.ts +2 -5
  309. package/src/tools/get-trace.ts +16 -17
  310. package/src/tools/get-workflow.ts +1 -1
  311. package/src/tools/list-agents.ts +1 -1
  312. package/src/tools/list-analytics-reports.ts +27 -0
  313. package/src/tools/list-annotations.ts +8 -5
  314. package/src/tools/list-api-keys.ts +7 -2
  315. package/src/tools/list-dashboards.ts +20 -21
  316. package/src/tools/list-dataset-records.ts +8 -6
  317. package/src/tools/list-datasets.ts +12 -23
  318. package/src/tools/list-evaluators.ts +4 -8
  319. package/src/tools/list-experiment-runs.ts +5 -9
  320. package/src/tools/list-experiments.ts +5 -11
  321. package/src/tools/list-model-providers.ts +3 -5
  322. package/src/tools/list-projects.ts +2 -4
  323. package/src/tools/list-prompt-tags.ts +3 -3
  324. package/src/tools/list-prompts.ts +4 -8
  325. package/src/tools/list-run-plans.ts +2 -2
  326. package/src/tools/list-scenarios.ts +14 -15
  327. package/src/tools/list-simulation-runs.ts +8 -4
  328. package/src/tools/list-test-suites.ts +1 -1
  329. package/src/tools/list-trigger-fires.ts +17 -0
  330. package/src/tools/list-triggers.ts +39 -0
  331. package/src/tools/list-workflows.ts +2 -4
  332. package/src/tools/rename-prompt-tag.ts +1 -1
  333. package/src/tools/rename-test-suite.ts +2 -5
  334. package/src/tools/report-issue.ts +7 -9
  335. package/src/tools/rerun-run-plan.ts +2 -5
  336. package/src/tools/revoke-api-key.ts +2 -4
  337. package/src/tools/run-agent.ts +29 -26
  338. package/src/tools/run-experiment.ts +37 -34
  339. package/src/tools/run-plan.ts +4 -7
  340. package/src/tools/run-query.ts +47 -0
  341. package/src/tools/run-test-suite.ts +4 -7
  342. package/src/tools/run-workflow.ts +2 -5
  343. package/src/tools/search-traces.ts +161 -47
  344. package/src/tools/set-model-provider.ts +4 -6
  345. package/src/tools/test-agent.ts +2 -2
  346. package/src/tools/update-agent.ts +1 -1
  347. package/src/tools/update-dashboard-widget.ts +86 -0
  348. package/src/tools/update-dataset-record.ts +1 -1
  349. package/src/tools/update-dataset.ts +5 -7
  350. package/src/tools/update-evaluator.ts +3 -5
  351. package/src/tools/update-project.ts +1 -1
  352. package/src/tools/update-prompt.ts +44 -59
  353. package/src/tools/update-scenario.ts +5 -7
  354. package/src/tools/update-test-suite.ts +6 -11
  355. package/src/utils/date-parsing.ts +1 -1
  356. package/src/utils/escape-markdown.ts +3 -8
  357. package/src/utils/format-evaluations.ts +6 -6
  358. package/src/utils/markdown-table.ts +58 -0
  359. package/src/utils/trace-id-shape.ts +20 -0
  360. package/tsconfig.app.json +24 -0
  361. package/tsconfig.json +14 -12
  362. package/uv.lock +667 -341
  363. package/vitest.integration.config.js +10 -0
  364. package/vitest.scenario.config.js +9 -0
  365. package/.eslintrc.cjs +0 -36
  366. package/dist/chunk-AN4OUA4D.js +0 -86
  367. package/dist/chunk-GELJ2MQR.js +0 -226
  368. package/dist/chunk-K37ZNPXK.js +0 -24
  369. package/dist/chunk-S4GVX36W.js +0 -39
  370. package/dist/config.d.ts +0 -17
  371. package/dist/create-dashboard-Z76AIPLS.js +0 -19
  372. package/dist/create-mcp-server.d.ts +0 -10
  373. package/dist/delete-dashboard-LYMRPF27.js +0 -19
  374. package/dist/delete-evaluator-RKYC4TNB.js +0 -16
  375. package/dist/discover-evaluator-schema-ESSHQGPY.js +0 -1912
  376. package/dist/get-analytics-R6AZD3AW.js +0 -73
  377. package/dist/get-dashboard-P4WWVHFU.js +0 -30
  378. package/dist/get-dataset-AKTYSQDI.js +0 -49
  379. package/dist/index.d.ts +0 -2
  380. package/dist/langwatch-api-dashboards-2KJL2M42.js +0 -18
  381. package/dist/langwatch-api-secrets-OEBD6GBU.js +0 -41
  382. package/dist/langwatch-api-triggers-5E6DDGX6.js +0 -31
  383. package/dist/list-dashboards-Z3BZKDGF.js +0 -33
  384. package/dist/run-agent-CAGWGTYT.js +0 -72
  385. package/dist/search-traces-4XTJYXIK.js +0 -79
  386. package/src/__tests__/agent-tools.unit.test.ts +0 -257
  387. package/src/__tests__/all-tools.integration.test.ts +0 -1872
  388. package/src/__tests__/config.unit.test.ts +0 -202
  389. package/src/__tests__/datasets.integration.test.ts +0 -620
  390. package/src/__tests__/datasets.unit.test.ts +0 -244
  391. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  392. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  393. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  394. package/src/__tests__/docker.integration.test.ts +0 -318
  395. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  396. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  397. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  398. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  399. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  400. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  401. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  402. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  403. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  404. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  405. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  406. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  407. package/src/__tests__/http-transport.integration.test.ts +0 -395
  408. package/src/__tests__/integration.integration.test.ts +0 -284
  409. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  410. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  411. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  412. package/src/__tests__/prompt-response-types.unit.test.ts +0 -51
  413. package/src/__tests__/prompts.integration.test.ts +0 -736
  414. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  415. package/src/__tests__/report-issue.integration.test.ts +0 -147
  416. package/src/__tests__/run-plan-tools.unit.test.ts +0 -565
  417. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  418. package/src/__tests__/scenario-tools.unit.test.ts +0 -207
  419. package/src/__tests__/schemas.unit.test.ts +0 -85
  420. package/src/__tests__/simulation-run-tools.unit.test.ts +0 -116
  421. package/src/__tests__/support/http-server-harness.ts +0 -138
  422. package/src/__tests__/test-suite-tools.unit.test.ts +0 -615
  423. package/src/__tests__/tools.integration.test.ts +0 -896
  424. package/src/schemas/filter-fields.ts +0 -119
  425. package/src/schemas/index.ts +0 -9
  426. package/src/tools/create-dashboard.ts +0 -7
  427. package/src/tools/delete-dashboard.ts +0 -7
  428. package/src/tools/get-dashboard.ts +0 -22
@@ -1,117 +1,83 @@
1
+ import {
2
+ getQueryReference,
3
+ markdownTable
4
+ } from "./chunk-GA5JUSPT.js";
5
+ import "./chunk-FOKVY3BK.js";
6
+ import "./chunk-7CZQDZ2K.js";
7
+ import "./chunk-DULFP3MK.js";
1
8
  import "./chunk-SAS5OB7F.js";
2
9
 
3
- // src/schemas/filter-fields.ts
4
- var filterFields = [
5
- {
6
- field: "topics.topics",
7
- description: "Main topic classification of the trace",
8
- example: "billing"
9
- },
10
- {
11
- field: "topics.subtopics",
12
- description: "Subtopic classification",
13
- example: "refund-request"
14
- },
15
- {
16
- field: "metadata.user_id",
17
- description: "User ID from trace metadata",
18
- example: "user-123"
19
- },
20
- {
21
- field: "metadata.thread_id",
22
- description: "Conversation thread ID",
23
- example: "thread-456"
24
- },
25
- {
26
- field: "metadata.customer_id",
27
- description: "Customer/organization ID",
28
- example: "customer-789"
29
- },
30
- {
31
- field: "metadata.labels",
32
- description: "Custom labels attached to traces",
33
- example: "production"
34
- },
35
- {
36
- field: "metadata.key",
37
- description: "Custom metadata key",
38
- example: "environment"
39
- },
40
- {
41
- field: "metadata.value",
42
- description: "Custom metadata value (used with metadata.key)",
43
- example: "staging"
44
- },
45
- {
46
- field: "metadata.prompt_ids",
47
- description: "Prompt IDs used in the trace"
48
- },
49
- {
50
- field: "traces.error",
51
- description: "Whether the trace has errors",
52
- example: "true"
53
- },
10
+ // src/schemas/analytics-groups.ts
11
+ var analyticsGroups = [
54
12
  {
55
- field: "spans.type",
56
- description: "Span type (llm, tool, agent, chain, rag)",
57
- example: "llm"
13
+ name: "topics.topics",
14
+ label: "Topic",
15
+ description: "Group by topic classification"
58
16
  },
59
17
  {
60
- field: "spans.model",
61
- description: "LLM model name used in spans",
62
- example: "gpt-4o"
18
+ name: "metadata.user_id",
19
+ label: "User",
20
+ description: "Group by user ID"
63
21
  },
64
22
  {
65
- field: "evaluations.evaluator_id",
66
- description: "Evaluator that ran on the trace"
23
+ name: "metadata.thread_id",
24
+ label: "Thread",
25
+ description: "Group by conversation thread"
67
26
  },
68
27
  {
69
- field: "evaluations.evaluator_id.guardrails_only",
70
- description: "Evaluator ID filtered to guardrails only"
28
+ name: "metadata.customer_id",
29
+ label: "Customer ID",
30
+ description: "Group by customer/organization"
71
31
  },
72
32
  {
73
- field: "evaluations.passed",
74
- description: "Whether evaluations passed",
75
- example: "true"
33
+ name: "metadata.labels",
34
+ label: "Label",
35
+ description: "Group by custom labels"
76
36
  },
77
37
  {
78
- field: "evaluations.score",
79
- description: "Evaluation score (numeric)"
38
+ name: "metadata.model",
39
+ label: "Model",
40
+ description: "Group by LLM model name"
80
41
  },
81
42
  {
82
- field: "evaluations.state",
83
- description: "Evaluation state (processed, error, skipped)"
43
+ name: "metadata.span_type",
44
+ label: "Span Type",
45
+ description: "Group by span type (llm, tool, agent, etc.)"
84
46
  },
85
47
  {
86
- field: "evaluations.label",
87
- description: "Evaluation label result"
48
+ name: "sentiment.input_sentiment",
49
+ label: "Input Sentiment",
50
+ description: "Group by detected input sentiment (positive, negative, neutral)"
88
51
  },
89
52
  {
90
- field: "events.event_type",
91
- description: "Type of event (thumbs_up_down, custom)",
92
- example: "thumbs_up_down"
53
+ name: "sentiment.thumbs_up_down",
54
+ label: "Thumbs Up/Down",
55
+ description: "Group by user feedback (positive, negative, neutral)"
93
56
  },
94
57
  {
95
- field: "events.metrics.key",
96
- description: "Event metric key"
58
+ name: "events.event_type",
59
+ label: "Event Type",
60
+ description: "Group by event type"
97
61
  },
98
62
  {
99
- field: "events.metrics.value",
100
- description: "Event metric value (numeric)"
63
+ name: "evaluations.evaluation_passed",
64
+ label: "Evaluation Passed",
65
+ description: "Group by evaluation pass/fail status"
101
66
  },
102
67
  {
103
- field: "events.event_details.key",
104
- description: "Event detail key"
68
+ name: "evaluations.evaluation_label",
69
+ label: "Evaluation Label",
70
+ description: "Group by evaluation label result"
105
71
  },
106
72
  {
107
- field: "annotations.hasAnnotation",
108
- description: "Whether trace has human annotations",
109
- example: "true"
73
+ name: "evaluations.evaluation_processing_state",
74
+ label: "Evaluation Processing State",
75
+ description: "Group by evaluation processing state"
110
76
  },
111
77
  {
112
- field: "sentiment.input_sentiment",
113
- description: "Detected sentiment of input",
114
- example: "positive"
78
+ name: "error.has_error",
79
+ label: "Contains Error",
80
+ description: "Group by whether the trace contains an error"
115
81
  }
116
82
  ];
117
83
 
@@ -234,17 +200,7 @@ var analyticsMetrics = [
234
200
  category: "events",
235
201
  name: "event_score",
236
202
  label: "Event Score",
237
- allowedAggregations: [
238
- "terms",
239
- "avg",
240
- "sum",
241
- "min",
242
- "max",
243
- "median",
244
- "p99",
245
- "p95",
246
- "p90"
247
- ],
203
+ allowedAggregations: ["terms", "avg", "sum", "min", "max", "median", "p99", "p95", "p90"],
248
204
  description: "Numeric score from events (requires event_type key and metrics key)"
249
205
  },
250
206
  {
@@ -286,85 +242,19 @@ var analyticsMetrics = [
286
242
  }
287
243
  ];
288
244
 
289
- // src/schemas/analytics-groups.ts
290
- var analyticsGroups = [
291
- {
292
- name: "topics.topics",
293
- label: "Topic",
294
- description: "Group by topic classification"
295
- },
296
- {
297
- name: "metadata.user_id",
298
- label: "User",
299
- description: "Group by user ID"
300
- },
301
- {
302
- name: "metadata.thread_id",
303
- label: "Thread",
304
- description: "Group by conversation thread"
305
- },
306
- {
307
- name: "metadata.customer_id",
308
- label: "Customer ID",
309
- description: "Group by customer/organization"
310
- },
311
- {
312
- name: "metadata.labels",
313
- label: "Label",
314
- description: "Group by custom labels"
315
- },
316
- {
317
- name: "metadata.model",
318
- label: "Model",
319
- description: "Group by LLM model name"
320
- },
321
- {
322
- name: "metadata.span_type",
323
- label: "Span Type",
324
- description: "Group by span type (llm, tool, agent, etc.)"
325
- },
326
- {
327
- name: "sentiment.input_sentiment",
328
- label: "Input Sentiment",
329
- description: "Group by detected input sentiment (positive, negative, neutral)"
330
- },
331
- {
332
- name: "sentiment.thumbs_up_down",
333
- label: "Thumbs Up/Down",
334
- description: "Group by user feedback (positive, negative, neutral)"
335
- },
336
- {
337
- name: "events.event_type",
338
- label: "Event Type",
339
- description: "Group by event type"
340
- },
341
- {
342
- name: "evaluations.evaluation_passed",
343
- label: "Evaluation Passed",
344
- description: "Group by evaluation pass/fail status"
345
- },
346
- {
347
- name: "evaluations.evaluation_label",
348
- label: "Evaluation Label",
349
- description: "Group by evaluation label result"
350
- },
351
- {
352
- name: "evaluations.evaluation_processing_state",
353
- label: "Evaluation Processing State",
354
- description: "Group by evaluation processing state"
355
- },
356
- {
357
- name: "error.has_error",
358
- label: "Contains Error",
359
- description: "Group by whether the trace contains an error"
360
- }
361
- ];
362
-
363
245
  // src/tools/discover-schema.ts
364
- function formatSchema(category) {
246
+ var PLATFORM_BACKED = /* @__PURE__ */ new Set(["filters", "lwql", "all"]);
247
+ function needsQueryReference(category) {
248
+ return PLATFORM_BACKED.has(category);
249
+ }
250
+ async function formatSchema(category, reference) {
365
251
  const sections = [];
252
+ const resolved = needsQueryReference(category) && !reference ? await getQueryReference() : reference;
366
253
  if (category === "filters" || category === "all") {
367
- sections.push(formatFilters());
254
+ sections.push(formatFilters(resolved));
255
+ }
256
+ if (category === "lwql" || category === "all") {
257
+ sections.push(formatLangWatchQL(resolved));
368
258
  }
369
259
  if (category === "metrics" || category === "all") {
370
260
  sections.push(formatMetrics());
@@ -375,27 +265,133 @@ function formatSchema(category) {
375
265
  if (category === "groups" || category === "all") {
376
266
  sections.push(formatGroups());
377
267
  }
268
+ if (category === "all" && resolved) {
269
+ sections.push(formatDecisionTable(resolved));
270
+ }
378
271
  return sections.join("\n\n");
379
272
  }
380
- function formatFilters() {
381
- const lines = ["## Available Filter Fields", ""];
273
+ var knownValuesCell = (field) => {
274
+ if (field.knownValues.length > 0) return field.knownValues.join(", ");
275
+ return field.facetable ? "open set, read them from GET /api/v1/traces/facets" : "";
276
+ };
277
+ function formatFilters(reference) {
278
+ if (!reference) {
279
+ return "## Trace Filter Fields\n\nUnavailable: the platform could not be reached.";
280
+ }
281
+ const lines = ["## Trace Filter Fields", ""];
282
+ lines.push(
283
+ "Send one of these as the `filter` parameter of `search_traces`, in the language the Trace Explorer's search bar speaks: `status:error AND model:gpt-*`."
284
+ );
285
+ lines.push(
286
+ "The `filters` parameter is the older per-field map and still works; both are combined when you send both."
287
+ );
288
+ lines.push("");
289
+ lines.push(
290
+ markdownTable({
291
+ headers: ["Field", "Type", "Group", "Known values"],
292
+ rows: reference.traceFilter.fields.map((field) => ({
293
+ Field: field.name,
294
+ Type: field.valueType,
295
+ Group: field.group ?? "",
296
+ "Known values": knownValuesCell(field)
297
+ }))
298
+ })
299
+ );
300
+ lines.push("");
301
+ lines.push("### Attribute namespaces", "");
382
302
  lines.push(
383
- "Use these in the `filters` parameter of `search_traces` and `get_analytics`."
303
+ markdownTable({
304
+ headers: ["Prefix", "Matches", "Older spellings"],
305
+ rows: reference.traceFilter.dynamicPrefixes.map((prefix) => ({
306
+ Prefix: `${prefix.prefix}<key>`,
307
+ Matches: prefix.description,
308
+ "Older spellings": prefix.aliases.join(", ")
309
+ }))
310
+ })
384
311
  );
385
- lines.push('Format: `{ "field_name": ["value1", "value2"] }`');
386
312
  lines.push("");
387
- for (const f of filterFields) {
313
+ lines.push("### Syntax", "");
314
+ lines.push(reference.traceFilter.syntax);
315
+ lines.push("");
316
+ lines.push("### Worked filters", "");
317
+ for (const example of reference.examples.filter(
318
+ (candidate) => candidate.language === "trace-filter"
319
+ )) {
320
+ lines.push(`- \`${example.text}\` \u2014 ${example.title}`);
321
+ }
322
+ return lines.join("\n");
323
+ }
324
+ function formatLangWatchQL(reference) {
325
+ if (!reference) {
326
+ return "## Analytics SQL\n\nUnavailable: the platform could not be reached.";
327
+ }
328
+ if (!reference.lwql.enabled) {
329
+ return [
330
+ "## Analytics SQL",
331
+ "",
332
+ "Not enabled for this project, so `run_query` will refuse. Use `search_traces` and `get_analytics` instead."
333
+ ].join("\n");
334
+ }
335
+ const lines = ["## Analytics SQL", ""];
336
+ lines.push(
337
+ "Run one read-only SELECT with `run_query`. The statement is executed as written: nothing rewrites it."
338
+ );
339
+ lines.push(
340
+ `Ceilings: ${reference.lwql.limits.maxRowsReturned} rows, ${reference.lwql.limits.maxExecutionTimeSeconds} seconds. ${reference.lwql.limits.pagination}`
341
+ );
342
+ lines.push("");
343
+ for (const view of reference.lwql.schema.views) {
344
+ lines.push(`### ${view.name}`);
345
+ lines.push(`${view.description} One row is: ${view.grain}`);
388
346
  lines.push(
389
- `- **${f.field}**: ${f.description}${f.example ? ` (e.g., \`${f.example}\`)` : ""}`
347
+ `Filter on \`${view.timeColumn}\` to prune partitions. Join keys: ${view.joinKeys.join(", ") || "none"}.`
390
348
  );
349
+ lines.push("");
350
+ lines.push(
351
+ markdownTable({
352
+ headers: ["Column", "Type", "Available", "Description"],
353
+ rows: view.columns.map((column) => ({
354
+ Column: column.name,
355
+ Type: column.type,
356
+ Available: column.available ? "yes" : `needs ${column.gates.join(", ")}`,
357
+ Description: column.description
358
+ }))
359
+ })
360
+ );
361
+ lines.push("");
362
+ }
363
+ lines.push("### Worked statements", "");
364
+ for (const example of reference.examples.filter((candidate) => candidate.language === "lwql")) {
365
+ lines.push(
366
+ `**${example.title}**${example.available ? "" : ` (needs ${example.requires.gates.join(", ")})`}`
367
+ );
368
+ lines.push("```sql");
369
+ lines.push(example.text);
370
+ lines.push("```");
371
+ for (const parameter of example.parameters) {
372
+ lines.push(`- \`{${parameter.name}:${parameter.type}}\` \u2014 ${parameter.description}`);
373
+ }
374
+ lines.push("");
391
375
  }
392
376
  return lines.join("\n");
393
377
  }
394
- function formatMetrics() {
395
- const lines = ["## Available Metrics", ""];
378
+ function formatDecisionTable(reference) {
379
+ const lines = ["## Which one to reach for", ""];
396
380
  lines.push(
397
- "Use these in `get_analytics` as `metric` parameter in `category.name` format."
381
+ markdownTable({
382
+ headers: ["When you want", "Use", "Why"],
383
+ rows: reference.decisionTable.map((row) => ({
384
+ "When you want": row.when,
385
+ Use: row.use,
386
+ Why: row.why
387
+ }))
388
+ })
398
389
  );
390
+ return lines.join("\n");
391
+ }
392
+ function formatMetrics() {
393
+ const lines = ["## Available Metrics", ""];
394
+ lines.push("Use these in `get_analytics` as `metric` parameter in `category.name` format.");
399
395
  lines.push("");
400
396
  const byCategory = /* @__PURE__ */ new Map();
401
397
  for (const m of analyticsMetrics) {
@@ -433,9 +429,7 @@ function formatAggregations() {
433
429
  }
434
430
  function formatGroups() {
435
431
  const lines = ["## Available Group-By Options", ""];
436
- lines.push(
437
- "Use these in the `groupBy` parameter of `get_analytics`."
438
- );
432
+ lines.push("Use these in the `groupBy` parameter of `get_analytics`.");
439
433
  lines.push("");
440
434
  for (const g of analyticsGroups) {
441
435
  lines.push(`- **${g.name}** (${g.label}): ${g.description}`);
@@ -443,6 +437,7 @@ function formatGroups() {
443
437
  return lines.join("\n");
444
438
  }
445
439
  export {
446
- formatSchema
440
+ formatSchema,
441
+ needsQueryReference
447
442
  };
448
- //# sourceMappingURL=discover-schema-L6QDPON3.js.map
443
+ //# sourceMappingURL=discover-schema-J2ANOBKO.js.map
@@ -0,0 +1,69 @@
1
+ import {
2
+ getAgent
3
+ } from "./chunk-EYPJBL7P.js";
4
+ import "./chunk-7CZQDZ2K.js";
5
+ import "./chunk-DULFP3MK.js";
6
+
7
+ // src/tools/get-agent.ts
8
+ var describeParameter = ({
9
+ name,
10
+ type,
11
+ options,
12
+ default: defaultValue,
13
+ description,
14
+ required
15
+ }) => {
16
+ const parts = [type];
17
+ if (options?.length) parts.push(`one of ${options.join(", ")}`);
18
+ if (defaultValue !== void 0) parts.push(`default ${JSON.stringify(defaultValue)}`);
19
+ if (required) parts.push("required");
20
+ const suffix = description ? `: ${description}` : "";
21
+ return `- **${name}** (${parts.join(", ")})${suffix}`;
22
+ };
23
+ function instancesSection(instances) {
24
+ const lines = [`
25
+ ## Instances (${instances.length})
26
+ `];
27
+ for (const instance of instances) {
28
+ const label = instance.label ? ` (${instance.label})` : "";
29
+ lines.push(`- ${instance.hostname || instance.id}${label}, connected ${instance.connectedAt}`);
30
+ }
31
+ return lines;
32
+ }
33
+ async function handleGetAgent({ id }) {
34
+ const agent = await getAgent(id);
35
+ const lines = [];
36
+ lines.push(`# ${agent.name}
37
+ `);
38
+ lines.push(`**ID**: ${agent.id}`);
39
+ lines.push(`**Type**: ${agent.type}`);
40
+ if (agent.environment) lines.push(`**Environment**: ${agent.environment}`);
41
+ if (agent.status) lines.push(`**Status**: ${agent.status}`);
42
+ if (agent.owner?.name) lines.push(`**Owner**: ${agent.owner.name}`);
43
+ else if (agent.hostLabel) lines.push(`**Host**: ${agent.hostLabel}`);
44
+ if (agent.selectable === false) {
45
+ lines.push("**Run**: only its owner can run this agent");
46
+ }
47
+ if (agent.lastSeenAt) lines.push(`**Last seen**: ${agent.lastSeenAt}`);
48
+ lines.push(`**Created**: ${agent.createdAt}`);
49
+ lines.push(`**Updated**: ${agent.updatedAt}`);
50
+ if (agent.parameters && agent.parameters.length > 0) {
51
+ lines.push("\n## Parameters\n");
52
+ for (const parameter of agent.parameters) lines.push(describeParameter(parameter));
53
+ }
54
+ if (agent.instances && agent.instances.length > 0) {
55
+ lines.push(...instancesSection(agent.instances));
56
+ }
57
+ if (agent.config && Object.keys(agent.config).length > 0) {
58
+ lines.push("\n## Config\n");
59
+ lines.push("```json");
60
+ lines.push(JSON.stringify(agent.config, null, 2));
61
+ lines.push("```");
62
+ }
63
+ return lines.join("\n");
64
+ }
65
+ export {
66
+ describeParameter,
67
+ handleGetAgent
68
+ };
69
+ //# sourceMappingURL=get-agent-5T3CXQOR.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  getAgent
3
- } from "./chunk-EYXMLE5X.js";
4
- import "./chunk-GELJ2MQR.js";
5
- import "./chunk-WT4PO4A3.js";
3
+ } from "./chunk-4RX3G62A.js";
4
+ import "./chunk-7CZQDZ2K.js";
5
+ import "./chunk-DULFP3MK.js";
6
6
  import "./chunk-SAS5OB7F.js";
7
7
 
8
8
  // src/tools/get-agent.ts
@@ -21,6 +21,16 @@ var describeParameter = ({
21
21
  const suffix = description ? `: ${description}` : "";
22
22
  return `- **${name}** (${parts.join(", ")})${suffix}`;
23
23
  };
24
+ function instancesSection(instances) {
25
+ const lines = [`
26
+ ## Instances (${instances.length})
27
+ `];
28
+ for (const instance of instances) {
29
+ const label = instance.label ? ` (${instance.label})` : "";
30
+ lines.push(`- ${instance.hostname || instance.id}${label}, connected ${instance.connectedAt}`);
31
+ }
32
+ return lines;
33
+ }
24
34
  async function handleGetAgent({ id }) {
25
35
  const agent = await getAgent(id);
26
36
  const lines = [];
@@ -43,13 +53,7 @@ async function handleGetAgent({ id }) {
43
53
  for (const parameter of agent.parameters) lines.push(describeParameter(parameter));
44
54
  }
45
55
  if (agent.instances && agent.instances.length > 0) {
46
- lines.push(`
47
- ## Instances (${agent.instances.length})
48
- `);
49
- for (const instance of agent.instances) {
50
- const label = instance.label ? ` (${instance.label})` : "";
51
- lines.push(`- ${instance.hostname || instance.id}${label}, connected ${instance.connectedAt}`);
52
- }
56
+ lines.push(...instancesSection(agent.instances));
53
57
  }
54
58
  if (agent.config && Object.keys(agent.config).length > 0) {
55
59
  lines.push("\n## Config\n");
@@ -63,4 +67,4 @@ export {
63
67
  describeParameter,
64
68
  handleGetAgent
65
69
  };
66
- //# sourceMappingURL=get-agent-7THF7HCU.js.map
70
+ //# sourceMappingURL=get-agent-ZKYQJUQ7.js.map
@@ -0,0 +1,79 @@
1
+ import {
2
+ parseRelativeDate
3
+ } from "./chunk-BIIKE3EI.js";
4
+ import {
5
+ getAnalyticsTimeseries
6
+ } from "./chunk-7CZQDZ2K.js";
7
+ import "./chunk-DULFP3MK.js";
8
+
9
+ // src/tools/get-analytics.ts
10
+ function getGroupedData(bucket, groupBy) {
11
+ const data = bucket[groupBy];
12
+ if (typeof data === "object" && data !== null && !Array.isArray(data)) {
13
+ return data;
14
+ }
15
+ return void 0;
16
+ }
17
+ function groupedPeriodTable({
18
+ currentPeriod,
19
+ groupBy
20
+ }) {
21
+ const lines = ["| Date | Group | Value |", "|------|-------|-------|"];
22
+ for (const bucket of currentPeriod) {
23
+ const groups = getGroupedData(bucket, groupBy);
24
+ if (!groups) continue;
25
+ for (const [groupKey, metrics] of Object.entries(groups)) {
26
+ const value = Object.values(metrics).find((v) => typeof v === "number") ?? "N/A";
27
+ lines.push(`| ${bucket.date} | ${groupKey} | ${value} |`);
28
+ }
29
+ }
30
+ return lines;
31
+ }
32
+ function periodTable({
33
+ currentPeriod,
34
+ groupBy
35
+ }) {
36
+ if (currentPeriod.length === 0) return ["No data available for this period."];
37
+ if (groupBy && currentPeriod.some((b) => getGroupedData(b, groupBy) !== void 0)) {
38
+ return groupedPeriodTable({ currentPeriod, groupBy });
39
+ }
40
+ const lines = ["| Date | Value |", "|------|-------|"];
41
+ for (const bucket of currentPeriod) {
42
+ const value = Object.entries(bucket).map(([k, v]) => k !== "date" && typeof v === "number" ? v : void 0).find((v) => v !== void 0) ?? "N/A";
43
+ lines.push(`| ${bucket.date} | ${value} |`);
44
+ }
45
+ return lines;
46
+ }
47
+ async function handleGetAnalytics(params) {
48
+ const now = Date.now();
49
+ const startDate = params.startDate ? parseRelativeDate(params.startDate) : now - 7 * 864e5;
50
+ const endDate = params.endDate ? parseRelativeDate(params.endDate) : now;
51
+ const [category, name] = params.metric.includes(".") ? params.metric.split(".", 2) : ["metadata", params.metric];
52
+ const metricKey = `${category}.${name}`;
53
+ const aggregation = params.aggregation ?? "avg";
54
+ const result = await getAnalyticsTimeseries({
55
+ series: [{ metric: metricKey, aggregation }],
56
+ startDate,
57
+ endDate,
58
+ timeZone: params.timeZone ?? "UTC",
59
+ groupBy: params.groupBy,
60
+ filters: params.filters
61
+ });
62
+ const lines = [];
63
+ lines.push(`# Analytics: ${metricKey} (${aggregation})
64
+ `);
65
+ lines.push(
66
+ `Period: ${new Date(startDate).toISOString().split("T")[0]} to ${new Date(endDate).toISOString().split("T")[0]}`
67
+ );
68
+ if (params.groupBy) lines.push(`Grouped by: ${params.groupBy}`);
69
+ lines.push("");
70
+ lines.push(
71
+ ...periodTable({ currentPeriod: result.currentPeriod ?? [], groupBy: params.groupBy })
72
+ );
73
+ lines.push("\n> Tip: Use `discover_schema` to see all available metrics and aggregation types.");
74
+ return lines.join("\n");
75
+ }
76
+ export {
77
+ handleGetAnalytics
78
+ };
79
+ //# sourceMappingURL=get-analytics-4MPEK4KV.js.map