@langwatch/mcp-server 2.2.0 → 3.1.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.
- package/CHANGELOG.md +33 -0
- package/dist/add-dashboard-widget-3IE3W5RR.js +46 -0
- package/dist/add-dashboard-widget-XNAIGV37.js +45 -0
- package/dist/{archive-project-KWFM3I5Z.js → archive-project-LAWWNKTX.js} +4 -4
- package/dist/{archive-project-SPVHXK6A.js → archive-project-X64627XS.js} +4 -4
- package/dist/{archive-run-plan-Z4SYE6BP.js → archive-run-plan-3HKFL5MS.js} +4 -4
- package/dist/{archive-run-plan-65QN3XRX.js → archive-run-plan-C35EJACZ.js} +4 -4
- package/dist/{archive-scenario-A6QV5LOW.js → archive-scenario-3DOXHOJJ.js} +4 -4
- package/dist/{archive-scenario-FXEYQNEH.js → archive-scenario-7KDGEZM5.js} +4 -4
- package/dist/{archive-test-suite-NKZDZY3D.js → archive-test-suite-KZOESY2Y.js} +4 -4
- package/dist/{archive-test-suite-5ADQ3KPQ.js → archive-test-suite-RPJ6ZKBV.js} +4 -4
- package/dist/{assign-prompt-tag-5IUZXJ2T.js → assign-prompt-tag-2A25CXB7.js} +3 -3
- package/dist/{assign-prompt-tag-HBZLBIFD.js → assign-prompt-tag-TQRV6D6V.js} +3 -3
- package/dist/{chunk-Y34DHR5K.js → chunk-27SS5FBC.js} +2 -2
- package/dist/chunk-2RLDGMPZ.js +79 -0
- package/dist/{chunk-VMWJD732.js → chunk-3GVTJ7NK.js} +2 -2
- package/dist/chunk-6DF65T3B.js +36 -0
- package/dist/{chunk-3OCG3QPU.js → chunk-6OLI3LFY.js} +2 -2
- package/dist/{chunk-B4J3PJLX.js → chunk-7HJSQOSZ.js} +2 -6
- package/dist/{chunk-UWLE5T2F.js → chunk-7MNQDTKJ.js} +46 -27
- package/dist/{chunk-I7ATIZED.js → chunk-BHCYKMRH.js} +2 -2
- package/dist/{chunk-H6WGMG2T.js → chunk-DULFP3MK.js} +1 -1
- package/dist/{chunk-NKMTIHIJ.js → chunk-FSU2ZBUM.js} +2 -2
- package/dist/{chunk-SXFC3FNH.js → chunk-I2Z5CBOU.js} +2 -2
- package/dist/{chunk-J7PQKBLD.js → chunk-JEMUBKLJ.js} +533 -402
- package/dist/{chunk-7VNSRCXO.js → chunk-JOFSQFCN.js} +2 -2
- package/dist/{chunk-HGELNIVY.js → chunk-JQN3VXPH.js} +3 -3
- package/dist/{chunk-UTJCWXPZ.js → chunk-LXBQK3J3.js} +2 -2
- package/dist/{chunk-JRJPH75H.js → chunk-MQRTYXHJ.js} +2 -2
- package/dist/{chunk-YCARO42Z.js → chunk-P2JRKSYI.js} +3 -3
- package/dist/{chunk-PTDR56Z3.js → chunk-QF7ZGYVI.js} +2 -2
- package/dist/{chunk-UNJM3BIL.js → chunk-QTAHHJH3.js} +2 -2
- package/dist/chunk-SLRQHMJZ.js +41 -0
- package/dist/{chunk-SUPUUC4W.js → chunk-YQWZ4CDN.js} +5 -3
- package/dist/{config-EAKW6F26.js → config-2WQGMAEN.js} +2 -2
- package/dist/config.js +1 -1
- package/dist/{create-agent-S5ZBCEFT.js → create-agent-IE7Q2Z4C.js} +4 -4
- package/dist/{create-agent-AYZ3LB3V.js → create-agent-JMCQ5WZC.js} +4 -4
- package/dist/create-analytics-report-4X5N7EOT.js +19 -0
- package/dist/create-analytics-report-IKWZRS2O.js +18 -0
- package/dist/{create-annotation-VUSXULQK.js → create-annotation-IZ53SJOX.js} +4 -4
- package/dist/{create-annotation-LHNCLHYP.js → create-annotation-JR6DBHPW.js} +4 -4
- package/dist/{create-api-key-T4KSNPKB.js → create-api-key-IKMOTWCD.js} +4 -4
- package/dist/{create-api-key-NNYKARMG.js → create-api-key-YUDAGOWL.js} +4 -4
- package/dist/{create-dataset-2MC4SD4O.js → create-dataset-54FJCX45.js} +4 -4
- package/dist/{create-dataset-LUP5PVDM.js → create-dataset-ONX3RADL.js} +4 -4
- package/dist/{create-dataset-records-W4GLN2FV.js → create-dataset-records-HPLMFDJY.js} +4 -4
- package/dist/{create-dataset-records-NSKBZP3G.js → create-dataset-records-QZZZF64Z.js} +4 -4
- package/dist/{create-evaluator-HMTYO5SS.js → create-evaluator-I5I52HOQ.js} +4 -4
- package/dist/{create-evaluator-643G6LXL.js → create-evaluator-L66QGSDX.js} +4 -4
- package/dist/create-mcp-server.cjs +851 -597
- package/dist/create-mcp-server.js +523 -392
- package/dist/{create-project-6N7PIYRY.js → create-project-UPZGETN5.js} +4 -4
- package/dist/{create-project-KAIC46UY.js → create-project-Y5EGJKDG.js} +4 -4
- package/dist/{create-prompt-PKJ7EDRR.js → create-prompt-RNUJOL25.js} +3 -3
- package/dist/{create-prompt-E67LXIYT.js → create-prompt-WGQLJASD.js} +3 -3
- package/dist/{create-prompt-tag-OPQUEXWB.js → create-prompt-tag-3ZCA7M7O.js} +3 -3
- package/dist/{create-prompt-tag-4YO3FSJ3.js → create-prompt-tag-R6KIAZTB.js} +3 -3
- package/dist/{create-scenario-UEM77OE7.js → create-scenario-WIMKZLQO.js} +4 -4
- package/dist/{create-scenario-5PJBMAXO.js → create-scenario-WO5NWXVQ.js} +4 -4
- package/dist/{create-test-suite-4IPXVSFQ.js → create-test-suite-AVSR7IIM.js} +4 -4
- package/dist/{create-test-suite-SZEPVXSE.js → create-test-suite-LRKCNIJA.js} +4 -4
- package/dist/{create-trigger-5HZSCRAN.js → create-trigger-CBO2XDYC.js} +4 -4
- package/dist/{create-trigger-PRELMT6J.js → create-trigger-M3VFK5UH.js} +4 -4
- package/dist/dashboards-4X6QUT3E.js +90 -0
- package/dist/dashboards-CX2T6RKH.js +91 -0
- package/dist/{delete-agent-QMEK3XHK.js → delete-agent-QUVDMSOC.js} +4 -4
- package/dist/{delete-agent-JUIZWAXG.js → delete-agent-Y4QTEQ3B.js} +4 -4
- package/dist/delete-analytics-report-T4GIMEOA.js +18 -0
- package/dist/delete-analytics-report-WIP24EXV.js +19 -0
- package/dist/{delete-annotation-VKIQWUYW.js → delete-annotation-BWO5ZEZY.js} +4 -4
- package/dist/{delete-annotation-HY3O2OGR.js → delete-annotation-ESUH3RWN.js} +4 -4
- package/dist/{delete-dataset-WKRUW4FP.js → delete-dataset-N4AEYIAA.js} +4 -4
- package/dist/{delete-dataset-HQCR66MG.js → delete-dataset-ZRD23FLO.js} +4 -4
- package/dist/{delete-dataset-records-SDUHQLLM.js → delete-dataset-records-HC7VLBT7.js} +4 -4
- package/dist/{delete-dataset-records-C2IQFFVQ.js → delete-dataset-records-XC2DFVXD.js} +4 -4
- package/dist/{delete-evaluator-QP3QHTLN.js → delete-evaluator-27P5XLNV.js} +4 -4
- package/dist/{delete-evaluator-4SNSCLEE.js → delete-evaluator-LJII4YLC.js} +4 -4
- package/dist/{delete-prompt-tag-YYQ4VMAD.js → delete-prompt-tag-DH7IQO4X.js} +3 -3
- package/dist/{delete-prompt-tag-NZ4JQMYG.js → delete-prompt-tag-OC57CN32.js} +3 -3
- package/dist/{delete-workflow-5J46T73T.js → delete-workflow-I4IXK3ZL.js} +4 -4
- package/dist/{delete-workflow-JSWABL5F.js → delete-workflow-JXREDDW7.js} +4 -4
- package/dist/{discover-schema-A33SLMXW.js → discover-schema-ME5BAD2S.js} +4 -4
- package/dist/{discover-schema-55YJBFGQ.js → discover-schema-OHYBG3CY.js} +4 -4
- package/dist/{get-agent-LJQX7OF4.js → get-agent-6GKIKKL7.js} +4 -4
- package/dist/{get-agent-OTIYUFZA.js → get-agent-UKZUBVPB.js} +4 -4
- package/dist/{get-analytics-IQZKJHLW.js → get-analytics-TI2U3JLA.js} +3 -3
- package/dist/{get-analytics-DCS72353.js → get-analytics-ZGQ4LY3I.js} +3 -3
- package/dist/get-analytics-report-PD6XZ4ZA.js +29 -0
- package/dist/get-analytics-report-QMXNQ7VA.js +30 -0
- package/dist/{get-dataset-ALSP7RTX.js → get-dataset-5QORNVOZ.js} +4 -4
- package/dist/{get-dataset-X4B5JDG2.js → get-dataset-E5WLIPNK.js} +4 -4
- package/dist/{get-evaluator-XEUZGZCH.js → get-evaluator-GYQFB4F3.js} +4 -4
- package/dist/{get-evaluator-ISMC4LLI.js → get-evaluator-QQV65MQB.js} +4 -4
- package/dist/{get-project-5VKROSDH.js → get-project-43SGQCAT.js} +4 -4
- package/dist/{get-project-RM6FRCBK.js → get-project-W5DCKXZP.js} +4 -4
- package/dist/{get-prompt-OWXJZHQQ.js → get-prompt-IUTPSRRI.js} +3 -3
- package/dist/{get-prompt-W52DY36E.js → get-prompt-ZTCWGYJV.js} +3 -3
- package/dist/{get-run-plan-BE3M2AUX.js → get-run-plan-M3LVXMGO.js} +4 -4
- package/dist/{get-run-plan-RUXQ6PAX.js → get-run-plan-MEPEU353.js} +4 -4
- package/dist/{get-scenario-RNM7BAX2.js → get-scenario-2DM4XR44.js} +4 -4
- package/dist/{get-scenario-YM4ODWW6.js → get-scenario-D6EPSSPW.js} +4 -4
- package/dist/{get-simulation-run-6GIATQE5.js → get-simulation-run-53WM2XOO.js} +4 -4
- package/dist/{get-simulation-run-LCFSMPGQ.js → get-simulation-run-RKQ52TKP.js} +4 -4
- package/dist/{get-test-suite-P5LJ6VLF.js → get-test-suite-DP2HNOQZ.js} +4 -4
- package/dist/{get-test-suite-GC2O7YH6.js → get-test-suite-MUSY2CDJ.js} +4 -4
- package/dist/{get-trace-SEF3FMR5.js → get-trace-5Z2BIZ3V.js} +3 -3
- package/dist/{get-trace-KBRVV4NN.js → get-trace-THPWSLD3.js} +3 -3
- package/dist/{get-workflow-YXULW4GC.js → get-workflow-63E7BNLY.js} +4 -4
- package/dist/{get-workflow-7PVED7JE.js → get-workflow-R6XUKTZ7.js} +4 -4
- package/dist/{http-server-IR4QOS43.js → http-server-4JHSQN56.js} +245 -45
- package/dist/index.js +1847 -899
- package/dist/langwatch-api-analytics-reports-IIHGTTQA.js +17 -0
- package/dist/langwatch-api-analytics-reports-IQ6CHM5Y.js +18 -0
- package/dist/{langwatch-api-annotations-TBHLCQ5R.js → langwatch-api-annotations-CN2KYV3Z.js} +4 -4
- package/dist/{langwatch-api-annotations-6SA4OB4C.js → langwatch-api-annotations-CRI6JTQR.js} +4 -4
- package/dist/{langwatch-api-monitors-CBF3FGIM.js → langwatch-api-monitors-66O5Z5LB.js} +3 -3
- package/dist/{langwatch-api-monitors-YNWA2M5Y.js → langwatch-api-monitors-GNHQRPMR.js} +3 -3
- package/dist/{langwatch-api-secrets-RNFO4LF2.js → langwatch-api-secrets-B7BURV76.js} +3 -3
- package/dist/{langwatch-api-secrets-ADTOJELP.js → langwatch-api-secrets-P6SHZOHE.js} +3 -3
- package/dist/{langwatch-api-triggers-KQDQC6L5.js → langwatch-api-triggers-6FR4VWDL.js} +4 -4
- package/dist/{langwatch-api-triggers-QS7HDIVW.js → langwatch-api-triggers-VKNGXSJH.js} +4 -4
- package/dist/langwatch-api-workflows-22RQFYO7.js +15 -0
- package/dist/{langwatch-api-workflows-OKC4FXIF.js → langwatch-api-workflows-KDACD36L.js} +4 -4
- package/dist/{list-agents-RBAOCF53.js → list-agents-SVXWLLO7.js} +4 -4
- package/dist/{list-agents-HVYWEQMI.js → list-agents-XM5JNCVK.js} +4 -4
- package/dist/list-analytics-reports-DEKKC6BU.js +32 -0
- package/dist/list-analytics-reports-E7QFC22G.js +33 -0
- package/dist/{list-annotations-J4UAHSUN.js → list-annotations-5CGNOIKI.js} +4 -4
- package/dist/{list-annotations-HJH4NBLD.js → list-annotations-P26ELIAO.js} +4 -4
- package/dist/{list-api-keys-A2PMV435.js → list-api-keys-B4YL7STE.js} +4 -4
- package/dist/{list-api-keys-7UTJRZDG.js → list-api-keys-ZIJJH755.js} +4 -4
- package/dist/list-dashboards-F4YJPDKD.js +29 -0
- package/dist/list-dashboards-XHYTXEQK.js +30 -0
- package/dist/{list-dataset-records-WFM7F33C.js → list-dataset-records-SWCEDRPX.js} +4 -4
- package/dist/{list-dataset-records-M5TKA6LK.js → list-dataset-records-YWGROVKC.js} +4 -4
- package/dist/{list-datasets-B5X4P7BQ.js → list-datasets-32SCF66H.js} +4 -4
- package/dist/{list-datasets-THUKQHPX.js → list-datasets-YYADWT4D.js} +4 -4
- package/dist/{list-evaluators-MYH2OVCI.js → list-evaluators-KKQKBJKN.js} +4 -4
- package/dist/{list-evaluators-NLVWF6K7.js → list-evaluators-V6LP6ZQA.js} +4 -4
- package/dist/{list-model-providers-3JUGP4YI.js → list-model-providers-RCPVT7R4.js} +4 -4
- package/dist/{list-model-providers-H3XKORFO.js → list-model-providers-TMBSB6EE.js} +4 -4
- package/dist/{list-projects-YNNSRMLC.js → list-projects-4Y74TFDZ.js} +4 -4
- package/dist/{list-projects-6EJ5YYEW.js → list-projects-R4MTRF3C.js} +4 -4
- package/dist/{list-prompt-tags-NVFQO6WX.js → list-prompt-tags-C345AGM2.js} +3 -3
- package/dist/{list-prompt-tags-XUQTTAH4.js → list-prompt-tags-RITKQDC5.js} +3 -3
- package/dist/{list-prompts-IRI6AIXO.js → list-prompts-DSJ2LUSU.js} +3 -3
- package/dist/{list-prompts-HSIMMHTF.js → list-prompts-F7C5L5XK.js} +3 -3
- package/dist/{list-run-plans-PX2XI6EK.js → list-run-plans-YPGLC5QG.js} +4 -4
- package/dist/{list-run-plans-QALLCN2K.js → list-run-plans-ZHRZHCDL.js} +4 -4
- package/dist/{list-scenarios-SSJQEMJP.js → list-scenarios-6HN72TMW.js} +4 -4
- package/dist/{list-scenarios-QZRPVHS4.js → list-scenarios-HCYFOTSL.js} +4 -4
- package/dist/{list-simulation-runs-OEADLLQR.js → list-simulation-runs-BKVMQQMT.js} +4 -4
- package/dist/{list-simulation-runs-KNOLGMDV.js → list-simulation-runs-JNST5PQU.js} +4 -4
- package/dist/{list-test-suites-N4WVLBKK.js → list-test-suites-4ZVYYKVB.js} +4 -4
- package/dist/{list-test-suites-ANAQBLDG.js → list-test-suites-YY4J3L7H.js} +4 -4
- package/dist/{list-trigger-fires-WTW4DVIW.js → list-trigger-fires-3XM6YZWG.js} +4 -4
- package/dist/{list-trigger-fires-JV3WFYYG.js → list-trigger-fires-5C5XM2KQ.js} +4 -4
- package/dist/{list-triggers-V4Y356AK.js → list-triggers-DARBIIRA.js} +4 -4
- package/dist/{list-triggers-SQNIG35Q.js → list-triggers-MRSWN7RR.js} +4 -4
- package/dist/{list-workflows-ZHTX5LCL.js → list-workflows-BGUSQUJX.js} +4 -4
- package/dist/{list-workflows-IMSX7SXU.js → list-workflows-NXOWP3XS.js} +4 -4
- package/dist/{rename-prompt-tag-IQI7MHOI.js → rename-prompt-tag-F3WT4FB4.js} +3 -3
- package/dist/{rename-prompt-tag-PA2BRIE6.js → rename-prompt-tag-HR5HZZI2.js} +3 -3
- package/dist/{rename-test-suite-NNVLMLKY.js → rename-test-suite-2ZRXG5O7.js} +4 -4
- package/dist/{rename-test-suite-4J7UX5S2.js → rename-test-suite-PWXKE7Z4.js} +4 -4
- package/dist/{report-issue-AS34ZMJF.js → report-issue-HG7XCPOY.js} +28 -2
- package/dist/{report-issue-DCZFLGDO.js → report-issue-TWRFUPGB.js} +28 -2
- package/dist/{rerun-run-plan-TG2V4WM4.js → rerun-run-plan-BFRZFEJB.js} +4 -4
- package/dist/{rerun-run-plan-ZI5OY3VA.js → rerun-run-plan-LXM3RFZC.js} +4 -4
- package/dist/{revoke-api-key-3J3ZA4UB.js → revoke-api-key-GR55PUP4.js} +4 -4
- package/dist/{revoke-api-key-SFMEFWJC.js → revoke-api-key-KCDOYPUK.js} +4 -4
- package/dist/{run-agent-YNV6ZHW4.js → run-agent-HRVRHRHI.js} +4 -4
- package/dist/{run-agent-W4VJP72Z.js → run-agent-WS6TADJQ.js} +4 -4
- package/dist/{run-plan-6C77GWG4.js → run-plan-G24DBB5D.js} +4 -4
- package/dist/{run-plan-PAARQSI4.js → run-plan-NSXMBEC5.js} +4 -4
- package/dist/{run-query-T4QW2Z5O.js → run-query-6YVOA5NV.js} +19 -5
- package/dist/{run-query-KJDH544C.js → run-query-7QIYSDVI.js} +19 -5
- package/dist/{run-test-suite-STB6NUJM.js → run-test-suite-NTKLJZCJ.js} +4 -4
- package/dist/{run-test-suite-SQJELEZX.js → run-test-suite-P33XFQ6H.js} +4 -4
- package/dist/{run-workflow-D6PQNBI6.js → run-workflow-E5ZRSXUB.js} +4 -4
- package/dist/{run-workflow-SP32SO5M.js → run-workflow-HDF6CRLM.js} +4 -4
- package/dist/{search-traces-HCBGOG6R.js → search-traces-X7NSRTTP.js} +3 -3
- package/dist/{search-traces-HSTQ6WTQ.js → search-traces-XWZYOZOM.js} +3 -3
- package/dist/{set-model-provider-GF7NXUJA.js → set-model-provider-XJF47L6H.js} +4 -4
- package/dist/{set-model-provider-KDQ7C4EZ.js → set-model-provider-YPUCFEXG.js} +4 -4
- package/dist/{update-agent-MXNOBS4H.js → update-agent-6FHGWOO7.js} +4 -4
- package/dist/{update-agent-DWG43T2P.js → update-agent-VEDXQRSM.js} +4 -4
- package/dist/update-dashboard-widget-VOKXN7JA.js +64 -0
- package/dist/update-dashboard-widget-VUIQZ7F5.js +63 -0
- package/dist/{update-dataset-SQZ6T4WX.js → update-dataset-7AQ24NRS.js} +4 -4
- package/dist/{update-dataset-DQH3OHOU.js → update-dataset-GHKDCJJQ.js} +4 -4
- package/dist/{update-dataset-record-3AT4IPBC.js → update-dataset-record-IRD6FH2C.js} +4 -4
- package/dist/{update-dataset-record-7PLDGTMR.js → update-dataset-record-ZZUPG7AS.js} +4 -4
- package/dist/{update-evaluator-4LFTKFPT.js → update-evaluator-O6EJFTQJ.js} +4 -4
- package/dist/{update-evaluator-IGTX6PX4.js → update-evaluator-PUJFU5LT.js} +4 -4
- package/dist/{update-project-PLJIOZS6.js → update-project-HO53IHXC.js} +4 -4
- package/dist/{update-project-QVHSJRUP.js → update-project-VTVU6KNP.js} +4 -4
- package/dist/{update-prompt-GDKRYJI3.js → update-prompt-FABVQCAC.js} +3 -3
- package/dist/{update-prompt-MY263DYF.js → update-prompt-MNRLCLBA.js} +3 -3
- package/dist/{update-scenario-MOHRQKAQ.js → update-scenario-MQZZM5CP.js} +4 -4
- package/dist/{update-scenario-7KA3JDXA.js → update-scenario-XIZNUH4I.js} +4 -4
- package/package.json +2 -2
- package/pyproject.toml +17 -2
- package/src/config.d.ts +2 -0
- package/src/config.ts +2 -0
- package/src/create-mcp-server.ts +165 -41
- package/src/langwatch-api-analytics-reports.ts +62 -0
- package/src/langwatch-api-dashboard-widgets.ts +4 -68
- package/src/langwatch-api-dashboards.ts +110 -28
- package/src/langwatch-api-projects.ts +0 -17
- package/src/langwatch-api-query.ts +6 -0
- package/src/langwatch-api.ts +60 -27
- package/src/schemas/widget-sources.ts +69 -0
- package/src/tools/add-dashboard-widget.ts +23 -32
- package/src/tools/create-analytics-report.ts +7 -0
- package/src/tools/dashboard-widget-queries.ts +22 -0
- package/src/tools/dashboards.ts +104 -0
- package/src/tools/delete-analytics-report.ts +7 -0
- package/src/tools/get-analytics-report.ts +23 -0
- package/src/tools/list-analytics-reports.ts +27 -0
- package/src/tools/list-dashboards.ts +20 -21
- package/src/tools/report-issue.ts +2 -0
- package/src/tools/run-experiment.ts +5 -1
- package/src/tools/run-query.ts +23 -1
- package/src/tools/update-dashboard-widget.ts +32 -40
- package/uv.lock +667 -341
- package/dist/add-dashboard-widget-4ZC5UN73.js +0 -50
- package/dist/add-dashboard-widget-ACC6QYBG.js +0 -49
- package/dist/chunk-5FNCQRCX.js +0 -91
- package/dist/chunk-ILZDO25L.js +0 -36
- package/dist/chunk-K2I7Z3LZ.js +0 -28
- package/dist/create-dashboard-DHVFMEU4.js +0 -18
- package/dist/create-dashboard-WTKKS5Z6.js +0 -19
- package/dist/delete-dashboard-76N66XXL.js +0 -18
- package/dist/delete-dashboard-JVIVHNJM.js +0 -19
- package/dist/get-dashboard-5NYJEIX2.js +0 -29
- package/dist/get-dashboard-QMTYDQAZ.js +0 -30
- package/dist/langwatch-api-dashboards-6EO2VVZW.js +0 -17
- package/dist/langwatch-api-dashboards-NHU5BZD7.js +0 -18
- package/dist/langwatch-api-workflows-XGJE6SR5.js +0 -15
- package/dist/list-dashboard-boards-OPWROHMG.js +0 -33
- package/dist/list-dashboard-boards-U2GJ7GC5.js +0 -34
- package/dist/list-dashboards-ROSYFLDQ.js +0 -33
- package/dist/list-dashboards-RQ635ZU7.js +0 -32
- package/dist/update-dashboard-widget-CJKJLCDY.js +0 -71
- package/dist/update-dashboard-widget-CYQDS2NR.js +0 -70
- package/src/langwatch-api-boards.ts +0 -46
- package/src/tools/create-dashboard.ts +0 -7
- package/src/tools/dashboard-exists.ts +0 -25
- package/src/tools/delete-dashboard.ts +0 -7
- package/src/tools/get-dashboard.ts +0 -22
- package/src/tools/list-dashboard-boards.ts +0 -28
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-3YLN3ATJ.js";
|
|
14
14
|
import {
|
|
15
15
|
testAgent
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-JQN3VXPH.js";
|
|
17
17
|
import {
|
|
18
18
|
runParametersSchema,
|
|
19
19
|
runPlanScopeSchema,
|
|
@@ -31,19 +31,19 @@ import {
|
|
|
31
31
|
} from "./chunk-6YZUOD34.js";
|
|
32
32
|
import {
|
|
33
33
|
updateTestSuite
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-3GVTJ7NK.js";
|
|
35
35
|
import {
|
|
36
36
|
LangWatchApiError,
|
|
37
37
|
makeRequest,
|
|
38
38
|
package_default
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-7MNQDTKJ.js";
|
|
40
40
|
import {
|
|
41
41
|
requireApiKey
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-DULFP3MK.js";
|
|
43
43
|
|
|
44
44
|
// src/create-mcp-server.ts
|
|
45
45
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
46
|
-
import { z as
|
|
46
|
+
import { z as z3 } from "zod";
|
|
47
47
|
|
|
48
48
|
// src/documentation-fetch.ts
|
|
49
49
|
var TRUSTED_DOCUMENTATION_ORIGIN = "https://langwatch.ai";
|
|
@@ -158,6 +158,38 @@ var createDatasetSchema = z.object({
|
|
|
158
158
|
columnTypes: z.array(datasetColumnDefinitionSchema).optional().describe("Column definitions for the dataset")
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
+
// src/schemas/widget-sources.ts
|
|
162
|
+
import { z as z2 } from "zod";
|
|
163
|
+
var isAllWord = (id) => id.trim().toLowerCase() === "all";
|
|
164
|
+
var WIDGET_SOURCES = [
|
|
165
|
+
"application",
|
|
166
|
+
"simulation",
|
|
167
|
+
"evaluation",
|
|
168
|
+
"sample",
|
|
169
|
+
"coding_agent",
|
|
170
|
+
"ai_tool",
|
|
171
|
+
"gateway",
|
|
172
|
+
"workflow",
|
|
173
|
+
"playground",
|
|
174
|
+
"langy",
|
|
175
|
+
"other"
|
|
176
|
+
];
|
|
177
|
+
var widgetSourcesInput = z2.array(z2.enum(WIDGET_SOURCES)).max(WIDGET_SOURCES.length).nullable().optional().describe(
|
|
178
|
+
`The trace origins every query of the widget counts: any of ${WIDGET_SOURCES.join(", ")} (other = any origin not listed). A new widget counts ["application"]; add "langy" to count your own conversations, as a widget about Langy's requests needs. null makes it unset again, counting the default.`
|
|
179
|
+
);
|
|
180
|
+
var ALL_NOT_STORED = 'projects holds project ids; "all" is not stored in a widget';
|
|
181
|
+
var widgetProjectsInput = z2.array(z2.string().min(1), {
|
|
182
|
+
error: (issue) => typeof issue.input === "string" && isAllWord(issue.input) ? ALL_NOT_STORED : void 0
|
|
183
|
+
}).min(1).refine((ids) => !ids.some(isAllWord), { message: ALL_NOT_STORED }).nullable().optional().describe(
|
|
184
|
+
"The project ids every query of the widget reads, each one you can read. A new widget reads its board's project. null makes it unset again, reading the board's project."
|
|
185
|
+
);
|
|
186
|
+
var runQueryProjectsInput = z2.union([
|
|
187
|
+
z2.string().refine(isAllWord),
|
|
188
|
+
z2.array(z2.string().min(1)).min(1).refine((ids) => !ids.some(isAllWord), {
|
|
189
|
+
message: '"all" stands alone; send it by itself, or list project ids'
|
|
190
|
+
})
|
|
191
|
+
]);
|
|
192
|
+
|
|
161
193
|
// src/tools/experiment-run-status.ts
|
|
162
194
|
var INTERRUPTED_THRESHOLD_MS = 5 * 60 * 1e3;
|
|
163
195
|
var deriveRunStatus = (timestamps, now = Date.now()) => {
|
|
@@ -537,7 +569,8 @@ async function handleExperimentList(params) {
|
|
|
537
569
|
async function handleRunExperiment(params) {
|
|
538
570
|
const result = await makeRequest(
|
|
539
571
|
"POST",
|
|
540
|
-
`/api/v1/experiments/${encodeURIComponent(params.slug)}/run
|
|
572
|
+
`/api/v1/experiments/${encodeURIComponent(params.slug)}/run`,
|
|
573
|
+
params.concurrency !== void 0 ? { concurrency: params.concurrency } : void 0
|
|
541
574
|
);
|
|
542
575
|
const lines = [];
|
|
543
576
|
lines.push(`Evaluation started!
|
|
@@ -688,8 +721,8 @@ async function handleUpdateTestSuite(params) {
|
|
|
688
721
|
}
|
|
689
722
|
|
|
690
723
|
// src/create-mcp-server.ts
|
|
691
|
-
var modelSchema =
|
|
692
|
-
'Model in "provider/model-name" format, e.g., "openai/gpt-
|
|
724
|
+
var modelSchema = z3.string().describe(
|
|
725
|
+
'Model in "provider/model-name" format, e.g., "openai/gpt-6-luna", "anthropic/claude-sonnet-4-5-20250929"'
|
|
693
726
|
);
|
|
694
727
|
function createMcpServer() {
|
|
695
728
|
const server = new McpServer({
|
|
@@ -724,6 +757,7 @@ function registerTools(server) {
|
|
|
724
757
|
registerEvaluatorTools(server);
|
|
725
758
|
registerModelProviderTools(server);
|
|
726
759
|
registerAgentTools(server);
|
|
760
|
+
registerAnalyticsReportTools(server);
|
|
727
761
|
registerDashboardTools(server);
|
|
728
762
|
registerWorkflowTools(server);
|
|
729
763
|
registerAnnotationTools(server);
|
|
@@ -740,7 +774,7 @@ function registerDocsTools(server) {
|
|
|
740
774
|
"fetch_langwatch_docs",
|
|
741
775
|
"Fetches the LangWatch docs for understanding how to implement LangWatch in your codebase. Always use this tool when the user asks for help with LangWatch. Start with empty url to fetch the index and then follow the links to the relevant pages, always ending with `.md` extension",
|
|
742
776
|
{
|
|
743
|
-
url:
|
|
777
|
+
url: z3.string().optional().describe(
|
|
744
778
|
"The full url of the specific doc page. If not provided, the docs index will be fetched."
|
|
745
779
|
)
|
|
746
780
|
},
|
|
@@ -753,21 +787,21 @@ function registerDocsTools(server) {
|
|
|
753
787
|
"report_issue",
|
|
754
788
|
"Report an issue to the LangWatch team: anything that did not work, confused you, or took trial and error while using LangWatch (docs, MCP tools, CLI, SDKs, the platform). Use it whenever you struggled, it is how rough edges get fixed for every agent. Ask the user for permission first, then call with user_approved=true. Works without an API key. Put VERBATIM error messages in the summary; optionally attach raw session content. Secrets, API keys, emails and phone numbers are redacted locally before anything is sent.",
|
|
755
789
|
{
|
|
756
|
-
user_approved:
|
|
790
|
+
user_approved: z3.boolean().describe(
|
|
757
791
|
"Must be true, and only after the user explicitly agreed to send this report to LangWatch"
|
|
758
792
|
),
|
|
759
|
-
title:
|
|
760
|
-
summary:
|
|
793
|
+
title: z3.string().max(300).describe("One-line description of the issue"),
|
|
794
|
+
summary: z3.string().optional().describe(
|
|
761
795
|
"What you were trying to do, what went wrong (verbatim errors), and what you had to figure out the hard way"
|
|
762
796
|
),
|
|
763
|
-
session_content:
|
|
797
|
+
session_content: z3.string().optional().describe(
|
|
764
798
|
"Optional raw session transcript or log excerpt (JSONL or plain text); redacted locally before sending"
|
|
765
799
|
),
|
|
766
|
-
contact_email:
|
|
767
|
-
agent:
|
|
800
|
+
contact_email: z3.string().optional().describe("Optional contact email for follow-up"),
|
|
801
|
+
agent: z3.string().optional().describe("Which coding agent this is, e.g. claude-code, codex, cursor")
|
|
768
802
|
},
|
|
769
803
|
withToolLogging("report_issue", async (params) => {
|
|
770
|
-
const { handleReportIssue } = await import("./report-issue-
|
|
804
|
+
const { handleReportIssue } = await import("./report-issue-HG7XCPOY.js");
|
|
771
805
|
return {
|
|
772
806
|
content: [{ type: "text", text: await handleReportIssue(params) }]
|
|
773
807
|
};
|
|
@@ -777,7 +811,7 @@ function registerDocsTools(server) {
|
|
|
777
811
|
"fetch_scenario_docs",
|
|
778
812
|
"Fetches the Scenario docs for understanding how to implement Scenario agent tests in your codebase. Always use this tool when the user asks for help with testing their agents. Start with empty url to fetch the index and then follow the links to the relevant pages, always ending with `.md` extension",
|
|
779
813
|
{
|
|
780
|
-
url:
|
|
814
|
+
url: z3.string().optional().describe(
|
|
781
815
|
"The full url of the specific doc page. If not provided, the docs index will be fetched."
|
|
782
816
|
)
|
|
783
817
|
},
|
|
@@ -792,7 +826,7 @@ function registerObservabilityTools(server) {
|
|
|
792
826
|
"discover_schema",
|
|
793
827
|
"Discover what LangWatch can be queried with: the trace filter fields and syntax, the analytics SQL views and columns, the analytics metrics, aggregation types, group-by options, scenario schema and evaluator types. Call this before using search_traces, run_query, get_analytics, scenario tools or evaluator tools, so you never guess a field, a column or a value.",
|
|
794
828
|
{
|
|
795
|
-
category:
|
|
829
|
+
category: z3.enum([
|
|
796
830
|
"filters",
|
|
797
831
|
"lwql",
|
|
798
832
|
"metrics",
|
|
@@ -804,7 +838,7 @@ function registerObservabilityTools(server) {
|
|
|
804
838
|
]).describe(
|
|
805
839
|
"Which schema category to discover. 'filters' is the trace filter language, 'lwql' the analytics SQL views; both are read from the platform and need the API key"
|
|
806
840
|
),
|
|
807
|
-
evaluatorType:
|
|
841
|
+
evaluatorType: z3.string().optional().describe(
|
|
808
842
|
"When category is 'evaluators', provide a specific evaluator type (e.g. 'langevals/llm_boolean') to get its full schema details"
|
|
809
843
|
)
|
|
810
844
|
},
|
|
@@ -821,7 +855,7 @@ function registerObservabilityTools(server) {
|
|
|
821
855
|
content: [{ type: "text", text: formatEvaluatorSchema(evaluatorType) }]
|
|
822
856
|
};
|
|
823
857
|
}
|
|
824
|
-
const { formatSchema, needsQueryReference } = await import("./discover-schema-
|
|
858
|
+
const { formatSchema, needsQueryReference } = await import("./discover-schema-ME5BAD2S.js");
|
|
825
859
|
if (needsQueryReference(category)) requireApiKey();
|
|
826
860
|
let text = await formatSchema(category);
|
|
827
861
|
if (category === "all") {
|
|
@@ -837,16 +871,22 @@ function registerObservabilityTools(server) {
|
|
|
837
871
|
"run_query",
|
|
838
872
|
"Run one read-only analytics SQL statement (LangWatchQL) over this project's traces, spans, evaluations and metrics, and get the rows back as a table. This is the tool for a count, a rate, a sum, a percentile or any of them grouped or over time \u2014 questions search_traces would need many calls to answer. The statement runs exactly as written. Call discover_schema with category 'lwql' first for the views, columns and worked statements.",
|
|
839
873
|
{
|
|
840
|
-
sql:
|
|
874
|
+
sql: z3.string().describe(
|
|
841
875
|
"The SELECT to run. Filter on the dataset's time column so the read is bounded, and never select a whole attribute map"
|
|
842
876
|
),
|
|
843
|
-
parameters:
|
|
877
|
+
parameters: z3.record(z3.string(), z3.union([z3.string(), z3.number(), z3.boolean(), z3.null()])).optional().describe(
|
|
844
878
|
'Values for the parameters the statement declares, e.g. {"days": 7} for {days:UInt32}'
|
|
879
|
+
),
|
|
880
|
+
projects: runQueryProjectsInput.optional().describe(
|
|
881
|
+
'The project ids to read, or the string "all" for every project the key can read (params.dashboard_context_projects lists them). A key that reaches several projects must name them or send "all"; a key that reads one project defaults to it'
|
|
882
|
+
),
|
|
883
|
+
sources: z3.array(z3.string()).optional().describe(
|
|
884
|
+
"The trace sources {dashboard_context_sources:Array(String)} is bound to (default application). Only a statement that reads that parameter is kept to them; a SOURCES_IGNORED diagnostic says it did not"
|
|
845
885
|
)
|
|
846
886
|
},
|
|
847
887
|
withToolLogging("run_query", async (params) => {
|
|
848
888
|
requireApiKey();
|
|
849
|
-
const { handleRunQuery } = await import("./run-query-
|
|
889
|
+
const { handleRunQuery } = await import("./run-query-6YVOA5NV.js");
|
|
850
890
|
return {
|
|
851
891
|
content: [{ type: "text", text: await handleRunQuery(params) }]
|
|
852
892
|
};
|
|
@@ -856,29 +896,29 @@ function registerObservabilityTools(server) {
|
|
|
856
896
|
"search_traces",
|
|
857
897
|
"Search LangWatch traces by content, with filters and a date range. Returns AI-readable trace digests by default. Use format: 'json' for full raw data. To fetch a trace you already have the ID for, use get_trace instead \u2014 free text does not match trace IDs.",
|
|
858
898
|
{
|
|
859
|
-
query:
|
|
899
|
+
query: z3.string().optional().describe(
|
|
860
900
|
"Text search query. Matches captured input/output, the trace name and span names ONLY. It does not match trace IDs \u2014 to fetch a known trace ID use get_trace, or pass traceIds here for several at once."
|
|
861
901
|
),
|
|
862
|
-
traceIds:
|
|
902
|
+
traceIds: z3.array(z3.string().min(1)).min(1).max(1e3).optional().describe(
|
|
863
903
|
"Exact trace IDs to fetch (1\u20131000). Use instead of query when you already know the IDs. When set and no startDate is given, the window defaults to the last 90 days rather than 24 hours."
|
|
864
904
|
),
|
|
865
|
-
filters:
|
|
905
|
+
filters: z3.record(z3.string(), z3.array(z3.string())).optional().describe(
|
|
866
906
|
'Filter traces by the older per-field map. Format: {"field": ["value"]}. Use discover_schema for field names.'
|
|
867
907
|
),
|
|
868
|
-
filter:
|
|
908
|
+
filter: z3.string().optional().describe(
|
|
869
909
|
'Filter traces with the Trace Explorer\'s own query language: "status:error AND model:gpt-*", "trace.attribute.langwatch.user_id:alice", "evaluatorVerdict:fail", a quoted phrase for free text. Reaches attribute keys, span events and evaluator verdicts that the `filters` map cannot. Combined with `filters` and `query` when you send more than one. Call discover_schema with category \'filters\' for every field and the syntax.'
|
|
870
910
|
),
|
|
871
|
-
startDate:
|
|
911
|
+
startDate: z3.string().min(1).optional().describe(
|
|
872
912
|
'Start of the window: ISO date, or relative like "24h", "7d", "4w", "3m" \u2014 units are h (hours), d (days), w (weeks), m (30-day months). Defaults to 24h ago for a text search, or 90d when traceIds is set. Widen this when a search comes back empty.'
|
|
873
913
|
),
|
|
874
|
-
endDate:
|
|
875
|
-
pageSize:
|
|
876
|
-
scrollId:
|
|
877
|
-
format:
|
|
914
|
+
endDate: z3.string().min(1).optional().describe("End of the window: ISO date or relative. Default: now"),
|
|
915
|
+
pageSize: z3.number().optional().describe("Results per page (default: 25, max: 1000)"),
|
|
916
|
+
scrollId: z3.string().optional().describe("Pagination token from previous search"),
|
|
917
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
878
918
|
},
|
|
879
919
|
withToolLogging("search_traces", async (params) => {
|
|
880
920
|
requireApiKey();
|
|
881
|
-
const { handleSearchTraces } = await import("./search-traces-
|
|
921
|
+
const { handleSearchTraces } = await import("./search-traces-X7NSRTTP.js");
|
|
882
922
|
return {
|
|
883
923
|
content: [{ type: "text", text: await handleSearchTraces(params) }]
|
|
884
924
|
};
|
|
@@ -888,14 +928,14 @@ function registerObservabilityTools(server) {
|
|
|
888
928
|
"get_trace",
|
|
889
929
|
"Get full details of a single trace by ID. This is the right tool whenever you have a trace ID \u2014 search_traces does not match IDs. A full ID resolves at any age; a unique 8\u201331 character hex prefix resolves within the last 90 days. Returns AI-readable trace digest by default. Use format: 'json' for full raw data including all spans.",
|
|
890
930
|
{
|
|
891
|
-
traceId:
|
|
931
|
+
traceId: z3.string().describe(
|
|
892
932
|
"The trace ID to retrieve. A full ID resolves at any age; a unique 8\u201331 character hex prefix also resolves, git-style, within the last 90 days."
|
|
893
933
|
),
|
|
894
|
-
format:
|
|
934
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
895
935
|
},
|
|
896
936
|
withToolLogging("get_trace", async (params) => {
|
|
897
937
|
requireApiKey();
|
|
898
|
-
const { handleGetTrace } = await import("./get-trace-
|
|
938
|
+
const { handleGetTrace } = await import("./get-trace-THPWSLD3.js");
|
|
899
939
|
return {
|
|
900
940
|
content: [{ type: "text", text: await handleGetTrace(params) }]
|
|
901
941
|
};
|
|
@@ -905,21 +945,21 @@ function registerObservabilityTools(server) {
|
|
|
905
945
|
"get_analytics",
|
|
906
946
|
'Query analytics timeseries from LangWatch. Metrics use "category.name" format (e.g., "performance.completion_time"). Use discover_schema to see available metrics.',
|
|
907
947
|
{
|
|
908
|
-
metric:
|
|
948
|
+
metric: z3.string().describe(
|
|
909
949
|
'Metric in "category.name" format, e.g., "metadata.trace_id", "performance.total_cost"'
|
|
910
950
|
),
|
|
911
|
-
aggregation:
|
|
951
|
+
aggregation: z3.string().optional().describe(
|
|
912
952
|
"Aggregation type: avg, sum, min, max, median, p90, p95, p99, cardinality, terms. Default: avg"
|
|
913
953
|
),
|
|
914
|
-
startDate:
|
|
915
|
-
endDate:
|
|
916
|
-
timeZone:
|
|
917
|
-
groupBy:
|
|
918
|
-
filters:
|
|
954
|
+
startDate: z3.string().optional().describe('Start date: ISO or relative ("7d", "30d"). Default: 7 days ago'),
|
|
955
|
+
endDate: z3.string().optional().describe("End date. Default: now"),
|
|
956
|
+
timeZone: z3.string().optional().describe("Timezone. Default: UTC"),
|
|
957
|
+
groupBy: z3.string().optional().describe("Group results by field. Use discover_schema for options."),
|
|
958
|
+
filters: z3.record(z3.string(), z3.array(z3.string())).optional().describe("Filters to apply")
|
|
919
959
|
},
|
|
920
960
|
withToolLogging("get_analytics", async (params) => {
|
|
921
961
|
requireApiKey();
|
|
922
|
-
const { handleGetAnalytics } = await import("./get-analytics-
|
|
962
|
+
const { handleGetAnalytics } = await import("./get-analytics-TI2U3JLA.js");
|
|
923
963
|
return {
|
|
924
964
|
content: [{ type: "text", text: await handleGetAnalytics(params) }]
|
|
925
965
|
};
|
|
@@ -938,22 +978,22 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
938
978
|
2. Platform-based (LangWatch UI): If the user wants to manage prompts directly on the LangWatch platform, use the \`platform_\` MCP tools (\`platform_create_prompt\`, \`platform_update_prompt\`, etc.).
|
|
939
979
|
`,
|
|
940
980
|
{
|
|
941
|
-
name:
|
|
942
|
-
handle:
|
|
943
|
-
messages:
|
|
944
|
-
|
|
945
|
-
role:
|
|
946
|
-
content:
|
|
981
|
+
name: z3.string().describe("Prompt display name"),
|
|
982
|
+
handle: z3.string().optional().describe("URL-friendly handle (auto-generated from name if omitted)"),
|
|
983
|
+
messages: z3.array(
|
|
984
|
+
z3.object({
|
|
985
|
+
role: z3.enum(["system", "user", "assistant"]).describe("Message role"),
|
|
986
|
+
content: z3.string().describe("Message content")
|
|
947
987
|
})
|
|
948
988
|
).describe("Prompt messages"),
|
|
949
989
|
model: modelSchema,
|
|
950
|
-
tags:
|
|
990
|
+
tags: z3.array(z3.string()).optional().describe(
|
|
951
991
|
'Tags to assign to the initial version (e.g., ["production", "staging"]). Built-in tags: "latest" (auto-assigned), "production", "staging". Custom tags must be created first.'
|
|
952
992
|
)
|
|
953
993
|
},
|
|
954
994
|
withToolLogging("platform_create_prompt", async (params) => {
|
|
955
995
|
requireApiKey();
|
|
956
|
-
const { handleCreatePrompt } = await import("./create-prompt-
|
|
996
|
+
const { handleCreatePrompt } = await import("./create-prompt-RNUJOL25.js");
|
|
957
997
|
return {
|
|
958
998
|
content: [{ type: "text", text: await handleCreatePrompt(params) }]
|
|
959
999
|
};
|
|
@@ -965,7 +1005,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
965
1005
|
{},
|
|
966
1006
|
withToolLogging("platform_list_prompts", async () => {
|
|
967
1007
|
requireApiKey();
|
|
968
|
-
const { handleListPrompts } = await import("./list-prompts-
|
|
1008
|
+
const { handleListPrompts } = await import("./list-prompts-DSJ2LUSU.js");
|
|
969
1009
|
return {
|
|
970
1010
|
content: [{ type: "text", text: await handleListPrompts() }]
|
|
971
1011
|
};
|
|
@@ -975,12 +1015,12 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
975
1015
|
"platform_get_prompt",
|
|
976
1016
|
"Get a specific prompt from the LangWatch platform by ID or handle, including messages, model config, and version history. Use format: 'json' for the full raw API payload, or 'digest' (default) for a formatted summary.",
|
|
977
1017
|
{
|
|
978
|
-
idOrHandle:
|
|
979
|
-
version:
|
|
980
|
-
tag:
|
|
1018
|
+
idOrHandle: z3.string().describe("Prompt ID or handle"),
|
|
1019
|
+
version: z3.number().optional().describe("Specific version number (default: latest)"),
|
|
1020
|
+
tag: z3.string().optional().describe(
|
|
981
1021
|
'Fetch the version pointed to by this tag (e.g., "production", "staging"). Alternatively, use shorthand in idOrHandle: "pizza-prompt:production"'
|
|
982
1022
|
),
|
|
983
|
-
format:
|
|
1023
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
984
1024
|
},
|
|
985
1025
|
withToolLogging("platform_get_prompt", async (params) => {
|
|
986
1026
|
if (params.version != null && params.tag) {
|
|
@@ -990,7 +1030,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
990
1030
|
};
|
|
991
1031
|
}
|
|
992
1032
|
requireApiKey();
|
|
993
|
-
const { handleGetPrompt } = await import("./get-prompt-
|
|
1033
|
+
const { handleGetPrompt } = await import("./get-prompt-ZTCWGYJV.js");
|
|
994
1034
|
return {
|
|
995
1035
|
content: [{ type: "text", text: await handleGetPrompt(params) }]
|
|
996
1036
|
};
|
|
@@ -1000,20 +1040,20 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1000
1040
|
"platform_update_prompt",
|
|
1001
1041
|
"Update an existing prompt on the LangWatch platform. Every update creates a new version.",
|
|
1002
1042
|
{
|
|
1003
|
-
idOrHandle:
|
|
1004
|
-
messages:
|
|
1005
|
-
|
|
1006
|
-
role:
|
|
1007
|
-
content:
|
|
1043
|
+
idOrHandle: z3.string().describe("Prompt ID or handle to update"),
|
|
1044
|
+
messages: z3.array(
|
|
1045
|
+
z3.object({
|
|
1046
|
+
role: z3.enum(["system", "user", "assistant"]),
|
|
1047
|
+
content: z3.string()
|
|
1008
1048
|
})
|
|
1009
1049
|
).optional().describe("Updated messages"),
|
|
1010
1050
|
model: modelSchema.optional(),
|
|
1011
|
-
commitMessage:
|
|
1012
|
-
tags:
|
|
1051
|
+
commitMessage: z3.string().describe("Commit message describing the change"),
|
|
1052
|
+
tags: z3.array(z3.string()).optional().describe("Tags to assign to the new version created by this update.")
|
|
1013
1053
|
},
|
|
1014
1054
|
withToolLogging("platform_update_prompt", async (params) => {
|
|
1015
1055
|
requireApiKey();
|
|
1016
|
-
const { handleUpdatePrompt } = await import("./update-prompt-
|
|
1056
|
+
const { handleUpdatePrompt } = await import("./update-prompt-FABVQCAC.js");
|
|
1017
1057
|
return {
|
|
1018
1058
|
content: [{ type: "text", text: await handleUpdatePrompt(params) }]
|
|
1019
1059
|
};
|
|
@@ -1023,13 +1063,13 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1023
1063
|
"platform_assign_prompt_tag",
|
|
1024
1064
|
'Assign a tag (e.g. "production") to a specific version of a prompt. Use this to "deploy" a version by promoting it to the production tag.',
|
|
1025
1065
|
{
|
|
1026
|
-
idOrHandle:
|
|
1027
|
-
tag:
|
|
1028
|
-
versionId:
|
|
1066
|
+
idOrHandle: z3.string().describe("Prompt ID or handle"),
|
|
1067
|
+
tag: z3.string().describe('Tag name (e.g., "production", "staging")'),
|
|
1068
|
+
versionId: z3.string().describe("The version ID to assign the tag to")
|
|
1029
1069
|
},
|
|
1030
1070
|
withToolLogging("platform_assign_prompt_tag", async (params) => {
|
|
1031
1071
|
requireApiKey();
|
|
1032
|
-
const { handleAssignPromptTag } = await import("./assign-prompt-tag-
|
|
1072
|
+
const { handleAssignPromptTag } = await import("./assign-prompt-tag-2A25CXB7.js");
|
|
1033
1073
|
return {
|
|
1034
1074
|
content: [{ type: "text", text: await handleAssignPromptTag(params) }]
|
|
1035
1075
|
};
|
|
@@ -1041,7 +1081,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1041
1081
|
{},
|
|
1042
1082
|
withToolLogging("platform_list_prompt_tags", async () => {
|
|
1043
1083
|
requireApiKey();
|
|
1044
|
-
const { handleListPromptTags } = await import("./list-prompt-tags-
|
|
1084
|
+
const { handleListPromptTags } = await import("./list-prompt-tags-RITKQDC5.js");
|
|
1045
1085
|
return {
|
|
1046
1086
|
content: [{ type: "text", text: await handleListPromptTags() }]
|
|
1047
1087
|
};
|
|
@@ -1051,11 +1091,11 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1051
1091
|
"platform_create_prompt_tag",
|
|
1052
1092
|
'Create a custom prompt tag definition for the organization. Tag names must be non-numeric and not "latest".',
|
|
1053
1093
|
{
|
|
1054
|
-
name:
|
|
1094
|
+
name: z3.string().describe("Tag name to create")
|
|
1055
1095
|
},
|
|
1056
1096
|
withToolLogging("platform_create_prompt_tag", async (params) => {
|
|
1057
1097
|
requireApiKey();
|
|
1058
|
-
const { handleCreatePromptTag } = await import("./create-prompt-tag-
|
|
1098
|
+
const { handleCreatePromptTag } = await import("./create-prompt-tag-R6KIAZTB.js");
|
|
1059
1099
|
return {
|
|
1060
1100
|
content: [{ type: "text", text: await handleCreatePromptTag(params) }]
|
|
1061
1101
|
};
|
|
@@ -1065,12 +1105,12 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1065
1105
|
"platform_rename_prompt_tag",
|
|
1066
1106
|
'Rename an existing prompt tag. The "latest" tag cannot be renamed.',
|
|
1067
1107
|
{
|
|
1068
|
-
tag:
|
|
1069
|
-
name:
|
|
1108
|
+
tag: z3.string().describe("Current tag name to rename"),
|
|
1109
|
+
name: z3.string().describe("New tag name")
|
|
1070
1110
|
},
|
|
1071
1111
|
withToolLogging("platform_rename_prompt_tag", async (params) => {
|
|
1072
1112
|
requireApiKey();
|
|
1073
|
-
const { handleRenamePromptTag } = await import("./rename-prompt-tag-
|
|
1113
|
+
const { handleRenamePromptTag } = await import("./rename-prompt-tag-HR5HZZI2.js");
|
|
1074
1114
|
return {
|
|
1075
1115
|
content: [{ type: "text", text: await handleRenamePromptTag(params) }]
|
|
1076
1116
|
};
|
|
@@ -1080,11 +1120,11 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
|
|
|
1080
1120
|
"platform_delete_prompt_tag",
|
|
1081
1121
|
'Delete a prompt tag and all its assignments. The "latest" tag cannot be deleted.',
|
|
1082
1122
|
{
|
|
1083
|
-
tag:
|
|
1123
|
+
tag: z3.string().describe("Tag name to delete")
|
|
1084
1124
|
},
|
|
1085
1125
|
withToolLogging("platform_delete_prompt_tag", async (params) => {
|
|
1086
1126
|
requireApiKey();
|
|
1087
|
-
const { handleDeletePromptTag } = await import("./delete-prompt-tag-
|
|
1127
|
+
const { handleDeletePromptTag } = await import("./delete-prompt-tag-OC57CN32.js");
|
|
1088
1128
|
return {
|
|
1089
1129
|
content: [{ type: "text", text: await handleDeletePromptTag(params) }]
|
|
1090
1130
|
};
|
|
@@ -1103,18 +1143,18 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
|
|
|
1103
1143
|
2. Platform-based (LangWatch UI): If the user wants to manage scenarios directly on the LangWatch platform, use the \`platform_\` MCP tools (\`platform_create_scenario\`, \`platform_update_scenario\`, etc.).
|
|
1104
1144
|
`,
|
|
1105
1145
|
{
|
|
1106
|
-
name:
|
|
1107
|
-
situation:
|
|
1108
|
-
criteria:
|
|
1109
|
-
labels:
|
|
1110
|
-
testSuiteId:
|
|
1146
|
+
name: z3.string().describe("Scenario name"),
|
|
1147
|
+
situation: z3.string().describe("The context or setup describing what the user/agent is doing"),
|
|
1148
|
+
criteria: z3.array(z3.string()).optional().describe("Pass/fail conditions the agent's response must satisfy"),
|
|
1149
|
+
labels: z3.array(z3.string()).optional().describe("Tags for organizing and filtering scenarios"),
|
|
1150
|
+
testSuiteId: z3.string().nullish().describe(
|
|
1111
1151
|
"The test suite to file this scenario in. Pass a test suite ID, or null to unfile it."
|
|
1112
1152
|
),
|
|
1113
1153
|
fields: scenarioFieldValuesSchema.optional()
|
|
1114
1154
|
},
|
|
1115
1155
|
withToolLogging("platform_create_scenario", async (params) => {
|
|
1116
1156
|
requireApiKey();
|
|
1117
|
-
const { handleCreateScenario } = await import("./create-scenario-
|
|
1157
|
+
const { handleCreateScenario } = await import("./create-scenario-WO5NWXVQ.js");
|
|
1118
1158
|
return {
|
|
1119
1159
|
content: [{ type: "text", text: await handleCreateScenario(params) }]
|
|
1120
1160
|
};
|
|
@@ -1124,12 +1164,12 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
|
|
|
1124
1164
|
"platform_list_scenarios",
|
|
1125
1165
|
"List all scenarios on the LangWatch platform. Returns AI-readable digest by default.",
|
|
1126
1166
|
{
|
|
1127
|
-
testSuiteId:
|
|
1128
|
-
format:
|
|
1167
|
+
testSuiteId: z3.string().optional().describe("Only the scenarios filed in this test suite"),
|
|
1168
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
1129
1169
|
},
|
|
1130
1170
|
withToolLogging("platform_list_scenarios", async (params) => {
|
|
1131
1171
|
requireApiKey();
|
|
1132
|
-
const { handleListScenarios } = await import("./list-scenarios-
|
|
1172
|
+
const { handleListScenarios } = await import("./list-scenarios-6HN72TMW.js");
|
|
1133
1173
|
return {
|
|
1134
1174
|
content: [{ type: "text", text: await handleListScenarios(params) }]
|
|
1135
1175
|
};
|
|
@@ -1139,12 +1179,12 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
|
|
|
1139
1179
|
"platform_get_scenario",
|
|
1140
1180
|
"Get full details of a scenario on the LangWatch platform by ID, including situation, criteria, and labels.",
|
|
1141
1181
|
{
|
|
1142
|
-
scenarioId:
|
|
1143
|
-
format:
|
|
1182
|
+
scenarioId: z3.string().describe("The scenario ID to retrieve"),
|
|
1183
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
1144
1184
|
},
|
|
1145
1185
|
withToolLogging("platform_get_scenario", async (params) => {
|
|
1146
1186
|
requireApiKey();
|
|
1147
|
-
const { handleGetScenario } = await import("./get-scenario-
|
|
1187
|
+
const { handleGetScenario } = await import("./get-scenario-2DM4XR44.js");
|
|
1148
1188
|
return {
|
|
1149
1189
|
content: [{ type: "text", text: await handleGetScenario(params) }]
|
|
1150
1190
|
};
|
|
@@ -1154,19 +1194,19 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
|
|
|
1154
1194
|
"platform_update_scenario",
|
|
1155
1195
|
"Update an existing scenario on the LangWatch platform.",
|
|
1156
1196
|
{
|
|
1157
|
-
scenarioId:
|
|
1158
|
-
name:
|
|
1159
|
-
situation:
|
|
1160
|
-
criteria:
|
|
1161
|
-
labels:
|
|
1162
|
-
testSuiteId:
|
|
1197
|
+
scenarioId: z3.string().describe("The scenario ID to update"),
|
|
1198
|
+
name: z3.string().optional().describe("Updated scenario name"),
|
|
1199
|
+
situation: z3.string().optional().describe("Updated situation"),
|
|
1200
|
+
criteria: z3.array(z3.string()).optional().describe("Updated criteria"),
|
|
1201
|
+
labels: z3.array(z3.string()).optional().describe("Updated labels"),
|
|
1202
|
+
testSuiteId: z3.string().nullish().describe(
|
|
1163
1203
|
"The test suite to file this scenario in. Pass a test suite ID, or null to unfile it."
|
|
1164
1204
|
),
|
|
1165
1205
|
fields: scenarioFieldValuesSchema.optional()
|
|
1166
1206
|
},
|
|
1167
1207
|
withToolLogging("platform_update_scenario", async (params) => {
|
|
1168
1208
|
requireApiKey();
|
|
1169
|
-
const { handleUpdateScenario } = await import("./update-scenario-
|
|
1209
|
+
const { handleUpdateScenario } = await import("./update-scenario-XIZNUH4I.js");
|
|
1170
1210
|
return {
|
|
1171
1211
|
content: [{ type: "text", text: await handleUpdateScenario(params) }]
|
|
1172
1212
|
};
|
|
@@ -1176,11 +1216,11 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
|
|
|
1176
1216
|
"platform_archive_scenario",
|
|
1177
1217
|
"Archive (soft-delete) a scenario on the LangWatch platform.",
|
|
1178
1218
|
{
|
|
1179
|
-
scenarioId:
|
|
1219
|
+
scenarioId: z3.string().describe("The scenario ID to archive")
|
|
1180
1220
|
},
|
|
1181
1221
|
withToolLogging("platform_archive_scenario", async (params) => {
|
|
1182
1222
|
requireApiKey();
|
|
1183
|
-
const { handleArchiveScenario } = await import("./archive-scenario-
|
|
1223
|
+
const { handleArchiveScenario } = await import("./archive-scenario-7KDGEZM5.js");
|
|
1184
1224
|
return {
|
|
1185
1225
|
content: [{ type: "text", text: await handleArchiveScenario(params) }]
|
|
1186
1226
|
};
|
|
@@ -1192,33 +1232,33 @@ function registerRunPlanTools(server) {
|
|
|
1192
1232
|
"platform_run_plan",
|
|
1193
1233
|
"Run scenarios against targets. The plan name identifies the run plan: an existing name is re-run with the configuration you send here, a new name creates the plan. Configuration is the scope, the targets, the repeat count and the models; parameters, the note and the idempotency key belong to this run alone. Send more than one target to compare them in the same run, and give a target its own parameters to compare one agent on two models.",
|
|
1194
1234
|
{
|
|
1195
|
-
name:
|
|
1235
|
+
name: z3.string().optional().describe(
|
|
1196
1236
|
"The run plan to run. An existing name is replaced with this configuration, a new name creates the plan. Omit to let the server name it after the suite and the target."
|
|
1197
1237
|
),
|
|
1198
1238
|
scope: runPlanScopeSchema.describe(
|
|
1199
1239
|
"What the plan covers: every scenario in the project, the scenarios filed in given test suites, the scenarios carrying given labels, or the hand-picked list in scenarioIds."
|
|
1200
1240
|
),
|
|
1201
|
-
scenarioIds:
|
|
1202
|
-
targets:
|
|
1241
|
+
scenarioIds: z3.array(z3.string()).optional().describe("The scenarios to run. Read only when scope.mode is 'scenarios'."),
|
|
1242
|
+
targets: z3.array(runPlanTargetSchema).describe(
|
|
1203
1243
|
"What to run the scenarios against. Every target runs every scenario, and the results show one column for each, so this is how one run compares two agents or one agent on two models."
|
|
1204
1244
|
),
|
|
1205
|
-
repeatCount:
|
|
1206
|
-
simulatorModel:
|
|
1207
|
-
judgeModel:
|
|
1245
|
+
repeatCount: z3.number().int().min(1).max(5).optional().describe("How many times to run each scenario against each target (1 to 5, default 1)"),
|
|
1246
|
+
simulatorModel: z3.string().optional().describe("Model that plays the user. Omit for the project default."),
|
|
1247
|
+
judgeModel: z3.string().optional().describe("Model that judges the criteria. Omit for the project default."),
|
|
1208
1248
|
evaluators: evaluatorAttachmentsSchema.optional().describe(
|
|
1209
1249
|
"The plan's own evaluators, run beside the ones attached to the test suites its scenarios belong to. A plan evaluator reads the conversation and the trace, never a scenario field. Omit to keep what the plan already holds. See discover_schema({ category: 'scenarios' }) for the mapping paths."
|
|
1210
1250
|
),
|
|
1211
1251
|
parameters: runParametersSchema.optional().describe(
|
|
1212
1252
|
"Values for the parameters the scenarios declare, by name. They apply to every target; a target that names the same parameter overrides them for itself."
|
|
1213
1253
|
),
|
|
1214
|
-
note:
|
|
1215
|
-
idempotencyKey:
|
|
1254
|
+
note: z3.string().max(200).optional().describe("One short line saying why this run was started (max 200 characters)"),
|
|
1255
|
+
idempotencyKey: z3.string().optional().describe(
|
|
1216
1256
|
"Send the same key to make a retry join the run it already started instead of starting a second one."
|
|
1217
1257
|
)
|
|
1218
1258
|
},
|
|
1219
1259
|
withToolLogging("platform_run_plan", async (params) => {
|
|
1220
1260
|
requireApiKey();
|
|
1221
|
-
const { handleRunPlan } = await import("./run-plan-
|
|
1261
|
+
const { handleRunPlan } = await import("./run-plan-G24DBB5D.js");
|
|
1222
1262
|
return {
|
|
1223
1263
|
content: [{ type: "text", text: await handleRunPlan(params) }]
|
|
1224
1264
|
};
|
|
@@ -1228,12 +1268,12 @@ function registerRunPlanTools(server) {
|
|
|
1228
1268
|
"platform_list_run_plans",
|
|
1229
1269
|
"List the run plans of the project. A run plan holds the configuration a run used, keyed by its name.",
|
|
1230
1270
|
{
|
|
1231
|
-
includeArchived:
|
|
1232
|
-
format:
|
|
1271
|
+
includeArchived: z3.boolean().optional().describe("Include archived plans (default false)"),
|
|
1272
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default) or 'json' (raw data)")
|
|
1233
1273
|
},
|
|
1234
1274
|
withToolLogging("platform_list_run_plans", async (params) => {
|
|
1235
1275
|
requireApiKey();
|
|
1236
|
-
const { handleListRunPlans } = await import("./list-run-plans-
|
|
1276
|
+
const { handleListRunPlans } = await import("./list-run-plans-ZHRZHCDL.js");
|
|
1237
1277
|
return {
|
|
1238
1278
|
content: [{ type: "text", text: await handleListRunPlans(params) }]
|
|
1239
1279
|
};
|
|
@@ -1243,12 +1283,12 @@ function registerRunPlanTools(server) {
|
|
|
1243
1283
|
"platform_get_run_plan",
|
|
1244
1284
|
"Get the full configuration of a run plan: what it covers, its targets, its repeat count and its models.",
|
|
1245
1285
|
{
|
|
1246
|
-
id:
|
|
1247
|
-
format:
|
|
1286
|
+
id: z3.string().describe("The run plan ID"),
|
|
1287
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default) or 'json'")
|
|
1248
1288
|
},
|
|
1249
1289
|
withToolLogging("platform_get_run_plan", async (params) => {
|
|
1250
1290
|
requireApiKey();
|
|
1251
|
-
const { handleGetRunPlan } = await import("./get-run-plan-
|
|
1291
|
+
const { handleGetRunPlan } = await import("./get-run-plan-MEPEU353.js");
|
|
1252
1292
|
return {
|
|
1253
1293
|
content: [{ type: "text", text: await handleGetRunPlan(params) }]
|
|
1254
1294
|
};
|
|
@@ -1258,13 +1298,13 @@ function registerRunPlanTools(server) {
|
|
|
1258
1298
|
"platform_rerun_run_plan",
|
|
1259
1299
|
"Run a plan again with the configuration it already holds. Only the parameters and the note belong to the new run.",
|
|
1260
1300
|
{
|
|
1261
|
-
id:
|
|
1301
|
+
id: z3.string().describe("The run plan ID to run again"),
|
|
1262
1302
|
parameters: runParametersSchema.optional().describe("Values for the parameters the scenarios declare, by name."),
|
|
1263
|
-
note:
|
|
1303
|
+
note: z3.string().max(200).optional().describe("One short line saying why this run was started (max 200 characters)")
|
|
1264
1304
|
},
|
|
1265
1305
|
withToolLogging("platform_rerun_run_plan", async (params) => {
|
|
1266
1306
|
requireApiKey();
|
|
1267
|
-
const { handleRerunRunPlan } = await import("./rerun-run-plan-
|
|
1307
|
+
const { handleRerunRunPlan } = await import("./rerun-run-plan-LXM3RFZC.js");
|
|
1268
1308
|
return {
|
|
1269
1309
|
content: [{ type: "text", text: await handleRerunRunPlan(params) }]
|
|
1270
1310
|
};
|
|
@@ -1274,11 +1314,11 @@ function registerRunPlanTools(server) {
|
|
|
1274
1314
|
"platform_archive_run_plan",
|
|
1275
1315
|
"Archive a run plan. Its past runs stay readable and the name is free for a new plan.",
|
|
1276
1316
|
{
|
|
1277
|
-
id:
|
|
1317
|
+
id: z3.string().describe("The run plan ID to archive")
|
|
1278
1318
|
},
|
|
1279
1319
|
withToolLogging("platform_archive_run_plan", async (params) => {
|
|
1280
1320
|
requireApiKey();
|
|
1281
|
-
const { handleArchiveRunPlan } = await import("./archive-run-plan-
|
|
1321
|
+
const { handleArchiveRunPlan } = await import("./archive-run-plan-3HKFL5MS.js");
|
|
1282
1322
|
return {
|
|
1283
1323
|
content: [{ type: "text", text: await handleArchiveRunPlan(params) }]
|
|
1284
1324
|
};
|
|
@@ -1290,11 +1330,11 @@ function registerTestSuiteTools(server) {
|
|
|
1290
1330
|
"platform_list_test_suites",
|
|
1291
1331
|
"List the test suites of the project. A test suite groups scenarios.",
|
|
1292
1332
|
{
|
|
1293
|
-
format:
|
|
1333
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default) or 'json' (raw data)")
|
|
1294
1334
|
},
|
|
1295
1335
|
withToolLogging("platform_list_test_suites", async (params) => {
|
|
1296
1336
|
requireApiKey();
|
|
1297
|
-
const { handleListTestSuites } = await import("./list-test-suites-
|
|
1337
|
+
const { handleListTestSuites } = await import("./list-test-suites-YY4J3L7H.js");
|
|
1298
1338
|
return {
|
|
1299
1339
|
content: [{ type: "text", text: await handleListTestSuites(params) }]
|
|
1300
1340
|
};
|
|
@@ -1304,13 +1344,13 @@ function registerTestSuiteTools(server) {
|
|
|
1304
1344
|
"platform_create_test_suite",
|
|
1305
1345
|
"Create a test suite. A test suite groups scenarios: file a scenario in it by passing the suite ID as testSuiteId on platform_create_scenario or platform_update_scenario. A suite can declare typed fields every scenario carries a value for, and attach saved evaluators that run after every scenario run with mappings from their inputs to the conversation, the scenario's fields or the trace. Call discover_schema({ category: 'scenarios' }) first for the field rules and the mapping paths.",
|
|
1306
1346
|
{
|
|
1307
|
-
name:
|
|
1347
|
+
name: z3.string().describe("Test suite name"),
|
|
1308
1348
|
fields: suiteFieldsSchema.optional(),
|
|
1309
1349
|
evaluators: evaluatorAttachmentsSchema.optional()
|
|
1310
1350
|
},
|
|
1311
1351
|
withToolLogging("platform_create_test_suite", async (params) => {
|
|
1312
1352
|
requireApiKey();
|
|
1313
|
-
const { handleCreateTestSuite } = await import("./create-test-suite-
|
|
1353
|
+
const { handleCreateTestSuite } = await import("./create-test-suite-LRKCNIJA.js");
|
|
1314
1354
|
return {
|
|
1315
1355
|
content: [{ type: "text", text: await handleCreateTestSuite(params) }]
|
|
1316
1356
|
};
|
|
@@ -1320,12 +1360,12 @@ function registerTestSuiteTools(server) {
|
|
|
1320
1360
|
"platform_get_test_suite",
|
|
1321
1361
|
"Get a test suite and the scenarios filed in it.",
|
|
1322
1362
|
{
|
|
1323
|
-
id:
|
|
1324
|
-
format:
|
|
1363
|
+
id: z3.string().describe("The test suite ID"),
|
|
1364
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default) or 'json'")
|
|
1325
1365
|
},
|
|
1326
1366
|
withToolLogging("platform_get_test_suite", async (params) => {
|
|
1327
1367
|
requireApiKey();
|
|
1328
|
-
const { handleGetTestSuite } = await import("./get-test-suite-
|
|
1368
|
+
const { handleGetTestSuite } = await import("./get-test-suite-DP2HNOQZ.js");
|
|
1329
1369
|
return {
|
|
1330
1370
|
content: [{ type: "text", text: await handleGetTestSuite(params) }]
|
|
1331
1371
|
};
|
|
@@ -1335,8 +1375,8 @@ function registerTestSuiteTools(server) {
|
|
|
1335
1375
|
"platform_update_test_suite",
|
|
1336
1376
|
"Edit a test suite: any of its name, its fields and its evaluators. A field list or an evaluator list replaces the one the suite holds; a key left out keeps what the suite has. A field an attached evaluator still reads cannot be removed. Call discover_schema({ category: 'scenarios' }) first for the field rules and the mapping paths.",
|
|
1337
1377
|
{
|
|
1338
|
-
id:
|
|
1339
|
-
name:
|
|
1378
|
+
id: z3.string().describe("The test suite ID"),
|
|
1379
|
+
name: z3.string().optional().describe("The new name. The slug is kept."),
|
|
1340
1380
|
fields: suiteFieldsSchema.optional().describe(
|
|
1341
1381
|
"The full list of fields the suite declares. It replaces the list the suite holds."
|
|
1342
1382
|
),
|
|
@@ -1355,12 +1395,12 @@ function registerTestSuiteTools(server) {
|
|
|
1355
1395
|
"platform_rename_test_suite",
|
|
1356
1396
|
"Rename a test suite.",
|
|
1357
1397
|
{
|
|
1358
|
-
id:
|
|
1359
|
-
name:
|
|
1398
|
+
id: z3.string().describe("The test suite ID"),
|
|
1399
|
+
name: z3.string().describe("The new name")
|
|
1360
1400
|
},
|
|
1361
1401
|
withToolLogging("platform_rename_test_suite", async (params) => {
|
|
1362
1402
|
requireApiKey();
|
|
1363
|
-
const { handleRenameTestSuite } = await import("./rename-test-suite-
|
|
1403
|
+
const { handleRenameTestSuite } = await import("./rename-test-suite-2ZRXG5O7.js");
|
|
1364
1404
|
return {
|
|
1365
1405
|
content: [{ type: "text", text: await handleRenameTestSuite(params) }]
|
|
1366
1406
|
};
|
|
@@ -1370,11 +1410,11 @@ function registerTestSuiteTools(server) {
|
|
|
1370
1410
|
"platform_archive_test_suite",
|
|
1371
1411
|
"Archive a test suite. The scenarios filed in it are archived with it.",
|
|
1372
1412
|
{
|
|
1373
|
-
id:
|
|
1413
|
+
id: z3.string().describe("The test suite ID to archive")
|
|
1374
1414
|
},
|
|
1375
1415
|
withToolLogging("platform_archive_test_suite", async (params) => {
|
|
1376
1416
|
requireApiKey();
|
|
1377
|
-
const { handleArchiveTestSuite } = await import("./archive-test-suite-
|
|
1417
|
+
const { handleArchiveTestSuite } = await import("./archive-test-suite-RPJ6ZKBV.js");
|
|
1378
1418
|
return {
|
|
1379
1419
|
content: [{ type: "text", text: await handleArchiveTestSuite(params) }]
|
|
1380
1420
|
};
|
|
@@ -1384,24 +1424,24 @@ function registerTestSuiteTools(server) {
|
|
|
1384
1424
|
"platform_run_test_suite",
|
|
1385
1425
|
"Run every scenario of a test suite against targets. This creates or joins the run plan named '<suite name> <target name>' unless you send a name of your own. Send more than one target to compare them in the same run, and give a target its own parameters to compare one agent on two models.",
|
|
1386
1426
|
{
|
|
1387
|
-
id:
|
|
1388
|
-
targets:
|
|
1427
|
+
id: z3.string().describe("The test suite ID to run"),
|
|
1428
|
+
targets: z3.array(runPlanTargetSchema).describe(
|
|
1389
1429
|
"What to run the scenarios against. Every target runs every scenario, and the results show one column for each."
|
|
1390
1430
|
),
|
|
1391
|
-
name:
|
|
1431
|
+
name: z3.string().optional().describe(
|
|
1392
1432
|
"The run plan to run. Omit to let the server name it after the suite and the target."
|
|
1393
1433
|
),
|
|
1394
|
-
repeatCount:
|
|
1395
|
-
simulatorModel:
|
|
1396
|
-
judgeModel:
|
|
1434
|
+
repeatCount: z3.number().int().min(1).max(5).optional().describe("How many times to run each scenario against each target (1 to 5, default 1)"),
|
|
1435
|
+
simulatorModel: z3.string().optional().describe("Model that plays the user. Omit for the project default."),
|
|
1436
|
+
judgeModel: z3.string().optional().describe("Model that judges the criteria. Omit for the project default."),
|
|
1397
1437
|
parameters: runParametersSchema.optional().describe(
|
|
1398
1438
|
"Values for the parameters the scenarios declare, by name. They apply to every target; a target that names the same parameter overrides them for itself."
|
|
1399
1439
|
),
|
|
1400
|
-
note:
|
|
1440
|
+
note: z3.string().max(200).optional().describe("One short line saying why this run was started (max 200 characters)")
|
|
1401
1441
|
},
|
|
1402
1442
|
withToolLogging("platform_run_test_suite", async (params) => {
|
|
1403
1443
|
requireApiKey();
|
|
1404
|
-
const { handleRunTestSuite } = await import("./run-test-suite-
|
|
1444
|
+
const { handleRunTestSuite } = await import("./run-test-suite-NTKLJZCJ.js");
|
|
1405
1445
|
return {
|
|
1406
1446
|
content: [{ type: "text", text: await handleRunTestSuite(params) }]
|
|
1407
1447
|
};
|
|
@@ -1413,14 +1453,14 @@ function registerSimulationRunTools(server) {
|
|
|
1413
1453
|
"platform_list_simulation_runs",
|
|
1414
1454
|
"List simulation run results. Filter by scenario set or batch run ID to see specific results.",
|
|
1415
1455
|
{
|
|
1416
|
-
scenarioSetId:
|
|
1417
|
-
batchRunId:
|
|
1418
|
-
limit:
|
|
1419
|
-
format:
|
|
1456
|
+
scenarioSetId: z3.string().optional().describe("Filter by scenario set ID"),
|
|
1457
|
+
batchRunId: z3.string().optional().describe("Filter by batch run ID"),
|
|
1458
|
+
limit: z3.number().optional().describe("Max results to return (default: 20)"),
|
|
1459
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format")
|
|
1420
1460
|
},
|
|
1421
1461
|
withToolLogging("platform_list_simulation_runs", async (params) => {
|
|
1422
1462
|
requireApiKey();
|
|
1423
|
-
const { handleListSimulationRuns } = await import("./list-simulation-runs-
|
|
1463
|
+
const { handleListSimulationRuns } = await import("./list-simulation-runs-JNST5PQU.js");
|
|
1424
1464
|
return {
|
|
1425
1465
|
content: [{ type: "text", text: await handleListSimulationRuns(params) }]
|
|
1426
1466
|
};
|
|
@@ -1430,12 +1470,12 @@ function registerSimulationRunTools(server) {
|
|
|
1430
1470
|
"platform_get_simulation_run",
|
|
1431
1471
|
"Get full details of a simulation run including conversation messages, results, costs, the verdict and the result of every evaluator attached to its test suite or run plan.",
|
|
1432
1472
|
{
|
|
1433
|
-
scenarioRunId:
|
|
1434
|
-
format:
|
|
1473
|
+
scenarioRunId: z3.string().describe("The simulation run ID"),
|
|
1474
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format")
|
|
1435
1475
|
},
|
|
1436
1476
|
withToolLogging("platform_get_simulation_run", async (params) => {
|
|
1437
1477
|
requireApiKey();
|
|
1438
|
-
const { handleGetSimulationRun } = await import("./get-simulation-run-
|
|
1478
|
+
const { handleGetSimulationRun } = await import("./get-simulation-run-53WM2XOO.js");
|
|
1439
1479
|
return {
|
|
1440
1480
|
content: [{ type: "text", text: await handleGetSimulationRun(params) }]
|
|
1441
1481
|
};
|
|
@@ -1447,14 +1487,14 @@ function registerEvaluatorTools(server) {
|
|
|
1447
1487
|
"platform_create_evaluator",
|
|
1448
1488
|
`Create an evaluator on the LangWatch platform. Useful for setting up LLM-as-judge and other evaluators to use in evaluation notebooks. Call discover_schema({ category: 'evaluators' }) first to see available evaluator types and their settings.`,
|
|
1449
1489
|
{
|
|
1450
|
-
name:
|
|
1451
|
-
config:
|
|
1490
|
+
name: z3.string().describe("Evaluator name"),
|
|
1491
|
+
config: z3.record(z3.string(), z3.unknown()).describe(
|
|
1452
1492
|
'Evaluator config object. Must include "evaluatorType" (e.g. "langevals/llm_boolean") and optional "settings" overrides.'
|
|
1453
1493
|
)
|
|
1454
1494
|
},
|
|
1455
1495
|
withToolLogging("platform_create_evaluator", async (params) => {
|
|
1456
1496
|
requireApiKey();
|
|
1457
|
-
const { handleCreateEvaluator } = await import("./create-evaluator-
|
|
1497
|
+
const { handleCreateEvaluator } = await import("./create-evaluator-I5I52HOQ.js");
|
|
1458
1498
|
return {
|
|
1459
1499
|
content: [{ type: "text", text: await handleCreateEvaluator(params) }]
|
|
1460
1500
|
};
|
|
@@ -1466,7 +1506,7 @@ function registerEvaluatorTools(server) {
|
|
|
1466
1506
|
{},
|
|
1467
1507
|
withToolLogging("platform_list_evaluators", async () => {
|
|
1468
1508
|
requireApiKey();
|
|
1469
|
-
const { handleListEvaluators } = await import("./list-evaluators-
|
|
1509
|
+
const { handleListEvaluators } = await import("./list-evaluators-V6LP6ZQA.js");
|
|
1470
1510
|
return {
|
|
1471
1511
|
content: [{ type: "text", text: await handleListEvaluators() }]
|
|
1472
1512
|
};
|
|
@@ -1476,11 +1516,11 @@ function registerEvaluatorTools(server) {
|
|
|
1476
1516
|
"platform_get_evaluator",
|
|
1477
1517
|
"Get full details of an evaluator on the LangWatch platform by ID or slug, including config, input fields, and output fields.",
|
|
1478
1518
|
{
|
|
1479
|
-
idOrSlug:
|
|
1519
|
+
idOrSlug: z3.string().describe("The evaluator ID or slug to retrieve")
|
|
1480
1520
|
},
|
|
1481
1521
|
withToolLogging("platform_get_evaluator", async (params) => {
|
|
1482
1522
|
requireApiKey();
|
|
1483
|
-
const { handleGetEvaluator } = await import("./get-evaluator-
|
|
1523
|
+
const { handleGetEvaluator } = await import("./get-evaluator-GYQFB4F3.js");
|
|
1484
1524
|
return {
|
|
1485
1525
|
content: [{ type: "text", text: await handleGetEvaluator(params) }]
|
|
1486
1526
|
};
|
|
@@ -1490,13 +1530,13 @@ function registerEvaluatorTools(server) {
|
|
|
1490
1530
|
"platform_update_evaluator",
|
|
1491
1531
|
"Update an existing evaluator on the LangWatch platform. The evaluatorType in config cannot be changed after creation.",
|
|
1492
1532
|
{
|
|
1493
|
-
evaluatorId:
|
|
1494
|
-
name:
|
|
1495
|
-
config:
|
|
1533
|
+
evaluatorId: z3.string().describe("The evaluator ID to update"),
|
|
1534
|
+
name: z3.string().optional().describe("Updated evaluator name"),
|
|
1535
|
+
config: z3.record(z3.string(), z3.unknown()).optional().describe("Updated config settings. Note: evaluatorType cannot be changed after creation.")
|
|
1496
1536
|
},
|
|
1497
1537
|
withToolLogging("platform_update_evaluator", async (params) => {
|
|
1498
1538
|
requireApiKey();
|
|
1499
|
-
const { handleUpdateEvaluator } = await import("./update-evaluator-
|
|
1539
|
+
const { handleUpdateEvaluator } = await import("./update-evaluator-O6EJFTQJ.js");
|
|
1500
1540
|
return {
|
|
1501
1541
|
content: [{ type: "text", text: await handleUpdateEvaluator(params) }]
|
|
1502
1542
|
};
|
|
@@ -1506,11 +1546,11 @@ function registerEvaluatorTools(server) {
|
|
|
1506
1546
|
"platform_delete_evaluator",
|
|
1507
1547
|
"Archive (soft-delete) an evaluator by ID or slug.",
|
|
1508
1548
|
{
|
|
1509
|
-
idOrSlug:
|
|
1549
|
+
idOrSlug: z3.string().describe("The evaluator ID or slug to archive")
|
|
1510
1550
|
},
|
|
1511
1551
|
withToolLogging("platform_delete_evaluator", async (params) => {
|
|
1512
1552
|
requireApiKey();
|
|
1513
|
-
const { handleDeleteEvaluator } = await import("./delete-evaluator-
|
|
1553
|
+
const { handleDeleteEvaluator } = await import("./delete-evaluator-27P5XLNV.js");
|
|
1514
1554
|
return {
|
|
1515
1555
|
content: [{ type: "text", text: await handleDeleteEvaluator(params) }]
|
|
1516
1556
|
};
|
|
@@ -1522,16 +1562,16 @@ function registerModelProviderTools(server) {
|
|
|
1522
1562
|
"platform_set_model_provider",
|
|
1523
1563
|
`Set or update a model provider on the LangWatch platform. Use this to configure API keys (e.g. OPENAI_API_KEY) needed to run evaluators. The API key is stored securely and never returned in responses. Omit customKeys to update other settings without changing existing keys.`,
|
|
1524
1564
|
{
|
|
1525
|
-
provider:
|
|
1526
|
-
enabled:
|
|
1527
|
-
customKeys:
|
|
1565
|
+
provider: z3.string().describe('Provider name, e.g., "openai", "anthropic", "azure", "custom"'),
|
|
1566
|
+
enabled: z3.boolean().describe("Whether the provider is enabled"),
|
|
1567
|
+
customKeys: z3.record(z3.string(), z3.unknown()).optional().describe(
|
|
1528
1568
|
'API key configuration, e.g. { "OPENAI_API_KEY": "sk-..." }. Omit to keep existing keys.'
|
|
1529
1569
|
),
|
|
1530
|
-
defaultModel:
|
|
1570
|
+
defaultModel: z3.string().optional().describe("Set as project default model")
|
|
1531
1571
|
},
|
|
1532
1572
|
withToolLogging("platform_set_model_provider", async (params) => {
|
|
1533
1573
|
requireApiKey();
|
|
1534
|
-
const { handleSetModelProvider } = await import("./set-model-provider-
|
|
1574
|
+
const { handleSetModelProvider } = await import("./set-model-provider-YPUCFEXG.js");
|
|
1535
1575
|
return {
|
|
1536
1576
|
content: [{ type: "text", text: await handleSetModelProvider(params) }]
|
|
1537
1577
|
};
|
|
@@ -1543,7 +1583,7 @@ function registerModelProviderTools(server) {
|
|
|
1543
1583
|
{},
|
|
1544
1584
|
withToolLogging("platform_list_model_providers", async () => {
|
|
1545
1585
|
requireApiKey();
|
|
1546
|
-
const { handleListModelProviders } = await import("./list-model-providers-
|
|
1586
|
+
const { handleListModelProviders } = await import("./list-model-providers-TMBSB6EE.js");
|
|
1547
1587
|
return {
|
|
1548
1588
|
content: [{ type: "text", text: await handleListModelProviders() }]
|
|
1549
1589
|
};
|
|
@@ -1557,7 +1597,7 @@ function registerAgentTools(server) {
|
|
|
1557
1597
|
{},
|
|
1558
1598
|
withToolLogging("platform_list_agents", async () => {
|
|
1559
1599
|
requireApiKey();
|
|
1560
|
-
const { handleListAgents } = await import("./list-agents-
|
|
1600
|
+
const { handleListAgents } = await import("./list-agents-SVXWLLO7.js");
|
|
1561
1601
|
return {
|
|
1562
1602
|
content: [{ type: "text", text: await handleListAgents() }]
|
|
1563
1603
|
};
|
|
@@ -1567,11 +1607,11 @@ function registerAgentTools(server) {
|
|
|
1567
1607
|
"platform_get_agent",
|
|
1568
1608
|
"Get detailed information about a specific agent by its ID, including its configuration. A connected agent also shows its environment, status, the run parameters it declared (with options and defaults) and the instances connected right now.",
|
|
1569
1609
|
{
|
|
1570
|
-
id:
|
|
1610
|
+
id: z3.string().describe("The agent ID")
|
|
1571
1611
|
},
|
|
1572
1612
|
withToolLogging("platform_get_agent", async (params) => {
|
|
1573
1613
|
requireApiKey();
|
|
1574
|
-
const { handleGetAgent } = await import("./get-agent-
|
|
1614
|
+
const { handleGetAgent } = await import("./get-agent-6GKIKKL7.js");
|
|
1575
1615
|
return {
|
|
1576
1616
|
content: [{ type: "text", text: await handleGetAgent(params) }]
|
|
1577
1617
|
};
|
|
@@ -1581,13 +1621,13 @@ function registerAgentTools(server) {
|
|
|
1581
1621
|
"platform_create_agent",
|
|
1582
1622
|
"Create a new agent. Supported types: 'signature' (LLM prompt), 'code' (Python), 'workflow' (sub-workflow), 'http' (external API). A 'connected' agent is not created here: it registers itself from code, with connectAgent from langwatch/agent in TypeScript or langwatch.connect_agent in Python, and appears in the list once that process runs.",
|
|
1583
1623
|
{
|
|
1584
|
-
name:
|
|
1585
|
-
type:
|
|
1586
|
-
config:
|
|
1624
|
+
name: z3.string().describe("Agent name"),
|
|
1625
|
+
type: z3.enum(["signature", "code", "workflow", "http"]).describe("Agent type"),
|
|
1626
|
+
config: z3.string().optional().describe("Agent configuration as JSON string (will be parsed)")
|
|
1587
1627
|
},
|
|
1588
1628
|
withToolLogging("platform_create_agent", async (params) => {
|
|
1589
1629
|
requireApiKey();
|
|
1590
|
-
const { handleCreateAgent } = await import("./create-agent-
|
|
1630
|
+
const { handleCreateAgent } = await import("./create-agent-IE7Q2Z4C.js");
|
|
1591
1631
|
const parsedConfig = params.config ? JSON.parse(params.config) : void 0;
|
|
1592
1632
|
return {
|
|
1593
1633
|
content: [
|
|
@@ -1600,14 +1640,14 @@ function registerAgentTools(server) {
|
|
|
1600
1640
|
"platform_update_agent",
|
|
1601
1641
|
"Update an existing agent's name, type, or configuration.",
|
|
1602
1642
|
{
|
|
1603
|
-
id:
|
|
1604
|
-
name:
|
|
1605
|
-
type:
|
|
1606
|
-
config:
|
|
1643
|
+
id: z3.string().describe("The agent ID"),
|
|
1644
|
+
name: z3.string().optional().describe("New agent name"),
|
|
1645
|
+
type: z3.string().optional().describe("New agent type: signature, code, workflow, or http"),
|
|
1646
|
+
config: z3.string().optional().describe("Updated configuration as JSON string (will be parsed)")
|
|
1607
1647
|
},
|
|
1608
1648
|
withToolLogging("platform_update_agent", async (params) => {
|
|
1609
1649
|
requireApiKey();
|
|
1610
|
-
const { handleUpdateAgent } = await import("./update-agent-
|
|
1650
|
+
const { handleUpdateAgent } = await import("./update-agent-6FHGWOO7.js");
|
|
1611
1651
|
const parsedConfig = params.config ? JSON.parse(params.config) : void 0;
|
|
1612
1652
|
return {
|
|
1613
1653
|
content: [
|
|
@@ -1620,11 +1660,11 @@ function registerAgentTools(server) {
|
|
|
1620
1660
|
"platform_delete_agent",
|
|
1621
1661
|
"Archive (soft-delete) an agent by its ID.",
|
|
1622
1662
|
{
|
|
1623
|
-
id:
|
|
1663
|
+
id: z3.string().describe("The agent ID to archive")
|
|
1624
1664
|
},
|
|
1625
1665
|
withToolLogging("platform_delete_agent", async (params) => {
|
|
1626
1666
|
requireApiKey();
|
|
1627
|
-
const { handleDeleteAgent } = await import("./delete-agent-
|
|
1667
|
+
const { handleDeleteAgent } = await import("./delete-agent-Y4QTEQ3B.js");
|
|
1628
1668
|
return {
|
|
1629
1669
|
content: [{ type: "text", text: await handleDeleteAgent(params) }]
|
|
1630
1670
|
};
|
|
@@ -1634,17 +1674,17 @@ function registerAgentTools(server) {
|
|
|
1634
1674
|
"platform_run_agent",
|
|
1635
1675
|
"Run one turn of an agent. A connected agent runs through the platform relay on a live instance: give `message` (one user turn) or `input` with a `messages` list, plus `parameters` and `threadId` to continue a conversation. HTTP agents call their configured URL directly; workflow-linked agents execute via the workflow engine.",
|
|
1636
1676
|
{
|
|
1637
|
-
id:
|
|
1638
|
-
input:
|
|
1677
|
+
id: z3.string().describe("The agent ID to run"),
|
|
1678
|
+
input: z3.string().optional().describe(
|
|
1639
1679
|
"Input data as a JSON object string. For a connected agent it is the relay body: messages (OpenAI style), and optionally threadId, session and params."
|
|
1640
1680
|
),
|
|
1641
|
-
message:
|
|
1642
|
-
parameters:
|
|
1643
|
-
threadId:
|
|
1681
|
+
message: z3.string().optional().describe("One user message to send to a connected agent, instead of input"),
|
|
1682
|
+
parameters: z3.record(z3.string(), z3.union([z3.string(), z3.number(), z3.boolean()])).optional().describe("Run parameter values for a connected agent, by name"),
|
|
1683
|
+
threadId: z3.string().optional().describe("Continue a conversation on a connected agent")
|
|
1644
1684
|
},
|
|
1645
1685
|
withToolLogging("platform_run_agent", async (params) => {
|
|
1646
1686
|
requireApiKey();
|
|
1647
|
-
const { handleRunAgent } = await import("./run-agent-
|
|
1687
|
+
const { handleRunAgent } = await import("./run-agent-HRVRHRHI.js");
|
|
1648
1688
|
return {
|
|
1649
1689
|
content: [{ type: "text", text: await handleRunAgent(params) }]
|
|
1650
1690
|
};
|
|
@@ -1654,7 +1694,7 @@ function registerAgentTools(server) {
|
|
|
1654
1694
|
"platform_test_agent",
|
|
1655
1695
|
'Test an agent with one scripted scenario run: the user sends "ping", the agent answers, and the run succeeds when the answer arrives. No model is used, and no scenario, run plan or test suite is added to the project. Answers at once with the scenario run id to follow with platform_get_simulation_run; the run itself is asynchronous.',
|
|
1656
1696
|
{
|
|
1657
|
-
id:
|
|
1697
|
+
id: z3.string().describe("The agent ID to test")
|
|
1658
1698
|
},
|
|
1659
1699
|
withToolLogging("platform_test_agent", async (params) => {
|
|
1660
1700
|
requireApiKey();
|
|
@@ -1664,91 +1704,103 @@ function registerAgentTools(server) {
|
|
|
1664
1704
|
})
|
|
1665
1705
|
);
|
|
1666
1706
|
}
|
|
1667
|
-
function
|
|
1707
|
+
function registerAnalyticsReportTools(server) {
|
|
1668
1708
|
server.tool(
|
|
1669
|
-
"
|
|
1670
|
-
"List
|
|
1709
|
+
"platform_list_analytics_reports",
|
|
1710
|
+
"List the Analytics Reports in the LangWatch project (/api/v1/analytics/reports). Dashboards, which hold widgets, are listed by list_dashboards.",
|
|
1671
1711
|
{},
|
|
1672
|
-
withToolLogging("
|
|
1712
|
+
withToolLogging("platform_list_analytics_reports", async () => {
|
|
1673
1713
|
requireApiKey();
|
|
1674
|
-
const {
|
|
1714
|
+
const { handleListAnalyticsReports } = await import("./list-analytics-reports-DEKKC6BU.js");
|
|
1675
1715
|
return {
|
|
1676
|
-
content: [{ type: "text", text: await
|
|
1716
|
+
content: [{ type: "text", text: await handleListAnalyticsReports() }]
|
|
1677
1717
|
};
|
|
1678
1718
|
})
|
|
1679
1719
|
);
|
|
1680
1720
|
server.tool(
|
|
1681
|
-
"
|
|
1682
|
-
"Get
|
|
1721
|
+
"platform_get_analytics_report",
|
|
1722
|
+
"Get an Analytics Report by its ID, including its graphs. A Dashboards dashboard's ID is not found here; read it with get_dashboard.",
|
|
1683
1723
|
{
|
|
1684
|
-
|
|
1724
|
+
reportId: z3.string().describe("The Analytics Report ID")
|
|
1685
1725
|
},
|
|
1686
|
-
withToolLogging("
|
|
1726
|
+
withToolLogging("platform_get_analytics_report", async (params) => {
|
|
1687
1727
|
requireApiKey();
|
|
1688
|
-
const {
|
|
1728
|
+
const { handleGetAnalyticsReport } = await import("./get-analytics-report-PD6XZ4ZA.js");
|
|
1689
1729
|
return {
|
|
1690
|
-
content: [{ type: "text", text: await
|
|
1730
|
+
content: [{ type: "text", text: await handleGetAnalyticsReport(params) }]
|
|
1691
1731
|
};
|
|
1692
1732
|
})
|
|
1693
1733
|
);
|
|
1694
1734
|
server.tool(
|
|
1695
|
-
"
|
|
1696
|
-
"Create a new
|
|
1735
|
+
"platform_create_analytics_report",
|
|
1736
|
+
"Create a new Analytics Report.",
|
|
1697
1737
|
{
|
|
1698
|
-
name:
|
|
1738
|
+
name: z3.string().describe("Analytics Report name")
|
|
1699
1739
|
},
|
|
1700
|
-
withToolLogging("
|
|
1740
|
+
withToolLogging("platform_create_analytics_report", async (params) => {
|
|
1701
1741
|
requireApiKey();
|
|
1702
|
-
const {
|
|
1742
|
+
const { handleCreateAnalyticsReport } = await import("./create-analytics-report-IKWZRS2O.js");
|
|
1703
1743
|
return {
|
|
1704
|
-
content: [
|
|
1744
|
+
content: [
|
|
1745
|
+
{
|
|
1746
|
+
type: "text",
|
|
1747
|
+
text: await handleCreateAnalyticsReport(params)
|
|
1748
|
+
}
|
|
1749
|
+
]
|
|
1705
1750
|
};
|
|
1706
1751
|
})
|
|
1707
1752
|
);
|
|
1708
1753
|
server.tool(
|
|
1709
|
-
"
|
|
1710
|
-
"Delete
|
|
1754
|
+
"platform_delete_analytics_report",
|
|
1755
|
+
"Delete an Analytics Report and all its graphs.",
|
|
1711
1756
|
{
|
|
1712
|
-
|
|
1757
|
+
reportId: z3.string().describe("The Analytics Report ID to delete")
|
|
1713
1758
|
},
|
|
1714
|
-
withToolLogging("
|
|
1759
|
+
withToolLogging("platform_delete_analytics_report", async (params) => {
|
|
1715
1760
|
requireApiKey();
|
|
1716
|
-
const {
|
|
1761
|
+
const { handleDeleteAnalyticsReport } = await import("./delete-analytics-report-T4GIMEOA.js");
|
|
1717
1762
|
return {
|
|
1718
|
-
content: [
|
|
1763
|
+
content: [
|
|
1764
|
+
{
|
|
1765
|
+
type: "text",
|
|
1766
|
+
text: await handleDeleteAnalyticsReport(params)
|
|
1767
|
+
}
|
|
1768
|
+
]
|
|
1719
1769
|
};
|
|
1720
1770
|
})
|
|
1721
1771
|
);
|
|
1722
1772
|
server.tool(
|
|
1723
|
-
"
|
|
1724
|
-
"Rename
|
|
1773
|
+
"platform_rename_analytics_report",
|
|
1774
|
+
"Rename an Analytics Report.",
|
|
1725
1775
|
{
|
|
1726
|
-
|
|
1727
|
-
name:
|
|
1776
|
+
reportId: z3.string().describe("The Analytics Report ID to rename"),
|
|
1777
|
+
name: z3.string().describe("The new name for the Analytics Report")
|
|
1728
1778
|
},
|
|
1729
|
-
withToolLogging("
|
|
1779
|
+
withToolLogging("platform_rename_analytics_report", async (params) => {
|
|
1730
1780
|
requireApiKey();
|
|
1731
|
-
const {
|
|
1732
|
-
const result = await
|
|
1781
|
+
const { renameAnalyticsReport } = await import("./langwatch-api-analytics-reports-IIHGTTQA.js");
|
|
1782
|
+
const result = await renameAnalyticsReport({ reportId: params.reportId, name: params.name });
|
|
1733
1783
|
return {
|
|
1734
1784
|
content: [
|
|
1735
1785
|
{
|
|
1736
1786
|
type: "text",
|
|
1737
|
-
text: `
|
|
1787
|
+
text: `Analytics Report "${result.name}" renamed successfully (ID: ${result.id}).`
|
|
1738
1788
|
}
|
|
1739
1789
|
]
|
|
1740
1790
|
};
|
|
1741
1791
|
})
|
|
1742
1792
|
);
|
|
1793
|
+
}
|
|
1794
|
+
function registerDashboardTools(server) {
|
|
1743
1795
|
server.tool(
|
|
1744
|
-
"
|
|
1745
|
-
"Lists the project's
|
|
1796
|
+
"list_dashboards",
|
|
1797
|
+
"Lists the project's dashboards in the Dashboards area, with each one's ID and widget count. Use an ID from here as the dashboardId of add_dashboard_widget and update_dashboard_widget; the Analytics Reports platform_list_analytics_reports lists hold no widgets.",
|
|
1746
1798
|
{},
|
|
1747
|
-
withToolLogging("
|
|
1799
|
+
withToolLogging("list_dashboards", async () => {
|
|
1748
1800
|
requireApiKey();
|
|
1749
|
-
const {
|
|
1801
|
+
const { handleListDashboards } = await import("./list-dashboards-F4YJPDKD.js");
|
|
1750
1802
|
return {
|
|
1751
|
-
content: [{ type: "text", text: await
|
|
1803
|
+
content: [{ type: "text", text: await handleListDashboards() }]
|
|
1752
1804
|
};
|
|
1753
1805
|
})
|
|
1754
1806
|
);
|
|
@@ -1756,26 +1808,28 @@ function registerDashboardTools(server) {
|
|
|
1756
1808
|
"add_dashboard_widget",
|
|
1757
1809
|
"Creates a custom dashboard widget and places it on the given dashboard. A widget's `code` is a TSX file run in a sandbox: it receives a global `LW` with `LW.useChartQuery(name)` (reads one of the widget's own named queries), `LW.navigate` and `LW.theme`. `queries` are named LangWatchQL SQL statements the code can read by name \u2014 validate each statement's SQL first with run_query before calling this tool, since a query only runs inside the sandbox at render time and a mistake surfaces there, not here. Up to 8 queries per widget.",
|
|
1758
1810
|
{
|
|
1759
|
-
dashboardId:
|
|
1760
|
-
name:
|
|
1761
|
-
code:
|
|
1811
|
+
dashboardId: z3.string().describe("The dashboard to add the widget to, as list_dashboards lists it"),
|
|
1812
|
+
name: z3.string().describe("The widget's display name"),
|
|
1813
|
+
code: z3.string().describe(
|
|
1762
1814
|
"The widget's TSX source. Runs sandboxed with a global LW (LW.useChartQuery(name), LW.navigate, LW.theme) in scope."
|
|
1763
1815
|
),
|
|
1764
|
-
queries:
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
name:
|
|
1769
|
-
sql:
|
|
1816
|
+
queries: z3.union([
|
|
1817
|
+
z3.record(z3.string(), z3.string()).describe('{"<name>": "<LWQL SQL>"}'),
|
|
1818
|
+
z3.array(
|
|
1819
|
+
z3.object({
|
|
1820
|
+
name: z3.string().describe('Referenced from code as LW.useChartQuery("name")'),
|
|
1821
|
+
sql: z3.string().describe("The LangWatchQL statement")
|
|
1770
1822
|
})
|
|
1771
1823
|
).describe("Named LWQL queries, array form")
|
|
1772
1824
|
]).describe(
|
|
1773
1825
|
"The widget's named LangWatchQL queries: either {name: sql} or an array of {name, sql}. Max 8. Validate each statement with run_query first."
|
|
1774
|
-
)
|
|
1826
|
+
),
|
|
1827
|
+
sources: widgetSourcesInput,
|
|
1828
|
+
projects: widgetProjectsInput
|
|
1775
1829
|
},
|
|
1776
1830
|
withToolLogging("add_dashboard_widget", async (params) => {
|
|
1777
1831
|
requireApiKey();
|
|
1778
|
-
const { handleAddDashboardWidget } = await import("./add-dashboard-widget-
|
|
1832
|
+
const { handleAddDashboardWidget } = await import("./add-dashboard-widget-XNAIGV37.js");
|
|
1779
1833
|
return {
|
|
1780
1834
|
content: [{ type: "text", text: await handleAddDashboardWidget(params) }]
|
|
1781
1835
|
};
|
|
@@ -1783,35 +1837,109 @@ function registerDashboardTools(server) {
|
|
|
1783
1837
|
);
|
|
1784
1838
|
server.tool(
|
|
1785
1839
|
"update_dashboard_widget",
|
|
1786
|
-
"Changes one custom widget on a dashboard: its name, its TSX `code`, its named LangWatchQL `queries` or
|
|
1840
|
+
"Changes one custom widget on a dashboard: its name, its TSX `code`, its named LangWatchQL `queries`, its `description` or the `sources` its queries count. Pass only the fields to change; every field left out keeps its stored value. Validate any new query's SQL with run_query first. Returns the updated widget.",
|
|
1787
1841
|
{
|
|
1788
|
-
dashboardId:
|
|
1789
|
-
widgetId:
|
|
1790
|
-
name:
|
|
1791
|
-
code:
|
|
1842
|
+
dashboardId: z3.string().describe("The dashboard the widget is on"),
|
|
1843
|
+
widgetId: z3.string().describe("The widget to change, as add_dashboard_widget returned it"),
|
|
1844
|
+
name: z3.string().optional().describe("The widget's new display name"),
|
|
1845
|
+
code: z3.string().optional().describe(
|
|
1792
1846
|
"The widget's new TSX source. Runs sandboxed with a global LW (LW.useChartQuery(name), LW.navigate, LW.theme) in scope."
|
|
1793
1847
|
),
|
|
1794
|
-
queries:
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
name:
|
|
1799
|
-
sql:
|
|
1848
|
+
queries: z3.union([
|
|
1849
|
+
z3.record(z3.string(), z3.string()).describe('{"<name>": "<LWQL SQL>"}'),
|
|
1850
|
+
z3.array(
|
|
1851
|
+
z3.object({
|
|
1852
|
+
name: z3.string().describe('Referenced from code as LW.useChartQuery("name")'),
|
|
1853
|
+
sql: z3.string().describe("The LangWatchQL statement")
|
|
1800
1854
|
})
|
|
1801
1855
|
).describe("Named LWQL queries, array form")
|
|
1802
1856
|
]).optional().describe(
|
|
1803
1857
|
"The widget's new named LangWatchQL queries, replacing the stored set: either {name: sql} or an array of {name, sql}. Max 8."
|
|
1804
1858
|
),
|
|
1805
|
-
description:
|
|
1859
|
+
description: z3.string().optional().describe("What the widget's info tip says: a sentence or two"),
|
|
1860
|
+
sources: widgetSourcesInput,
|
|
1861
|
+
projects: widgetProjectsInput
|
|
1806
1862
|
},
|
|
1807
1863
|
withToolLogging("update_dashboard_widget", async (params) => {
|
|
1808
1864
|
requireApiKey();
|
|
1809
|
-
const { handleUpdateDashboardWidget } = await import("./update-dashboard-widget-
|
|
1865
|
+
const { handleUpdateDashboardWidget } = await import("./update-dashboard-widget-VUIQZ7F5.js");
|
|
1810
1866
|
return {
|
|
1811
1867
|
content: [{ type: "text", text: await handleUpdateDashboardWidget(params) }]
|
|
1812
1868
|
};
|
|
1813
1869
|
})
|
|
1814
1870
|
);
|
|
1871
|
+
registerDashboardCrudTools(server);
|
|
1872
|
+
}
|
|
1873
|
+
function registerDashboardCrudTools(server) {
|
|
1874
|
+
const dashboardId = z3.string().describe("The dashboard's ID, as list_dashboards lists it");
|
|
1875
|
+
const text = (value) => ({ content: [{ type: "text", text: value }] });
|
|
1876
|
+
server.tool(
|
|
1877
|
+
"get_dashboard",
|
|
1878
|
+
"Reads one dashboard in the Dashboards area: its name, scope, description and address. An Analytics Report's ID is not found here; read it with platform_get_analytics_report.",
|
|
1879
|
+
{ dashboardId },
|
|
1880
|
+
withToolLogging("get_dashboard", async (params) => {
|
|
1881
|
+
requireApiKey();
|
|
1882
|
+
const { handleGetDashboard } = await import("./dashboards-4X6QUT3E.js");
|
|
1883
|
+
return text(await handleGetDashboard(params));
|
|
1884
|
+
})
|
|
1885
|
+
);
|
|
1886
|
+
server.tool(
|
|
1887
|
+
"create_dashboard",
|
|
1888
|
+
"Creates an empty dashboard in the Dashboards area. Add widgets to it with add_dashboard_widget.",
|
|
1889
|
+
{ name: z3.string().describe("The dashboard's name") },
|
|
1890
|
+
withToolLogging("create_dashboard", async (params) => {
|
|
1891
|
+
requireApiKey();
|
|
1892
|
+
const { handleCreateDashboard } = await import("./dashboards-4X6QUT3E.js");
|
|
1893
|
+
return text(await handleCreateDashboard(params));
|
|
1894
|
+
})
|
|
1895
|
+
);
|
|
1896
|
+
server.tool(
|
|
1897
|
+
"rename_dashboard",
|
|
1898
|
+
"Changes a dashboard's name and/or description; a field left out keeps its value.",
|
|
1899
|
+
{
|
|
1900
|
+
dashboardId,
|
|
1901
|
+
name: z3.string().optional().describe("The dashboard's new name"),
|
|
1902
|
+
description: z3.string().optional().describe("The dashboard's new description")
|
|
1903
|
+
},
|
|
1904
|
+
withToolLogging("rename_dashboard", async (params) => {
|
|
1905
|
+
requireApiKey();
|
|
1906
|
+
const { handleRenameDashboard } = await import("./dashboards-4X6QUT3E.js");
|
|
1907
|
+
return text(await handleRenameDashboard(params));
|
|
1908
|
+
})
|
|
1909
|
+
);
|
|
1910
|
+
server.tool(
|
|
1911
|
+
"delete_dashboard",
|
|
1912
|
+
"Deletes a dashboard together with the widgets on it. This cannot be undone.",
|
|
1913
|
+
{ dashboardId },
|
|
1914
|
+
withToolLogging("delete_dashboard", async (params) => {
|
|
1915
|
+
requireApiKey();
|
|
1916
|
+
const { handleDeleteDashboard } = await import("./dashboards-4X6QUT3E.js");
|
|
1917
|
+
return text(await handleDeleteDashboard(params));
|
|
1918
|
+
})
|
|
1919
|
+
);
|
|
1920
|
+
server.tool(
|
|
1921
|
+
"list_dashboard_widgets",
|
|
1922
|
+
"Lists the custom widgets on one dashboard, with each widget's ID and query names.",
|
|
1923
|
+
{ dashboardId },
|
|
1924
|
+
withToolLogging("list_dashboard_widgets", async (params) => {
|
|
1925
|
+
requireApiKey();
|
|
1926
|
+
const { handleListDashboardWidgets } = await import("./dashboards-4X6QUT3E.js");
|
|
1927
|
+
return text(await handleListDashboardWidgets(params));
|
|
1928
|
+
})
|
|
1929
|
+
);
|
|
1930
|
+
server.tool(
|
|
1931
|
+
"delete_dashboard_widget",
|
|
1932
|
+
"Deletes one custom widget from a dashboard. A widget on another dashboard is not found.",
|
|
1933
|
+
{
|
|
1934
|
+
dashboardId,
|
|
1935
|
+
widgetId: z3.string().describe("The widget's ID, as list_dashboard_widgets lists it")
|
|
1936
|
+
},
|
|
1937
|
+
withToolLogging("delete_dashboard_widget", async (params) => {
|
|
1938
|
+
requireApiKey();
|
|
1939
|
+
const { handleDeleteDashboardWidget } = await import("./dashboards-4X6QUT3E.js");
|
|
1940
|
+
return text(await handleDeleteDashboardWidget(params));
|
|
1941
|
+
})
|
|
1942
|
+
);
|
|
1815
1943
|
}
|
|
1816
1944
|
function registerWorkflowTools(server) {
|
|
1817
1945
|
server.tool(
|
|
@@ -1820,7 +1948,7 @@ function registerWorkflowTools(server) {
|
|
|
1820
1948
|
{},
|
|
1821
1949
|
withToolLogging("platform_list_workflows", async () => {
|
|
1822
1950
|
requireApiKey();
|
|
1823
|
-
const { handleListWorkflows } = await import("./list-workflows-
|
|
1951
|
+
const { handleListWorkflows } = await import("./list-workflows-BGUSQUJX.js");
|
|
1824
1952
|
return {
|
|
1825
1953
|
content: [{ type: "text", text: await handleListWorkflows() }]
|
|
1826
1954
|
};
|
|
@@ -1830,11 +1958,11 @@ function registerWorkflowTools(server) {
|
|
|
1830
1958
|
"platform_get_workflow",
|
|
1831
1959
|
"Get a workflow by its ID.",
|
|
1832
1960
|
{
|
|
1833
|
-
id:
|
|
1961
|
+
id: z3.string().describe("The workflow ID")
|
|
1834
1962
|
},
|
|
1835
1963
|
withToolLogging("platform_get_workflow", async (params) => {
|
|
1836
1964
|
requireApiKey();
|
|
1837
|
-
const { handleGetWorkflow } = await import("./get-workflow-
|
|
1965
|
+
const { handleGetWorkflow } = await import("./get-workflow-R6XUKTZ7.js");
|
|
1838
1966
|
return {
|
|
1839
1967
|
content: [{ type: "text", text: await handleGetWorkflow(params) }]
|
|
1840
1968
|
};
|
|
@@ -1844,11 +1972,11 @@ function registerWorkflowTools(server) {
|
|
|
1844
1972
|
"platform_delete_workflow",
|
|
1845
1973
|
"Archive (soft-delete) a workflow by its ID.",
|
|
1846
1974
|
{
|
|
1847
|
-
id:
|
|
1975
|
+
id: z3.string().describe("The workflow ID to archive")
|
|
1848
1976
|
},
|
|
1849
1977
|
withToolLogging("platform_delete_workflow", async (params) => {
|
|
1850
1978
|
requireApiKey();
|
|
1851
|
-
const { handleDeleteWorkflow } = await import("./delete-workflow-
|
|
1979
|
+
const { handleDeleteWorkflow } = await import("./delete-workflow-JXREDDW7.js");
|
|
1852
1980
|
return {
|
|
1853
1981
|
content: [{ type: "text", text: await handleDeleteWorkflow(params) }]
|
|
1854
1982
|
};
|
|
@@ -1858,12 +1986,12 @@ function registerWorkflowTools(server) {
|
|
|
1858
1986
|
"platform_run_workflow",
|
|
1859
1987
|
"Execute a workflow with JSON input. Returns the workflow output.",
|
|
1860
1988
|
{
|
|
1861
|
-
id:
|
|
1862
|
-
input:
|
|
1989
|
+
id: z3.string().describe("The workflow ID to run"),
|
|
1990
|
+
input: z3.string().optional().describe("Input data as a JSON object string")
|
|
1863
1991
|
},
|
|
1864
1992
|
withToolLogging("platform_run_workflow", async (params) => {
|
|
1865
1993
|
requireApiKey();
|
|
1866
|
-
const { handleRunWorkflow } = await import("./run-workflow-
|
|
1994
|
+
const { handleRunWorkflow } = await import("./run-workflow-HDF6CRLM.js");
|
|
1867
1995
|
return {
|
|
1868
1996
|
content: [{ type: "text", text: await handleRunWorkflow(params) }]
|
|
1869
1997
|
};
|
|
@@ -1875,11 +2003,11 @@ function registerAnnotationTools(server) {
|
|
|
1875
2003
|
"platform_list_annotations",
|
|
1876
2004
|
"List all annotations for the project, optionally filtered by trace ID.",
|
|
1877
2005
|
{
|
|
1878
|
-
traceId:
|
|
2006
|
+
traceId: z3.string().optional().describe("Filter annotations by trace ID")
|
|
1879
2007
|
},
|
|
1880
2008
|
withToolLogging("platform_list_annotations", async (params) => {
|
|
1881
2009
|
requireApiKey();
|
|
1882
|
-
const { handleListAnnotations } = await import("./list-annotations-
|
|
2010
|
+
const { handleListAnnotations } = await import("./list-annotations-P26ELIAO.js");
|
|
1883
2011
|
return {
|
|
1884
2012
|
content: [{ type: "text", text: await handleListAnnotations(params) }]
|
|
1885
2013
|
};
|
|
@@ -1889,14 +2017,14 @@ function registerAnnotationTools(server) {
|
|
|
1889
2017
|
"platform_create_annotation",
|
|
1890
2018
|
"Create an annotation (thumbs up/down, comment) for a trace.",
|
|
1891
2019
|
{
|
|
1892
|
-
traceId:
|
|
1893
|
-
comment:
|
|
1894
|
-
isThumbsUp:
|
|
1895
|
-
email:
|
|
2020
|
+
traceId: z3.string().describe("The trace ID to annotate"),
|
|
2021
|
+
comment: z3.string().optional().describe("Annotation comment"),
|
|
2022
|
+
isThumbsUp: z3.boolean().optional().describe("True for positive feedback, false for negative"),
|
|
2023
|
+
email: z3.string().optional().describe("Email of the annotator")
|
|
1896
2024
|
},
|
|
1897
2025
|
withToolLogging("platform_create_annotation", async (params) => {
|
|
1898
2026
|
requireApiKey();
|
|
1899
|
-
const { handleCreateAnnotation } = await import("./create-annotation-
|
|
2027
|
+
const { handleCreateAnnotation } = await import("./create-annotation-JR6DBHPW.js");
|
|
1900
2028
|
return {
|
|
1901
2029
|
content: [{ type: "text", text: await handleCreateAnnotation(params) }]
|
|
1902
2030
|
};
|
|
@@ -1906,11 +2034,11 @@ function registerAnnotationTools(server) {
|
|
|
1906
2034
|
"platform_delete_annotation",
|
|
1907
2035
|
"Delete an annotation by its ID.",
|
|
1908
2036
|
{
|
|
1909
|
-
id:
|
|
2037
|
+
id: z3.string().describe("The annotation ID to delete")
|
|
1910
2038
|
},
|
|
1911
2039
|
withToolLogging("platform_delete_annotation", async (params) => {
|
|
1912
2040
|
requireApiKey();
|
|
1913
|
-
const { handleDeleteAnnotation } = await import("./delete-annotation-
|
|
2041
|
+
const { handleDeleteAnnotation } = await import("./delete-annotation-ESUH3RWN.js");
|
|
1914
2042
|
return {
|
|
1915
2043
|
content: [{ type: "text", text: await handleDeleteAnnotation(params) }]
|
|
1916
2044
|
};
|
|
@@ -1920,11 +2048,11 @@ function registerAnnotationTools(server) {
|
|
|
1920
2048
|
"platform_get_annotation",
|
|
1921
2049
|
"Get annotation details by ID.",
|
|
1922
2050
|
{
|
|
1923
|
-
id:
|
|
2051
|
+
id: z3.string().describe("The annotation ID")
|
|
1924
2052
|
},
|
|
1925
2053
|
withToolLogging("platform_get_annotation", async (params) => {
|
|
1926
2054
|
requireApiKey();
|
|
1927
|
-
const { getAnnotation } = await import("./langwatch-api-annotations-
|
|
2055
|
+
const { getAnnotation } = await import("./langwatch-api-annotations-CRI6JTQR.js");
|
|
1928
2056
|
const annotation = await getAnnotation(params.id);
|
|
1929
2057
|
const lines = [
|
|
1930
2058
|
`**ID**: ${annotation.id}`,
|
|
@@ -1944,11 +2072,11 @@ function registerTriggerTools(server) {
|
|
|
1944
2072
|
"platform_list_triggers",
|
|
1945
2073
|
"List all triggers (automations) in the project. Triggers automate actions like sending emails, Slack messages, or adding to datasets when conditions are met.",
|
|
1946
2074
|
{
|
|
1947
|
-
format:
|
|
2075
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format")
|
|
1948
2076
|
},
|
|
1949
2077
|
withToolLogging("platform_list_triggers", async (params) => {
|
|
1950
2078
|
requireApiKey();
|
|
1951
|
-
const { handleListTriggers } = await import("./list-triggers-
|
|
2079
|
+
const { handleListTriggers } = await import("./list-triggers-MRSWN7RR.js");
|
|
1952
2080
|
return { content: [{ type: "text", text: await handleListTriggers(params) }] };
|
|
1953
2081
|
})
|
|
1954
2082
|
);
|
|
@@ -1956,11 +2084,11 @@ function registerTriggerTools(server) {
|
|
|
1956
2084
|
"platform_get_trigger",
|
|
1957
2085
|
"Read one trigger (automation) by its ID, including its delivery configuration. Credential values come back as [redacted]; sending them back unchanged on an update keeps the stored values.",
|
|
1958
2086
|
{
|
|
1959
|
-
id:
|
|
2087
|
+
id: z3.string().describe("The trigger ID")
|
|
1960
2088
|
},
|
|
1961
2089
|
withToolLogging("platform_get_trigger", async (params) => {
|
|
1962
2090
|
requireApiKey();
|
|
1963
|
-
const { getTrigger } = await import("./langwatch-api-triggers-
|
|
2091
|
+
const { getTrigger } = await import("./langwatch-api-triggers-6FR4VWDL.js");
|
|
1964
2092
|
const trigger = await getTrigger(params.id);
|
|
1965
2093
|
return { content: [{ type: "text", text: JSON.stringify(trigger, null, 2) }] };
|
|
1966
2094
|
})
|
|
@@ -1977,22 +2105,22 @@ function registerTriggerTools(server) {
|
|
|
1977
2105
|
"The delivery channel cannot be changed afterwards."
|
|
1978
2106
|
].join("\n"),
|
|
1979
2107
|
{
|
|
1980
|
-
name:
|
|
2108
|
+
name: z3.string().describe("Trigger name"),
|
|
1981
2109
|
action: triggerActionSchema.describe("Which channel it delivers on"),
|
|
1982
2110
|
actionParams: actionParamsSchema.optional().describe("The delivery configuration the channel named in `action` reads. Defaults to {}"),
|
|
1983
|
-
filters:
|
|
1984
|
-
filterQuery:
|
|
1985
|
-
customGraphId:
|
|
2111
|
+
filters: z3.string().optional().describe(TRIGGER_FILTERS_DESCRIPTION),
|
|
2112
|
+
filterQuery: z3.string().optional().describe(TRIGGER_FILTER_QUERY_DESCRIPTION),
|
|
2113
|
+
customGraphId: z3.string().optional().describe("Set to make this an alert on that graph"),
|
|
1986
2114
|
graphAlert: graphAlertSchema.optional(),
|
|
1987
2115
|
report: reportSchema.optional().describe("Set to make this a scheduled report"),
|
|
1988
2116
|
templates: templatesSchema.optional(),
|
|
1989
2117
|
notificationCadence: notificationCadenceSchema.optional(),
|
|
1990
|
-
message:
|
|
2118
|
+
message: z3.string().optional().describe("Custom alert message"),
|
|
1991
2119
|
alertType: alertTypeSchema.optional().describe("Alert severity. Required for a graph alert.")
|
|
1992
2120
|
},
|
|
1993
2121
|
withToolLogging("platform_create_trigger", async (params) => {
|
|
1994
2122
|
requireApiKey();
|
|
1995
|
-
const { handleCreateTrigger } = await import("./create-trigger-
|
|
2123
|
+
const { handleCreateTrigger } = await import("./create-trigger-M3VFK5UH.js");
|
|
1996
2124
|
return handleCreateTrigger(params);
|
|
1997
2125
|
})
|
|
1998
2126
|
);
|
|
@@ -2005,22 +2133,22 @@ function registerTriggerTools(server) {
|
|
|
2005
2133
|
"The delivery channel, the kind of automation and an alert's graph cannot be changed."
|
|
2006
2134
|
].join("\n"),
|
|
2007
2135
|
{
|
|
2008
|
-
id:
|
|
2009
|
-
name:
|
|
2010
|
-
active:
|
|
2136
|
+
id: z3.string().describe("The trigger ID"),
|
|
2137
|
+
name: z3.string().optional().describe("New name"),
|
|
2138
|
+
active: z3.boolean().optional().describe("Resume or pause it"),
|
|
2011
2139
|
actionParams: actionParamsSchema.optional().describe("The delivery configuration this automation should have from now on"),
|
|
2012
|
-
filters:
|
|
2013
|
-
filterQuery:
|
|
2140
|
+
filters: z3.string().optional().describe(TRIGGER_FILTERS_DESCRIPTION),
|
|
2141
|
+
filterQuery: z3.string().nullable().optional().describe(`${TRIGGER_FILTER_QUERY_DESCRIPTION} null clears the saved query.`),
|
|
2014
2142
|
graphAlert: graphAlertSchema.optional().describe("Only for an automation that is already a graph alert"),
|
|
2015
2143
|
report: reportSchema.optional().describe("Only for an automation that is already a scheduled report"),
|
|
2016
2144
|
templates: templatesSchema.optional(),
|
|
2017
2145
|
notificationCadence: notificationCadenceSchema.optional(),
|
|
2018
|
-
message:
|
|
2146
|
+
message: z3.string().nullable().optional().describe("New alert message. null removes the custom message"),
|
|
2019
2147
|
alertType: alertTypeSchema.nullable().optional().describe("New alert severity. null clears it")
|
|
2020
2148
|
},
|
|
2021
2149
|
withToolLogging("platform_update_trigger", async (params) => {
|
|
2022
2150
|
requireApiKey();
|
|
2023
|
-
const { getTrigger, updateTrigger } = await import("./langwatch-api-triggers-
|
|
2151
|
+
const { getTrigger, updateTrigger } = await import("./langwatch-api-triggers-6FR4VWDL.js");
|
|
2024
2152
|
if (params.actionParams !== void 0) {
|
|
2025
2153
|
const saved = await getTrigger(params.id);
|
|
2026
2154
|
const boundParams = validateActionParamsForAction({
|
|
@@ -2028,11 +2156,11 @@ function registerTriggerTools(server) {
|
|
|
2028
2156
|
actionParams: params.actionParams
|
|
2029
2157
|
});
|
|
2030
2158
|
if (!boundParams.ok) {
|
|
2031
|
-
const { toolError: toolError2 } = await import("./create-trigger-
|
|
2159
|
+
const { toolError: toolError2 } = await import("./create-trigger-M3VFK5UH.js");
|
|
2032
2160
|
return toolError2(boundParams.message);
|
|
2033
2161
|
}
|
|
2034
2162
|
}
|
|
2035
|
-
const { parseJsonObject, toolError } = await import("./create-trigger-
|
|
2163
|
+
const { parseJsonObject, toolError } = await import("./create-trigger-M3VFK5UH.js");
|
|
2036
2164
|
const filters = params.filters ? parseJsonObject(params.filters) : void 0;
|
|
2037
2165
|
if (params.filters && !filters) {
|
|
2038
2166
|
return toolError("filters must be a JSON object");
|
|
@@ -2049,11 +2177,11 @@ function registerTriggerTools(server) {
|
|
|
2049
2177
|
"platform_test_fire_trigger",
|
|
2050
2178
|
"Send a trigger's message to the destination it is configured with, to confirm it arrives. Nothing is recorded as a fire.",
|
|
2051
2179
|
{
|
|
2052
|
-
id:
|
|
2180
|
+
id: z3.string().describe("The trigger ID")
|
|
2053
2181
|
},
|
|
2054
2182
|
withToolLogging("platform_test_fire_trigger", async (params) => {
|
|
2055
2183
|
requireApiKey();
|
|
2056
|
-
const { testFireTrigger } = await import("./langwatch-api-triggers-
|
|
2184
|
+
const { testFireTrigger } = await import("./langwatch-api-triggers-6FR4VWDL.js");
|
|
2057
2185
|
const result = await testFireTrigger(params.id);
|
|
2058
2186
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
2059
2187
|
})
|
|
@@ -2062,13 +2190,13 @@ function registerTriggerTools(server) {
|
|
|
2062
2190
|
"platform_list_trigger_fires",
|
|
2063
2191
|
"What an automation has done, newest first. Metadata only \u2014 no message content. Answers with `nextCursor`; pass it back as `cursor` for the next page (null means there is none).",
|
|
2064
2192
|
{
|
|
2065
|
-
id:
|
|
2066
|
-
limit:
|
|
2067
|
-
cursor:
|
|
2193
|
+
id: z3.string().describe("The trigger ID"),
|
|
2194
|
+
limit: z3.number().int().positive().optional().describe("How many fires to return"),
|
|
2195
|
+
cursor: z3.string().optional().describe("The `nextCursor` a previous call answered with")
|
|
2068
2196
|
},
|
|
2069
2197
|
withToolLogging("platform_list_trigger_fires", async (params) => {
|
|
2070
2198
|
requireApiKey();
|
|
2071
|
-
const { handleListTriggerFires } = await import("./list-trigger-fires-
|
|
2199
|
+
const { handleListTriggerFires } = await import("./list-trigger-fires-5C5XM2KQ.js");
|
|
2072
2200
|
return { content: [{ type: "text", text: await handleListTriggerFires(params) }] };
|
|
2073
2201
|
})
|
|
2074
2202
|
);
|
|
@@ -2076,11 +2204,11 @@ function registerTriggerTools(server) {
|
|
|
2076
2204
|
"platform_delete_trigger",
|
|
2077
2205
|
"Delete a trigger (automation).",
|
|
2078
2206
|
{
|
|
2079
|
-
id:
|
|
2207
|
+
id: z3.string().describe("The trigger ID to delete")
|
|
2080
2208
|
},
|
|
2081
2209
|
withToolLogging("platform_delete_trigger", async (params) => {
|
|
2082
2210
|
requireApiKey();
|
|
2083
|
-
const { deleteTrigger } = await import("./langwatch-api-triggers-
|
|
2211
|
+
const { deleteTrigger } = await import("./langwatch-api-triggers-6FR4VWDL.js");
|
|
2084
2212
|
const result = await deleteTrigger(params.id);
|
|
2085
2213
|
return { content: [{ type: "text", text: `Trigger ${result.id} deleted.` }] };
|
|
2086
2214
|
})
|
|
@@ -2093,7 +2221,7 @@ function registerMonitorTools(server) {
|
|
|
2093
2221
|
{},
|
|
2094
2222
|
withToolLogging("platform_list_monitors", async () => {
|
|
2095
2223
|
requireApiKey();
|
|
2096
|
-
const { listMonitors } = await import("./langwatch-api-monitors-
|
|
2224
|
+
const { listMonitors } = await import("./langwatch-api-monitors-66O5Z5LB.js");
|
|
2097
2225
|
const monitors = await listMonitors();
|
|
2098
2226
|
if (monitors.length === 0) {
|
|
2099
2227
|
return { content: [{ type: "text", text: "No monitors found." }] };
|
|
@@ -2116,11 +2244,11 @@ ${lines.join("\n")}`
|
|
|
2116
2244
|
"platform_get_monitor",
|
|
2117
2245
|
"Get details of a specific online evaluation monitor.",
|
|
2118
2246
|
{
|
|
2119
|
-
id:
|
|
2247
|
+
id: z3.string().describe("The monitor ID")
|
|
2120
2248
|
},
|
|
2121
2249
|
withToolLogging("platform_get_monitor", async (params) => {
|
|
2122
2250
|
requireApiKey();
|
|
2123
|
-
const { getMonitor } = await import("./langwatch-api-monitors-
|
|
2251
|
+
const { getMonitor } = await import("./langwatch-api-monitors-66O5Z5LB.js");
|
|
2124
2252
|
const m = await getMonitor(params.id);
|
|
2125
2253
|
const lines = [
|
|
2126
2254
|
`**${m.name}** (${m.id})`,
|
|
@@ -2139,15 +2267,15 @@ ${lines.join("\n")}`
|
|
|
2139
2267
|
"platform_create_monitor",
|
|
2140
2268
|
"Create a new online evaluation monitor that runs an evaluator on incoming traces.",
|
|
2141
2269
|
{
|
|
2142
|
-
name:
|
|
2143
|
-
checkType:
|
|
2144
|
-
executionMode:
|
|
2145
|
-
sample:
|
|
2146
|
-
evaluatorId:
|
|
2270
|
+
name: z3.string().describe("Monitor name"),
|
|
2271
|
+
checkType: z3.string().describe("Evaluator check type (e.g. ragas/toxicity, custom/my-eval)"),
|
|
2272
|
+
executionMode: z3.enum(["ON_MESSAGE", "AS_GUARDRAIL", "MANUALLY"]).optional().describe("When to run: ON_MESSAGE (default), AS_GUARDRAIL, or MANUALLY"),
|
|
2273
|
+
sample: z3.number().min(0).max(1).optional().describe("Sampling rate 0.0-1.0 (default: 1.0)"),
|
|
2274
|
+
evaluatorId: z3.string().optional().describe("Link to a saved evaluator by ID")
|
|
2147
2275
|
},
|
|
2148
2276
|
withToolLogging("platform_create_monitor", async (params) => {
|
|
2149
2277
|
requireApiKey();
|
|
2150
|
-
const { createMonitor } = await import("./langwatch-api-monitors-
|
|
2278
|
+
const { createMonitor } = await import("./langwatch-api-monitors-66O5Z5LB.js");
|
|
2151
2279
|
const monitor = await createMonitor(params);
|
|
2152
2280
|
return {
|
|
2153
2281
|
content: [
|
|
@@ -2163,15 +2291,15 @@ ${lines.join("\n")}`
|
|
|
2163
2291
|
"platform_update_monitor",
|
|
2164
2292
|
"Update an existing online evaluation monitor.",
|
|
2165
2293
|
{
|
|
2166
|
-
id:
|
|
2167
|
-
name:
|
|
2168
|
-
enabled:
|
|
2169
|
-
executionMode:
|
|
2170
|
-
sample:
|
|
2294
|
+
id: z3.string().describe("The monitor ID to update"),
|
|
2295
|
+
name: z3.string().optional().describe("New monitor name"),
|
|
2296
|
+
enabled: z3.boolean().optional().describe("Enable or disable the monitor"),
|
|
2297
|
+
executionMode: z3.enum(["ON_MESSAGE", "AS_GUARDRAIL", "MANUALLY"]).optional().describe("New execution mode"),
|
|
2298
|
+
sample: z3.number().min(0).max(1).optional().describe("New sampling rate")
|
|
2171
2299
|
},
|
|
2172
2300
|
withToolLogging("platform_update_monitor", async (params) => {
|
|
2173
2301
|
requireApiKey();
|
|
2174
|
-
const { updateMonitor } = await import("./langwatch-api-monitors-
|
|
2302
|
+
const { updateMonitor } = await import("./langwatch-api-monitors-66O5Z5LB.js");
|
|
2175
2303
|
const monitor = await updateMonitor(params);
|
|
2176
2304
|
return {
|
|
2177
2305
|
content: [
|
|
@@ -2187,11 +2315,11 @@ ${lines.join("\n")}`
|
|
|
2187
2315
|
"platform_delete_monitor",
|
|
2188
2316
|
"Delete an online evaluation monitor.",
|
|
2189
2317
|
{
|
|
2190
|
-
id:
|
|
2318
|
+
id: z3.string().describe("The monitor ID to delete")
|
|
2191
2319
|
},
|
|
2192
2320
|
withToolLogging("platform_delete_monitor", async (params) => {
|
|
2193
2321
|
requireApiKey();
|
|
2194
|
-
const { deleteMonitor } = await import("./langwatch-api-monitors-
|
|
2322
|
+
const { deleteMonitor } = await import("./langwatch-api-monitors-66O5Z5LB.js");
|
|
2195
2323
|
const result = await deleteMonitor(params.id);
|
|
2196
2324
|
return {
|
|
2197
2325
|
content: [{ type: "text", text: `Monitor ${result.id} deleted.` }]
|
|
@@ -2206,7 +2334,7 @@ function registerSecretTools(server) {
|
|
|
2206
2334
|
{},
|
|
2207
2335
|
withToolLogging("platform_list_secrets", async () => {
|
|
2208
2336
|
requireApiKey();
|
|
2209
|
-
const { listSecrets } = await import("./langwatch-api-secrets-
|
|
2337
|
+
const { listSecrets } = await import("./langwatch-api-secrets-B7BURV76.js");
|
|
2210
2338
|
const secrets = await listSecrets();
|
|
2211
2339
|
if (secrets.length === 0) {
|
|
2212
2340
|
return { content: [{ type: "text", text: "No secrets found." }] };
|
|
@@ -2227,12 +2355,12 @@ ${lines.join("\n")}`
|
|
|
2227
2355
|
"platform_create_secret",
|
|
2228
2356
|
"Create a new encrypted project secret. Name must be UPPER_SNAKE_CASE (e.g. MY_API_KEY).",
|
|
2229
2357
|
{
|
|
2230
|
-
name:
|
|
2231
|
-
value:
|
|
2358
|
+
name: z3.string().describe("Secret name in UPPER_SNAKE_CASE (e.g. OPENAI_API_KEY)"),
|
|
2359
|
+
value: z3.string().describe("The secret value (will be encrypted at rest)")
|
|
2232
2360
|
},
|
|
2233
2361
|
withToolLogging("platform_create_secret", async (params) => {
|
|
2234
2362
|
requireApiKey();
|
|
2235
|
-
const { createSecret } = await import("./langwatch-api-secrets-
|
|
2363
|
+
const { createSecret } = await import("./langwatch-api-secrets-B7BURV76.js");
|
|
2236
2364
|
const secret = await createSecret({ name: params.name, value: params.value });
|
|
2237
2365
|
return {
|
|
2238
2366
|
content: [
|
|
@@ -2248,12 +2376,12 @@ ${lines.join("\n")}`
|
|
|
2248
2376
|
"platform_update_secret",
|
|
2249
2377
|
"Update an existing project secret's value.",
|
|
2250
2378
|
{
|
|
2251
|
-
id:
|
|
2252
|
-
value:
|
|
2379
|
+
id: z3.string().describe("The secret ID to update"),
|
|
2380
|
+
value: z3.string().describe("The new secret value (will be encrypted at rest)")
|
|
2253
2381
|
},
|
|
2254
2382
|
withToolLogging("platform_update_secret", async (params) => {
|
|
2255
2383
|
requireApiKey();
|
|
2256
|
-
const { updateSecret } = await import("./langwatch-api-secrets-
|
|
2384
|
+
const { updateSecret } = await import("./langwatch-api-secrets-B7BURV76.js");
|
|
2257
2385
|
const secret = await updateSecret({ id: params.id, value: params.value });
|
|
2258
2386
|
return {
|
|
2259
2387
|
content: [
|
|
@@ -2269,11 +2397,11 @@ ${lines.join("\n")}`
|
|
|
2269
2397
|
"platform_delete_secret",
|
|
2270
2398
|
"Delete a project secret.",
|
|
2271
2399
|
{
|
|
2272
|
-
id:
|
|
2400
|
+
id: z3.string().describe("The secret ID to delete")
|
|
2273
2401
|
},
|
|
2274
2402
|
withToolLogging("platform_delete_secret", async (params) => {
|
|
2275
2403
|
requireApiKey();
|
|
2276
|
-
const { deleteSecret } = await import("./langwatch-api-secrets-
|
|
2404
|
+
const { deleteSecret } = await import("./langwatch-api-secrets-B7BURV76.js");
|
|
2277
2405
|
const result = await deleteSecret(params.id);
|
|
2278
2406
|
return { content: [{ type: "text", text: `Secret ${result.id} deleted.` }] };
|
|
2279
2407
|
})
|
|
@@ -2284,7 +2412,10 @@ function registerExperimentTools(server) {
|
|
|
2284
2412
|
"platform_run_experiment",
|
|
2285
2413
|
"Start an experiment run by slug. Returns a run ID for polling status.",
|
|
2286
2414
|
{
|
|
2287
|
-
slug:
|
|
2415
|
+
slug: z3.string().describe("The experiment slug to run"),
|
|
2416
|
+
concurrency: z3.number().int().min(1).max(24).optional().describe(
|
|
2417
|
+
"Cells (one row against one target) to run at once, for this run only (default: the server's setting). Use 1 to run them one at a time, in order."
|
|
2418
|
+
)
|
|
2288
2419
|
},
|
|
2289
2420
|
withToolLogging("platform_run_experiment", async (params) => {
|
|
2290
2421
|
requireApiKey();
|
|
@@ -2297,8 +2428,8 @@ function registerExperimentTools(server) {
|
|
|
2297
2428
|
"platform_experiment_status",
|
|
2298
2429
|
"Check the status of an experiment run (running, completed, stopped, or interrupted) plus its progress. Works for both platform-run and SDK-logged experiments; pass experimentSlug for SDK runs or runs older than 24h.",
|
|
2299
2430
|
{
|
|
2300
|
-
runId:
|
|
2301
|
-
experimentSlug:
|
|
2431
|
+
runId: z3.string().describe("The run ID returned from platform_run_experiment"),
|
|
2432
|
+
experimentSlug: z3.string().optional().describe(
|
|
2302
2433
|
"Experiment slug \u2014 required for SDK-logged runs and runs older than 24h (the Redis run-state they would otherwise be read from is absent/expired). Use platform_experiment_list_runs to find the slug."
|
|
2303
2434
|
)
|
|
2304
2435
|
},
|
|
@@ -2313,7 +2444,7 @@ function registerExperimentTools(server) {
|
|
|
2313
2444
|
"platform_experiment_list",
|
|
2314
2445
|
"List experiments configured in the LangWatch project. Returns a markdown table with each experiment's slug, name, last-run timestamp, and run count. Use this to discover experiment slugs before drilling into runs with platform_experiment_list_runs. Output is capped (default 25, max 100) to protect the agent's context window.",
|
|
2315
2446
|
{
|
|
2316
|
-
limit:
|
|
2447
|
+
limit: z3.number().int().positive().max(100).optional().describe("Maximum number of experiments to include (default 25, hard-capped at 100)")
|
|
2317
2448
|
},
|
|
2318
2449
|
withToolLogging("platform_experiment_list", async (params) => {
|
|
2319
2450
|
requireApiKey();
|
|
@@ -2326,8 +2457,8 @@ function registerExperimentTools(server) {
|
|
|
2326
2457
|
"platform_experiment_list_runs",
|
|
2327
2458
|
"List experiment runs for a specific experiment slug. Returns a markdown table with each run's id, status, started/finished timestamps, and pass-rate summary. Use this to discover run ids before calling platform_experiment_results. Output is capped (default 25, max 100) to protect the agent's context window.",
|
|
2328
2459
|
{
|
|
2329
|
-
experimentSlug:
|
|
2330
|
-
limit:
|
|
2460
|
+
experimentSlug: z3.string().describe("Experiment slug from platform_experiment_list (e.g. 'checkout-flow')"),
|
|
2461
|
+
limit: z3.number().int().positive().max(100).optional().describe("Maximum number of runs to include (default 25, hard-capped at 100)")
|
|
2331
2462
|
},
|
|
2332
2463
|
withToolLogging("platform_experiment_list_runs", async (params) => {
|
|
2333
2464
|
requireApiKey();
|
|
@@ -2340,15 +2471,15 @@ function registerExperimentTools(server) {
|
|
|
2340
2471
|
"platform_experiment_results",
|
|
2341
2472
|
"Fetch per-row results for an experiment run so you can debug evaluator scores and missed rows. Serves partial results for runs that are still running or were interrupted (it does not require a completed run), with the run status noted in the output. Returns a markdown report: per-evaluator averages plus row-by-row scores and failure details. Output is capped at 50 rows to protect the agent's context window \u2014 narrow with `filter: 'failed'` or `evaluator` to see what matters.",
|
|
2342
2473
|
{
|
|
2343
|
-
runId:
|
|
2344
|
-
experimentSlug:
|
|
2474
|
+
runId: z3.string().describe("The run ID returned from platform_run_experiment"),
|
|
2475
|
+
experimentSlug: z3.string().optional().describe(
|
|
2345
2476
|
"Experiment slug \u2014 required when fetching results for runs older than 24h (Redis state may have expired). Use platform_experiment_list_runs to find the slug."
|
|
2346
2477
|
),
|
|
2347
|
-
filter:
|
|
2478
|
+
filter: z3.enum(["all", "failed"]).optional().describe(
|
|
2348
2479
|
"Filter rows: 'failed' shows only rows that errored or failed an evaluation; 'all' (default) shows everything"
|
|
2349
2480
|
),
|
|
2350
|
-
evaluator:
|
|
2351
|
-
limit:
|
|
2481
|
+
evaluator: z3.string().optional().describe("Show only this evaluator's results (matched on `evaluator` field)"),
|
|
2482
|
+
limit: z3.number().int().positive().max(50).optional().describe(
|
|
2352
2483
|
"Maximum number of rows to include in the markdown output (default 50, hard-capped at 50)."
|
|
2353
2484
|
)
|
|
2354
2485
|
},
|
|
@@ -2365,12 +2496,12 @@ function registerDatasetTools(server) {
|
|
|
2365
2496
|
"platform_list_datasets",
|
|
2366
2497
|
"List all datasets on the LangWatch platform with their names, slugs, columns, and record counts. Returns AI-readable digest by default.",
|
|
2367
2498
|
{
|
|
2368
|
-
format:
|
|
2499
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
2369
2500
|
},
|
|
2370
2501
|
async (params) => {
|
|
2371
2502
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2372
2503
|
requireApiKey2();
|
|
2373
|
-
const { handleListDatasets } = await import("./list-datasets-
|
|
2504
|
+
const { handleListDatasets } = await import("./list-datasets-YYADWT4D.js");
|
|
2374
2505
|
return {
|
|
2375
2506
|
content: [{ type: "text", text: await handleListDatasets(params) }]
|
|
2376
2507
|
};
|
|
@@ -2380,13 +2511,13 @@ function registerDatasetTools(server) {
|
|
|
2380
2511
|
"platform_get_dataset",
|
|
2381
2512
|
"Get full details of a dataset on the LangWatch platform by slug or ID, including column definitions and a preview of records.",
|
|
2382
2513
|
{
|
|
2383
|
-
slugOrId:
|
|
2384
|
-
format:
|
|
2514
|
+
slugOrId: z3.string().describe("The dataset slug or ID to retrieve"),
|
|
2515
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
2385
2516
|
},
|
|
2386
2517
|
async (params) => {
|
|
2387
2518
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2388
2519
|
requireApiKey2();
|
|
2389
|
-
const { handleGetDataset } = await import("./get-dataset-
|
|
2520
|
+
const { handleGetDataset } = await import("./get-dataset-E5WLIPNK.js");
|
|
2390
2521
|
return {
|
|
2391
2522
|
content: [{ type: "text", text: await handleGetDataset(params) }]
|
|
2392
2523
|
};
|
|
@@ -2399,7 +2530,7 @@ function registerDatasetTools(server) {
|
|
|
2399
2530
|
async (params) => {
|
|
2400
2531
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2401
2532
|
requireApiKey2();
|
|
2402
|
-
const { handleCreateDataset } = await import("./create-dataset-
|
|
2533
|
+
const { handleCreateDataset } = await import("./create-dataset-ONX3RADL.js");
|
|
2403
2534
|
return {
|
|
2404
2535
|
content: [{ type: "text", text: await handleCreateDataset(params) }]
|
|
2405
2536
|
};
|
|
@@ -2409,14 +2540,14 @@ function registerDatasetTools(server) {
|
|
|
2409
2540
|
"platform_update_dataset",
|
|
2410
2541
|
"Update an existing dataset on the LangWatch platform (name and/or column types).",
|
|
2411
2542
|
{
|
|
2412
|
-
slugOrId:
|
|
2413
|
-
name:
|
|
2414
|
-
columnTypes:
|
|
2543
|
+
slugOrId: z3.string().describe("The dataset slug or ID to update"),
|
|
2544
|
+
name: z3.string().optional().describe("Updated dataset name"),
|
|
2545
|
+
columnTypes: z3.array(datasetColumnDefinitionSchema).optional().describe("Updated column definitions")
|
|
2415
2546
|
},
|
|
2416
2547
|
async (params) => {
|
|
2417
2548
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2418
2549
|
requireApiKey2();
|
|
2419
|
-
const { handleUpdateDataset } = await import("./update-dataset-
|
|
2550
|
+
const { handleUpdateDataset } = await import("./update-dataset-GHKDCJJQ.js");
|
|
2420
2551
|
return {
|
|
2421
2552
|
content: [{ type: "text", text: await handleUpdateDataset(params) }]
|
|
2422
2553
|
};
|
|
@@ -2426,12 +2557,12 @@ function registerDatasetTools(server) {
|
|
|
2426
2557
|
"platform_delete_dataset",
|
|
2427
2558
|
"Delete (archive) a dataset on the LangWatch platform.",
|
|
2428
2559
|
{
|
|
2429
|
-
slugOrId:
|
|
2560
|
+
slugOrId: z3.string().describe("The dataset slug or ID to delete")
|
|
2430
2561
|
},
|
|
2431
2562
|
async (params) => {
|
|
2432
2563
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2433
2564
|
requireApiKey2();
|
|
2434
|
-
const { handleDeleteDataset } = await import("./delete-dataset-
|
|
2565
|
+
const { handleDeleteDataset } = await import("./delete-dataset-ZRD23FLO.js");
|
|
2435
2566
|
return {
|
|
2436
2567
|
content: [{ type: "text", text: await handleDeleteDataset(params) }]
|
|
2437
2568
|
};
|
|
@@ -2441,15 +2572,15 @@ function registerDatasetTools(server) {
|
|
|
2441
2572
|
"platform_list_dataset_records",
|
|
2442
2573
|
"List records in a dataset on the LangWatch platform with pagination.",
|
|
2443
2574
|
{
|
|
2444
|
-
slugOrId:
|
|
2445
|
-
page:
|
|
2446
|
-
limit:
|
|
2447
|
-
format:
|
|
2575
|
+
slugOrId: z3.string().describe("The dataset slug or ID to list records from"),
|
|
2576
|
+
page: z3.number().int().min(1).optional().describe("Page number (default: 1)"),
|
|
2577
|
+
limit: z3.number().int().min(1).max(1e3).optional().describe("Records per page (default: 50, max: 1000)"),
|
|
2578
|
+
format: z3.enum(["digest", "json"]).optional().describe("Output format: 'digest' (default, AI-readable) or 'json' (full raw data)")
|
|
2448
2579
|
},
|
|
2449
2580
|
async (params) => {
|
|
2450
2581
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2451
2582
|
requireApiKey2();
|
|
2452
|
-
const { handleListDatasetRecords } = await import("./list-dataset-records-
|
|
2583
|
+
const { handleListDatasetRecords } = await import("./list-dataset-records-SWCEDRPX.js");
|
|
2453
2584
|
return {
|
|
2454
2585
|
content: [{ type: "text", text: await handleListDatasetRecords(params) }]
|
|
2455
2586
|
};
|
|
@@ -2459,13 +2590,13 @@ function registerDatasetTools(server) {
|
|
|
2459
2590
|
"platform_create_dataset_records",
|
|
2460
2591
|
"Add records to a dataset on the LangWatch platform in batch (max 1000 per call).",
|
|
2461
2592
|
{
|
|
2462
|
-
slugOrId:
|
|
2463
|
-
entries:
|
|
2593
|
+
slugOrId: z3.string().describe("The dataset slug or ID to add records to"),
|
|
2594
|
+
entries: z3.array(z3.record(z3.string(), z3.unknown())).min(1).max(1e3).describe("Array of record entries to create (key-value objects matching dataset columns)")
|
|
2464
2595
|
},
|
|
2465
2596
|
async (params) => {
|
|
2466
2597
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2467
2598
|
requireApiKey2();
|
|
2468
|
-
const { handleCreateDatasetRecords } = await import("./create-dataset-records-
|
|
2599
|
+
const { handleCreateDatasetRecords } = await import("./create-dataset-records-QZZZF64Z.js");
|
|
2469
2600
|
return {
|
|
2470
2601
|
content: [{ type: "text", text: await handleCreateDatasetRecords(params) }]
|
|
2471
2602
|
};
|
|
@@ -2475,14 +2606,14 @@ function registerDatasetTools(server) {
|
|
|
2475
2606
|
"platform_update_dataset_record",
|
|
2476
2607
|
"Update a single record in a dataset on the LangWatch platform.",
|
|
2477
2608
|
{
|
|
2478
|
-
slugOrId:
|
|
2479
|
-
recordId:
|
|
2480
|
-
entry:
|
|
2609
|
+
slugOrId: z3.string().describe("The dataset slug or ID containing the record"),
|
|
2610
|
+
recordId: z3.string().describe("The record ID to update"),
|
|
2611
|
+
entry: z3.record(z3.string(), z3.unknown()).describe("Updated record entry (key-value object)")
|
|
2481
2612
|
},
|
|
2482
2613
|
async (params) => {
|
|
2483
2614
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2484
2615
|
requireApiKey2();
|
|
2485
|
-
const { handleUpdateDatasetRecord } = await import("./update-dataset-record-
|
|
2616
|
+
const { handleUpdateDatasetRecord } = await import("./update-dataset-record-ZZUPG7AS.js");
|
|
2486
2617
|
return {
|
|
2487
2618
|
content: [{ type: "text", text: await handleUpdateDatasetRecord(params) }]
|
|
2488
2619
|
};
|
|
@@ -2492,13 +2623,13 @@ function registerDatasetTools(server) {
|
|
|
2492
2623
|
"platform_delete_dataset_records",
|
|
2493
2624
|
"Delete records from a dataset on the LangWatch platform by their IDs.",
|
|
2494
2625
|
{
|
|
2495
|
-
slugOrId:
|
|
2496
|
-
recordIds:
|
|
2626
|
+
slugOrId: z3.string().describe("The dataset slug or ID containing the records"),
|
|
2627
|
+
recordIds: z3.array(z3.string()).min(1).max(1e3).describe("Array of record IDs to delete")
|
|
2497
2628
|
},
|
|
2498
2629
|
async (params) => {
|
|
2499
2630
|
const { requireApiKey: requireApiKey2 } = await import("./config.js");
|
|
2500
2631
|
requireApiKey2();
|
|
2501
|
-
const { handleDeleteDatasetRecords } = await import("./delete-dataset-records-
|
|
2632
|
+
const { handleDeleteDatasetRecords } = await import("./delete-dataset-records-HC7VLBT7.js");
|
|
2502
2633
|
return {
|
|
2503
2634
|
content: [{ type: "text", text: await handleDeleteDatasetRecords(params) }]
|
|
2504
2635
|
};
|
|
@@ -2510,12 +2641,12 @@ function registerProjectTools(server) {
|
|
|
2510
2641
|
"platform_list_projects",
|
|
2511
2642
|
"List all projects in your LangWatch organization. Requires an org-level API key.",
|
|
2512
2643
|
{
|
|
2513
|
-
page:
|
|
2514
|
-
limit:
|
|
2644
|
+
page: z3.number().int().positive().optional().describe("Page number (default: 1)"),
|
|
2645
|
+
limit: z3.number().int().positive().max(1e3).optional().describe("Results per page (default: 100)")
|
|
2515
2646
|
},
|
|
2516
2647
|
withToolLogging("platform_list_projects", async (params) => {
|
|
2517
2648
|
requireApiKey();
|
|
2518
|
-
const { handleListProjects } = await import("./list-projects-
|
|
2649
|
+
const { handleListProjects } = await import("./list-projects-4Y74TFDZ.js");
|
|
2519
2650
|
return {
|
|
2520
2651
|
content: [{ type: "text", text: await handleListProjects(params) }]
|
|
2521
2652
|
};
|
|
@@ -2525,11 +2656,11 @@ function registerProjectTools(server) {
|
|
|
2525
2656
|
"platform_get_project",
|
|
2526
2657
|
"Get details of a specific project by its ID.",
|
|
2527
2658
|
{
|
|
2528
|
-
id:
|
|
2659
|
+
id: z3.string().describe("The project ID")
|
|
2529
2660
|
},
|
|
2530
2661
|
withToolLogging("platform_get_project", async (params) => {
|
|
2531
2662
|
requireApiKey();
|
|
2532
|
-
const { handleGetProject } = await import("./get-project-
|
|
2663
|
+
const { handleGetProject } = await import("./get-project-W5DCKXZP.js");
|
|
2533
2664
|
return {
|
|
2534
2665
|
content: [{ type: "text", text: await handleGetProject(params) }]
|
|
2535
2666
|
};
|
|
@@ -2541,15 +2672,15 @@ function registerProjectTools(server) {
|
|
|
2541
2672
|
|
|
2542
2673
|
You must provide either teamId (to add the project to an existing team) or newTeamName (to create a new team for the project).`,
|
|
2543
2674
|
{
|
|
2544
|
-
name:
|
|
2545
|
-
language:
|
|
2546
|
-
framework:
|
|
2547
|
-
teamId:
|
|
2548
|
-
newTeamName:
|
|
2675
|
+
name: z3.string().describe("Project name"),
|
|
2676
|
+
language: z3.string().describe('Programming language (e.g. "python", "typescript")'),
|
|
2677
|
+
framework: z3.string().describe('Framework (e.g. "openai", "langchain", "custom")'),
|
|
2678
|
+
teamId: z3.string().optional().describe("ID of an existing team to add the project to"),
|
|
2679
|
+
newTeamName: z3.string().optional().describe("Name for a new team to create for this project")
|
|
2549
2680
|
},
|
|
2550
2681
|
withToolLogging("platform_create_project", async (params) => {
|
|
2551
2682
|
requireApiKey();
|
|
2552
|
-
const { handleCreateProject } = await import("./create-project-
|
|
2683
|
+
const { handleCreateProject } = await import("./create-project-UPZGETN5.js");
|
|
2553
2684
|
return {
|
|
2554
2685
|
content: [{ type: "text", text: await handleCreateProject(params) }]
|
|
2555
2686
|
};
|
|
@@ -2559,15 +2690,15 @@ You must provide either teamId (to add the project to an existing team) or newTe
|
|
|
2559
2690
|
"platform_update_project",
|
|
2560
2691
|
"Update an existing project's name, language, framework, or PII redaction level.",
|
|
2561
2692
|
{
|
|
2562
|
-
id:
|
|
2563
|
-
name:
|
|
2564
|
-
language:
|
|
2565
|
-
framework:
|
|
2566
|
-
piiRedactionLevel:
|
|
2693
|
+
id: z3.string().describe("The project ID to update"),
|
|
2694
|
+
name: z3.string().optional().describe("New project name"),
|
|
2695
|
+
language: z3.string().optional().describe("New programming language"),
|
|
2696
|
+
framework: z3.string().optional().describe("New framework"),
|
|
2697
|
+
piiRedactionLevel: z3.enum(["STRICT", "ESSENTIAL", "DISABLED"]).optional().describe("PII redaction level")
|
|
2567
2698
|
},
|
|
2568
2699
|
withToolLogging("platform_update_project", async (params) => {
|
|
2569
2700
|
requireApiKey();
|
|
2570
|
-
const { handleUpdateProject } = await import("./update-project-
|
|
2701
|
+
const { handleUpdateProject } = await import("./update-project-VTVU6KNP.js");
|
|
2571
2702
|
return {
|
|
2572
2703
|
content: [{ type: "text", text: await handleUpdateProject(params) }]
|
|
2573
2704
|
};
|
|
@@ -2577,11 +2708,11 @@ You must provide either teamId (to add the project to an existing team) or newTe
|
|
|
2577
2708
|
"platform_archive_project",
|
|
2578
2709
|
"Archive (soft-delete) a project. The project can be restored later if needed.",
|
|
2579
2710
|
{
|
|
2580
|
-
id:
|
|
2711
|
+
id: z3.string().describe("The project ID to archive")
|
|
2581
2712
|
},
|
|
2582
2713
|
withToolLogging("platform_archive_project", async (params) => {
|
|
2583
2714
|
requireApiKey();
|
|
2584
|
-
const { handleArchiveProject } = await import("./archive-project-
|
|
2715
|
+
const { handleArchiveProject } = await import("./archive-project-LAWWNKTX.js");
|
|
2585
2716
|
return {
|
|
2586
2717
|
content: [{ type: "text", text: await handleArchiveProject(params) }]
|
|
2587
2718
|
};
|
|
@@ -2595,7 +2726,7 @@ function registerApiKeyTools(server) {
|
|
|
2595
2726
|
{},
|
|
2596
2727
|
withToolLogging("platform_list_api_keys", async () => {
|
|
2597
2728
|
requireApiKey();
|
|
2598
|
-
const { handleListApiKeys } = await import("./list-api-keys-
|
|
2729
|
+
const { handleListApiKeys } = await import("./list-api-keys-B4YL7STE.js");
|
|
2599
2730
|
return {
|
|
2600
2731
|
content: [{ type: "text", text: await handleListApiKeys() }]
|
|
2601
2732
|
};
|
|
@@ -2610,22 +2741,22 @@ function registerApiKeyTools(server) {
|
|
|
2610
2741
|
|
|
2611
2742
|
The token is returned once and cannot be retrieved again.`,
|
|
2612
2743
|
{
|
|
2613
|
-
keyType:
|
|
2614
|
-
name:
|
|
2615
|
-
description:
|
|
2616
|
-
expiresAt:
|
|
2617
|
-
bindings:
|
|
2618
|
-
|
|
2619
|
-
role:
|
|
2620
|
-
scopeType:
|
|
2621
|
-
scopeId:
|
|
2744
|
+
keyType: z3.enum(["personal", "service"]).describe("Key type: 'personal' (user-tied) or 'service' (headless)"),
|
|
2745
|
+
name: z3.string().describe("Key name (max 100 chars)"),
|
|
2746
|
+
description: z3.string().optional().describe("Key description (max 500 chars)"),
|
|
2747
|
+
expiresAt: z3.string().optional().describe("Expiration date (ISO string)"),
|
|
2748
|
+
bindings: z3.array(
|
|
2749
|
+
z3.object({
|
|
2750
|
+
role: z3.enum(["ADMIN", "MEMBER", "VIEWER"]).describe("Role"),
|
|
2751
|
+
scopeType: z3.enum(["ORGANIZATION", "TEAM", "PROJECT"]).describe("Scope type"),
|
|
2752
|
+
scopeId: z3.string().describe("Scope ID (org, team, or project ID)")
|
|
2622
2753
|
})
|
|
2623
2754
|
).optional().describe("Role bindings (required for personal keys)"),
|
|
2624
|
-
projectIds:
|
|
2755
|
+
projectIds: z3.array(z3.string()).optional().describe("Project IDs for service keys (creates ADMIN bindings per project)")
|
|
2625
2756
|
},
|
|
2626
2757
|
withToolLogging("platform_create_api_key", async (params) => {
|
|
2627
2758
|
requireApiKey();
|
|
2628
|
-
const { handleCreateApiKey } = await import("./create-api-key-
|
|
2759
|
+
const { handleCreateApiKey } = await import("./create-api-key-IKMOTWCD.js");
|
|
2629
2760
|
return {
|
|
2630
2761
|
content: [{ type: "text", text: await handleCreateApiKey(params) }]
|
|
2631
2762
|
};
|
|
@@ -2635,11 +2766,11 @@ The token is returned once and cannot be retrieved again.`,
|
|
|
2635
2766
|
"platform_revoke_api_key",
|
|
2636
2767
|
"Revoke an API key. Once revoked, the key can no longer be used for authentication.",
|
|
2637
2768
|
{
|
|
2638
|
-
id:
|
|
2769
|
+
id: z3.string().describe("The API key ID to revoke")
|
|
2639
2770
|
},
|
|
2640
2771
|
withToolLogging("platform_revoke_api_key", async (params) => {
|
|
2641
2772
|
requireApiKey();
|
|
2642
|
-
const { handleRevokeApiKey } = await import("./revoke-api-key-
|
|
2773
|
+
const { handleRevokeApiKey } = await import("./revoke-api-key-GR55PUP4.js");
|
|
2643
2774
|
return {
|
|
2644
2775
|
content: [{ type: "text", text: await handleRevokeApiKey(params) }]
|
|
2645
2776
|
};
|