@langwatch/mcp-server 2.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/add-dashboard-widget-55UI6H22.js +44 -0
- package/dist/add-dashboard-widget-MJHIC3CC.js +45 -0
- package/dist/{archive-project-SPVHXK6A.js → archive-project-K5UD7A6X.js} +4 -4
- package/dist/{archive-project-KWFM3I5Z.js → archive-project-L4PAKT34.js} +4 -4
- package/dist/{archive-run-plan-65QN3XRX.js → archive-run-plan-5HSQG2HX.js} +4 -4
- package/dist/{archive-run-plan-Z4SYE6BP.js → archive-run-plan-AOKNYQIO.js} +4 -4
- package/dist/{archive-scenario-FXEYQNEH.js → archive-scenario-2CWJW2VD.js} +4 -4
- package/dist/{archive-scenario-A6QV5LOW.js → archive-scenario-5IJQESHH.js} +4 -4
- package/dist/{archive-test-suite-NKZDZY3D.js → archive-test-suite-OPB7NFI7.js} +4 -4
- package/dist/{archive-test-suite-5ADQ3KPQ.js → archive-test-suite-ZC3TN6VH.js} +4 -4
- package/dist/{assign-prompt-tag-5IUZXJ2T.js → assign-prompt-tag-6DDE6ZZ5.js} +3 -3
- package/dist/{assign-prompt-tag-HBZLBIFD.js → assign-prompt-tag-D7O23MJM.js} +3 -3
- package/dist/{chunk-HGELNIVY.js → chunk-4RX3G62A.js} +3 -3
- package/dist/{chunk-UWLE5T2F.js → chunk-7CZQDZ2K.js} +10 -3
- package/dist/{chunk-I7ATIZED.js → chunk-7GETGE6B.js} +2 -2
- package/dist/{chunk-3OCG3QPU.js → chunk-AASW2TO2.js} +2 -2
- package/dist/{chunk-UTJCWXPZ.js → chunk-B4RFWIUP.js} +2 -2
- package/dist/{chunk-B4J3PJLX.js → chunk-D2HS73VI.js} +2 -6
- package/dist/{chunk-H6WGMG2T.js → chunk-DULFP3MK.js} +1 -1
- package/dist/{chunk-YCARO42Z.js → chunk-EYPJBL7P.js} +3 -3
- package/dist/{chunk-SUPUUC4W.js → chunk-GA5JUSPT.js} +2 -2
- package/dist/{chunk-Y34DHR5K.js → chunk-HLQJXUR6.js} +2 -2
- package/dist/{chunk-SXFC3FNH.js → chunk-KILVK3FS.js} +2 -2
- package/dist/chunk-MOCU5XWF.js +79 -0
- package/dist/chunk-O2WGVCED.js +41 -0
- package/dist/{chunk-NKMTIHIJ.js → chunk-QXLMHLRC.js} +2 -2
- package/dist/{chunk-J7PQKBLD.js → chunk-R5YJIYPF.js} +512 -402
- package/dist/{chunk-JRJPH75H.js → chunk-RFC2SBEX.js} +2 -2
- package/dist/{chunk-UNJM3BIL.js → chunk-SHSVN3SE.js} +2 -2
- package/dist/{chunk-PTDR56Z3.js → chunk-VOUGDY2O.js} +2 -2
- package/dist/chunk-WCKZDOGF.js +31 -0
- package/dist/{chunk-7VNSRCXO.js → chunk-XQYH52SI.js} +2 -2
- package/dist/{chunk-VMWJD732.js → chunk-YCIUEZVK.js} +2 -2
- package/dist/{config-EAKW6F26.js → config-2WQGMAEN.js} +2 -2
- package/dist/config.js +1 -1
- package/dist/{create-agent-AYZ3LB3V.js → create-agent-6JNLMYQD.js} +4 -4
- package/dist/{create-agent-S5ZBCEFT.js → create-agent-IRZOU4R5.js} +4 -4
- package/dist/create-analytics-report-N4L4V5QL.js +19 -0
- package/dist/create-analytics-report-QEHXG7FU.js +18 -0
- package/dist/{create-annotation-VUSXULQK.js → create-annotation-CCEGIZ67.js} +4 -4
- package/dist/{create-annotation-LHNCLHYP.js → create-annotation-DTHCMWHB.js} +4 -4
- package/dist/{create-api-key-NNYKARMG.js → create-api-key-JKM2DSZO.js} +4 -4
- package/dist/{create-api-key-T4KSNPKB.js → create-api-key-JPEUIXGM.js} +4 -4
- package/dist/{create-dataset-LUP5PVDM.js → create-dataset-DJNXYJ5B.js} +4 -4
- package/dist/{create-dataset-2MC4SD4O.js → create-dataset-WON4SOTC.js} +4 -4
- package/dist/{create-dataset-records-NSKBZP3G.js → create-dataset-records-TMEOTLTO.js} +4 -4
- package/dist/{create-dataset-records-W4GLN2FV.js → create-dataset-records-UJBW3C7C.js} +4 -4
- package/dist/{create-evaluator-HMTYO5SS.js → create-evaluator-N5AEHI4K.js} +4 -4
- package/dist/{create-evaluator-643G6LXL.js → create-evaluator-XYNY2YFY.js} +4 -4
- package/dist/create-mcp-server.cjs +769 -570
- package/dist/create-mcp-server.js +502 -392
- package/dist/{create-project-KAIC46UY.js → create-project-EY4XZ7TH.js} +4 -4
- package/dist/{create-project-6N7PIYRY.js → create-project-YL345T5L.js} +4 -4
- package/dist/{create-prompt-E67LXIYT.js → create-prompt-JZQNQ7I3.js} +3 -3
- package/dist/{create-prompt-PKJ7EDRR.js → create-prompt-ZUMQHHX7.js} +3 -3
- package/dist/{create-prompt-tag-4YO3FSJ3.js → create-prompt-tag-CJ5FZ436.js} +3 -3
- package/dist/{create-prompt-tag-OPQUEXWB.js → create-prompt-tag-JFP2Q3PO.js} +3 -3
- package/dist/{create-scenario-5PJBMAXO.js → create-scenario-CQU2SSFB.js} +4 -4
- package/dist/{create-scenario-UEM77OE7.js → create-scenario-S6OWWKJO.js} +4 -4
- package/dist/{create-test-suite-SZEPVXSE.js → create-test-suite-OLGCAGJA.js} +4 -4
- package/dist/{create-test-suite-4IPXVSFQ.js → create-test-suite-Y7P2RI4L.js} +4 -4
- package/dist/{create-trigger-PRELMT6J.js → create-trigger-4CNBTISJ.js} +4 -4
- package/dist/{create-trigger-5HZSCRAN.js → create-trigger-RQ653WYF.js} +4 -4
- package/dist/dashboards-BA7M6CMO.js +90 -0
- package/dist/dashboards-U663GUIB.js +91 -0
- package/dist/{delete-agent-QMEK3XHK.js → delete-agent-J2Q4DRZ2.js} +4 -4
- package/dist/{delete-agent-JUIZWAXG.js → delete-agent-ZAU4LTXB.js} +4 -4
- package/dist/delete-analytics-report-QK6X7P4S.js +19 -0
- package/dist/delete-analytics-report-YUYLDHLL.js +18 -0
- package/dist/{delete-annotation-HY3O2OGR.js → delete-annotation-7X4NYXXM.js} +4 -4
- package/dist/{delete-annotation-VKIQWUYW.js → delete-annotation-KJOCDLV3.js} +4 -4
- package/dist/{delete-dataset-WKRUW4FP.js → delete-dataset-NXP7ZPPV.js} +4 -4
- package/dist/{delete-dataset-HQCR66MG.js → delete-dataset-RUTZBBVD.js} +4 -4
- package/dist/{delete-dataset-records-C2IQFFVQ.js → delete-dataset-records-4Z7DZCDW.js} +4 -4
- package/dist/{delete-dataset-records-SDUHQLLM.js → delete-dataset-records-75UAR5IS.js} +4 -4
- package/dist/{delete-evaluator-4SNSCLEE.js → delete-evaluator-E3CUNGTQ.js} +4 -4
- package/dist/{delete-evaluator-QP3QHTLN.js → delete-evaluator-RI4GALGX.js} +4 -4
- package/dist/{delete-prompt-tag-NZ4JQMYG.js → delete-prompt-tag-LE3WJPKS.js} +3 -3
- package/dist/{delete-prompt-tag-YYQ4VMAD.js → delete-prompt-tag-S4KBZTNG.js} +3 -3
- package/dist/{delete-workflow-JSWABL5F.js → delete-workflow-4CZFIQCQ.js} +4 -4
- package/dist/{delete-workflow-5J46T73T.js → delete-workflow-PWQPDW6H.js} +4 -4
- package/dist/{discover-schema-A33SLMXW.js → discover-schema-7WHIIATI.js} +4 -4
- package/dist/{discover-schema-55YJBFGQ.js → discover-schema-J2ANOBKO.js} +4 -4
- package/dist/{get-agent-LJQX7OF4.js → get-agent-5T3CXQOR.js} +4 -4
- package/dist/{get-agent-OTIYUFZA.js → get-agent-ZKYQJUQ7.js} +4 -4
- package/dist/{get-analytics-IQZKJHLW.js → get-analytics-4MPEK4KV.js} +3 -3
- package/dist/{get-analytics-DCS72353.js → get-analytics-ZLI3A4F5.js} +3 -3
- package/dist/get-analytics-report-JCKYMA2S.js +29 -0
- package/dist/get-analytics-report-SKIP2JWH.js +30 -0
- package/dist/{get-dataset-ALSP7RTX.js → get-dataset-APGZBYMH.js} +4 -4
- package/dist/{get-dataset-X4B5JDG2.js → get-dataset-LWXDVMVE.js} +4 -4
- package/dist/{get-evaluator-XEUZGZCH.js → get-evaluator-3A7BJBAB.js} +4 -4
- package/dist/{get-evaluator-ISMC4LLI.js → get-evaluator-IWNJINRY.js} +4 -4
- package/dist/{get-project-RM6FRCBK.js → get-project-EQVB4LEL.js} +4 -4
- package/dist/{get-project-5VKROSDH.js → get-project-RK6AJTEP.js} +4 -4
- package/dist/{get-prompt-OWXJZHQQ.js → get-prompt-TLG2T2DS.js} +3 -3
- package/dist/{get-prompt-W52DY36E.js → get-prompt-ZER557X3.js} +3 -3
- package/dist/{get-run-plan-RUXQ6PAX.js → get-run-plan-5X7DDJRN.js} +4 -4
- package/dist/{get-run-plan-BE3M2AUX.js → get-run-plan-PEHRO5M3.js} +4 -4
- package/dist/{get-scenario-YM4ODWW6.js → get-scenario-375W5D6I.js} +4 -4
- package/dist/{get-scenario-RNM7BAX2.js → get-scenario-UQX45ZZO.js} +4 -4
- package/dist/{get-simulation-run-LCFSMPGQ.js → get-simulation-run-2NBXJADG.js} +4 -4
- package/dist/{get-simulation-run-6GIATQE5.js → get-simulation-run-QZTLGL7W.js} +4 -4
- package/dist/{get-test-suite-GC2O7YH6.js → get-test-suite-GVIBDG7K.js} +4 -4
- package/dist/{get-test-suite-P5LJ6VLF.js → get-test-suite-OODIR3RI.js} +4 -4
- package/dist/{get-trace-SEF3FMR5.js → get-trace-AGCHVPJK.js} +3 -3
- package/dist/{get-trace-KBRVV4NN.js → get-trace-KJLYAZRC.js} +3 -3
- package/dist/{get-workflow-7PVED7JE.js → get-workflow-3TV2YYC5.js} +4 -4
- package/dist/{get-workflow-YXULW4GC.js → get-workflow-7LZSVPP2.js} +4 -4
- package/dist/{http-server-IR4QOS43.js → http-server-7CCN3EHJ.js} +245 -45
- package/dist/index.js +1750 -870
- package/dist/langwatch-api-analytics-reports-6CF6KUET.js +17 -0
- package/dist/langwatch-api-analytics-reports-RPFB5AO5.js +18 -0
- package/dist/{langwatch-api-annotations-TBHLCQ5R.js → langwatch-api-annotations-H4AI4TKG.js} +4 -4
- package/dist/{langwatch-api-annotations-6SA4OB4C.js → langwatch-api-annotations-QSJNUQQS.js} +4 -4
- package/dist/{langwatch-api-monitors-CBF3FGIM.js → langwatch-api-monitors-ENHLOL3S.js} +3 -3
- package/dist/{langwatch-api-monitors-YNWA2M5Y.js → langwatch-api-monitors-OHSGADTH.js} +3 -3
- package/dist/{langwatch-api-secrets-RNFO4LF2.js → langwatch-api-secrets-AGW6UUMD.js} +3 -3
- package/dist/{langwatch-api-secrets-ADTOJELP.js → langwatch-api-secrets-CLTS766Q.js} +3 -3
- package/dist/{langwatch-api-triggers-KQDQC6L5.js → langwatch-api-triggers-G5UWFNN2.js} +4 -4
- package/dist/{langwatch-api-triggers-QS7HDIVW.js → langwatch-api-triggers-QMR7KEXW.js} +4 -4
- package/dist/langwatch-api-workflows-HKTBIKKY.js +15 -0
- package/dist/{langwatch-api-workflows-OKC4FXIF.js → langwatch-api-workflows-OMROZH2O.js} +4 -4
- package/dist/{list-agents-HVYWEQMI.js → list-agents-BYWDNAHT.js} +4 -4
- package/dist/{list-agents-RBAOCF53.js → list-agents-MG24MHZE.js} +4 -4
- package/dist/list-analytics-reports-G3EPWGSQ.js +32 -0
- package/dist/list-analytics-reports-PPWIFRES.js +33 -0
- package/dist/{list-annotations-HJH4NBLD.js → list-annotations-QCLGEK5A.js} +4 -4
- package/dist/{list-annotations-J4UAHSUN.js → list-annotations-Y4EUBJHG.js} +4 -4
- package/dist/{list-api-keys-A2PMV435.js → list-api-keys-DAVOBPFK.js} +4 -4
- package/dist/{list-api-keys-7UTJRZDG.js → list-api-keys-JMW5WRXX.js} +4 -4
- package/dist/list-dashboards-2P3VJFRS.js +29 -0
- package/dist/list-dashboards-MW5O3MKH.js +30 -0
- package/dist/{list-dataset-records-WFM7F33C.js → list-dataset-records-KEHT7G6Q.js} +4 -4
- package/dist/{list-dataset-records-M5TKA6LK.js → list-dataset-records-KMLLMZAZ.js} +4 -4
- package/dist/{list-datasets-B5X4P7BQ.js → list-datasets-P3JK2ZHS.js} +4 -4
- package/dist/{list-datasets-THUKQHPX.js → list-datasets-Z7OOE4KI.js} +4 -4
- package/dist/{list-evaluators-MYH2OVCI.js → list-evaluators-7RRESBOU.js} +4 -4
- package/dist/{list-evaluators-NLVWF6K7.js → list-evaluators-VATJVOHR.js} +4 -4
- package/dist/{list-model-providers-3JUGP4YI.js → list-model-providers-OXDRPUCJ.js} +4 -4
- package/dist/{list-model-providers-H3XKORFO.js → list-model-providers-VXQJWDXU.js} +4 -4
- package/dist/{list-projects-6EJ5YYEW.js → list-projects-HUVK7L3W.js} +4 -4
- package/dist/{list-projects-YNNSRMLC.js → list-projects-X72ZXVY5.js} +4 -4
- package/dist/{list-prompt-tags-NVFQO6WX.js → list-prompt-tags-3I3LWFIR.js} +3 -3
- package/dist/{list-prompt-tags-XUQTTAH4.js → list-prompt-tags-DRHUH2ND.js} +3 -3
- package/dist/{list-prompts-IRI6AIXO.js → list-prompts-6DX3QECJ.js} +3 -3
- package/dist/{list-prompts-HSIMMHTF.js → list-prompts-PS423RU3.js} +3 -3
- package/dist/{list-run-plans-QALLCN2K.js → list-run-plans-5SXPOV3X.js} +4 -4
- package/dist/{list-run-plans-PX2XI6EK.js → list-run-plans-6VNHINPY.js} +4 -4
- package/dist/{list-scenarios-SSJQEMJP.js → list-scenarios-EQWCW7Q4.js} +4 -4
- package/dist/{list-scenarios-QZRPVHS4.js → list-scenarios-GKNH3YND.js} +4 -4
- package/dist/{list-simulation-runs-OEADLLQR.js → list-simulation-runs-KHY7KALI.js} +4 -4
- package/dist/{list-simulation-runs-KNOLGMDV.js → list-simulation-runs-PUDK32C2.js} +4 -4
- package/dist/{list-test-suites-ANAQBLDG.js → list-test-suites-7H2DRILK.js} +4 -4
- package/dist/{list-test-suites-N4WVLBKK.js → list-test-suites-GY56LGLY.js} +4 -4
- package/dist/{list-trigger-fires-JV3WFYYG.js → list-trigger-fires-7RZUP54Y.js} +4 -4
- package/dist/{list-trigger-fires-WTW4DVIW.js → list-trigger-fires-OZUF65LI.js} +4 -4
- package/dist/{list-triggers-SQNIG35Q.js → list-triggers-BGUCUXTJ.js} +4 -4
- package/dist/{list-triggers-V4Y356AK.js → list-triggers-XC5KMX4C.js} +4 -4
- package/dist/{list-workflows-ZHTX5LCL.js → list-workflows-55NYC3PC.js} +4 -4
- package/dist/{list-workflows-IMSX7SXU.js → list-workflows-HV7FUWZA.js} +4 -4
- package/dist/{rename-prompt-tag-IQI7MHOI.js → rename-prompt-tag-2I7Z5FCY.js} +3 -3
- package/dist/{rename-prompt-tag-PA2BRIE6.js → rename-prompt-tag-SZYTOWDX.js} +3 -3
- package/dist/{rename-test-suite-4J7UX5S2.js → rename-test-suite-27AYY33K.js} +4 -4
- package/dist/{rename-test-suite-NNVLMLKY.js → rename-test-suite-CLIEPZDO.js} +4 -4
- package/dist/{report-issue-AS34ZMJF.js → report-issue-5HSL7CNB.js} +28 -2
- package/dist/{report-issue-DCZFLGDO.js → report-issue-N7ND5TM6.js} +28 -2
- package/dist/{rerun-run-plan-TG2V4WM4.js → rerun-run-plan-O3VUZ6CG.js} +4 -4
- package/dist/{rerun-run-plan-ZI5OY3VA.js → rerun-run-plan-OJTVVGJI.js} +4 -4
- package/dist/{revoke-api-key-SFMEFWJC.js → revoke-api-key-BU6BKGCG.js} +4 -4
- package/dist/{revoke-api-key-3J3ZA4UB.js → revoke-api-key-NZNCFOIR.js} +4 -4
- package/dist/{run-agent-W4VJP72Z.js → run-agent-244O4Y5M.js} +4 -4
- package/dist/{run-agent-YNV6ZHW4.js → run-agent-HPCGZGYW.js} +4 -4
- package/dist/{run-plan-6C77GWG4.js → run-plan-2ZPGGZ4H.js} +4 -4
- package/dist/{run-plan-PAARQSI4.js → run-plan-KSXUYQT3.js} +4 -4
- package/dist/{run-query-KJDH544C.js → run-query-4LMOQ5UW.js} +4 -4
- package/dist/{run-query-T4QW2Z5O.js → run-query-BQUHIUC2.js} +4 -4
- package/dist/{run-test-suite-SQJELEZX.js → run-test-suite-P3WLVPXC.js} +4 -4
- package/dist/{run-test-suite-STB6NUJM.js → run-test-suite-UEOMCON6.js} +4 -4
- package/dist/{run-workflow-SP32SO5M.js → run-workflow-EFZ6HG5B.js} +4 -4
- package/dist/{run-workflow-D6PQNBI6.js → run-workflow-I4IHEN54.js} +4 -4
- package/dist/{search-traces-HCBGOG6R.js → search-traces-6IR7PR4L.js} +3 -3
- package/dist/{search-traces-HSTQ6WTQ.js → search-traces-BYML2NQ4.js} +3 -3
- package/dist/{set-model-provider-KDQ7C4EZ.js → set-model-provider-RBNGWFVI.js} +4 -4
- package/dist/{set-model-provider-GF7NXUJA.js → set-model-provider-SHEVKWRC.js} +4 -4
- package/dist/{update-agent-DWG43T2P.js → update-agent-PTKTM2B5.js} +4 -4
- package/dist/{update-agent-MXNOBS4H.js → update-agent-ZPXWRMS2.js} +4 -4
- package/dist/update-dashboard-widget-HKCBXH7X.js +62 -0
- package/dist/update-dashboard-widget-IP2TTQ5G.js +63 -0
- package/dist/{update-dataset-DQH3OHOU.js → update-dataset-GHIN6JR3.js} +4 -4
- package/dist/{update-dataset-SQZ6T4WX.js → update-dataset-IRVMY5PF.js} +4 -4
- package/dist/{update-dataset-record-7PLDGTMR.js → update-dataset-record-6VI7K2CL.js} +4 -4
- package/dist/{update-dataset-record-3AT4IPBC.js → update-dataset-record-Z3L7ACNF.js} +4 -4
- package/dist/{update-evaluator-4LFTKFPT.js → update-evaluator-5NLNE6VY.js} +4 -4
- package/dist/{update-evaluator-IGTX6PX4.js → update-evaluator-FEH7H6NS.js} +4 -4
- package/dist/{update-project-QVHSJRUP.js → update-project-75H3LDQT.js} +4 -4
- package/dist/{update-project-PLJIOZS6.js → update-project-QPR3QX55.js} +4 -4
- package/dist/{update-prompt-GDKRYJI3.js → update-prompt-BCDFTNLK.js} +3 -3
- package/dist/{update-prompt-MY263DYF.js → update-prompt-NPRXYSWA.js} +3 -3
- package/dist/{update-scenario-7KA3JDXA.js → update-scenario-BNOMDCMV.js} +4 -4
- package/dist/{update-scenario-MOHRQKAQ.js → update-scenario-EM5XGMB7.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 +148 -41
- package/src/langwatch-api-analytics-reports.ts +62 -0
- package/src/langwatch-api-dashboard-widgets.ts +3 -68
- package/src/langwatch-api-dashboards.ts +110 -28
- package/src/langwatch-api-projects.ts +0 -17
- package/src/langwatch-api.ts +10 -0
- package/src/schemas/widget-sources.ts +33 -0
- package/src/tools/add-dashboard-widget.ts +20 -32
- package/src/tools/create-analytics-report.ts +7 -0
- package/src/tools/dashboard-widget-queries.ts +13 -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/update-dashboard-widget.ts +29 -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
package/pyproject.toml
CHANGED
|
@@ -7,21 +7,36 @@ requires-python = ">=3.11"
|
|
|
7
7
|
dependencies = [
|
|
8
8
|
"ipykernel>=7.3.0",
|
|
9
9
|
"langwatch",
|
|
10
|
-
"litellm>=1.
|
|
11
|
-
"mcp[cli]>=2.
|
|
10
|
+
"litellm>=1.100.4", # security: litellm advisories up to GHSA-7hp6-4w63-5g45, fixed in 1.100.4
|
|
11
|
+
"mcp[cli]>=2.2.0", # security: MCP SDK unbounded StreamableHTTP sessions, fixed in 2.2.0 (#2823)
|
|
12
12
|
"pandas>=2.3.2",
|
|
13
13
|
"tenacity>=9.1.4",
|
|
14
14
|
]
|
|
15
15
|
|
|
16
16
|
[tool.uv]
|
|
17
|
+
# exclude-newer-package below needs uv 0.9.25+ (dev/docs/best_practices/dependency-age-gates.md).
|
|
18
|
+
required-version = ">=0.9.25"
|
|
17
19
|
exclude-newer = "7 days"
|
|
18
20
|
|
|
21
|
+
# Security fix released inside the 7-day window above, admitted up to a fixed
|
|
22
|
+
# date so the rest of the tree keeps the cooldown. Drop it once the date is
|
|
23
|
+
# more than 7 days old (#8958).
|
|
24
|
+
exclude-newer-package = { certifi = "2026-10-21T00:00:00Z" }
|
|
25
|
+
|
|
19
26
|
# Transitive-dependency security pins. Keep these even when the importing
|
|
20
27
|
# package isn't a direct dependency, so a future re-resolution can't silently
|
|
21
28
|
# pull a vulnerable version back in.
|
|
22
29
|
constraint-dependencies = [
|
|
23
30
|
"python-dotenv>=1.2.2", # security: python-dotenv advisory (#934)
|
|
24
31
|
"python-liquid>=2.2.1", # security: python-liquid advisory (#1528)
|
|
32
|
+
"tornado>=6.5.9", # security: tornado advisories (#2159, #2173, #2233, #2665-#2667)
|
|
33
|
+
"anyio>=4.14.2", # security: anyio advisories (#2430, #2431)
|
|
34
|
+
"httpx2>=2.12.0", # security: httpx2 advisories (#2312, #2313, #2329)
|
|
35
|
+
"pyjwt>=2.15.0", # security: PyJWT advisories covering <=2.14.0 (#2479, #2615)
|
|
36
|
+
"urllib3>=2.8.0", # security: urllib3 advisories covering <2.8.0 (#2591, #2592, #2608)
|
|
37
|
+
"fsspec>=2026.6.0", # security: fsspec advisory covering <2026.6.0 (#2731)
|
|
38
|
+
"aiohttp>=3.14.4", # security: aiohttp advisories covering <=3.14.3, two HIGH (#2842-#2844)
|
|
39
|
+
"certifi>=2026.10.19", # security: certifi advisory covering <2026.10.19 (#2897)
|
|
25
40
|
]
|
|
26
41
|
|
|
27
42
|
[tool.uv.sources]
|
package/src/config.d.ts
CHANGED
package/src/config.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface McpConfig {
|
|
|
4
4
|
apiKey: string | undefined;
|
|
5
5
|
endpoint: string;
|
|
6
6
|
projectId?: string;
|
|
7
|
+
/** Set by the hosted MCP server, so the platform tells its calls from a local server's. */
|
|
8
|
+
hosted?: boolean;
|
|
7
9
|
}
|
|
8
10
|
|
|
9
11
|
// Store on globalThis to share config between CJS and ESM module instances.
|
package/src/create-mcp-server.ts
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
triggerActionSchema,
|
|
29
29
|
validateActionParamsForAction,
|
|
30
30
|
} from "./schemas/triggers.ts";
|
|
31
|
+
import { widgetSourcesInput } from "./schemas/widget-sources.ts";
|
|
31
32
|
import { handleExperimentResults } from "./tools/get-experiment-results.ts";
|
|
32
33
|
import { handleExperimentListRuns } from "./tools/list-experiment-runs.ts";
|
|
33
34
|
import { handleExperimentList } from "./tools/list-experiments.ts";
|
|
@@ -38,7 +39,7 @@ import { handleUpdateTestSuite } from "./tools/update-test-suite.ts";
|
|
|
38
39
|
const modelSchema = z
|
|
39
40
|
.string()
|
|
40
41
|
.describe(
|
|
41
|
-
'Model in "provider/model-name" format, e.g., "openai/gpt-
|
|
42
|
+
'Model in "provider/model-name" format, e.g., "openai/gpt-6-luna", "anthropic/claude-sonnet-4-5-20250929"',
|
|
42
43
|
);
|
|
43
44
|
|
|
44
45
|
/**
|
|
@@ -91,6 +92,7 @@ function registerTools(server: McpServer): void {
|
|
|
91
92
|
registerEvaluatorTools(server);
|
|
92
93
|
registerModelProviderTools(server);
|
|
93
94
|
registerAgentTools(server);
|
|
95
|
+
registerAnalyticsReportTools(server);
|
|
94
96
|
registerDashboardTools(server);
|
|
95
97
|
registerWorkflowTools(server);
|
|
96
98
|
registerAnnotationTools(server);
|
|
@@ -1321,97 +1323,110 @@ function registerAgentTools(server: McpServer): void {
|
|
|
1321
1323
|
);
|
|
1322
1324
|
}
|
|
1323
1325
|
|
|
1324
|
-
// --- Platform
|
|
1325
|
-
function
|
|
1326
|
+
// --- Platform Analytics Report Tools (require API key) ---
|
|
1327
|
+
function registerAnalyticsReportTools(server: McpServer): void {
|
|
1326
1328
|
server.tool(
|
|
1327
|
-
"
|
|
1328
|
-
"List
|
|
1329
|
+
"platform_list_analytics_reports",
|
|
1330
|
+
"List the Analytics Reports in the LangWatch project (/api/v1/analytics/reports). Dashboards, which hold widgets, are listed by list_dashboards.",
|
|
1329
1331
|
{},
|
|
1330
|
-
withToolLogging("
|
|
1332
|
+
withToolLogging("platform_list_analytics_reports", async () => {
|
|
1331
1333
|
requireApiKey();
|
|
1332
|
-
const {
|
|
1334
|
+
const { handleListAnalyticsReports } = await import("./tools/list-analytics-reports.ts");
|
|
1333
1335
|
return {
|
|
1334
|
-
content: [{ type: "text", text: await
|
|
1336
|
+
content: [{ type: "text", text: await handleListAnalyticsReports() }],
|
|
1335
1337
|
};
|
|
1336
1338
|
}),
|
|
1337
1339
|
);
|
|
1338
1340
|
|
|
1339
1341
|
server.tool(
|
|
1340
|
-
"
|
|
1341
|
-
"Get
|
|
1342
|
+
"platform_get_analytics_report",
|
|
1343
|
+
"Get an Analytics Report by its ID, including its graphs. A Dashboards dashboard's ID is not found here; read it with get_dashboard.",
|
|
1342
1344
|
{
|
|
1343
|
-
|
|
1345
|
+
reportId: z.string().describe("The Analytics Report ID"),
|
|
1344
1346
|
},
|
|
1345
|
-
withToolLogging("
|
|
1347
|
+
withToolLogging("platform_get_analytics_report", async (params) => {
|
|
1346
1348
|
requireApiKey();
|
|
1347
|
-
const {
|
|
1349
|
+
const { handleGetAnalyticsReport } = await import("./tools/get-analytics-report.ts");
|
|
1348
1350
|
return {
|
|
1349
|
-
content: [{ type: "text", text: await
|
|
1351
|
+
content: [{ type: "text", text: await handleGetAnalyticsReport(params) }],
|
|
1350
1352
|
};
|
|
1351
1353
|
}),
|
|
1352
1354
|
);
|
|
1353
1355
|
|
|
1354
1356
|
server.tool(
|
|
1355
|
-
"
|
|
1356
|
-
"Create a new
|
|
1357
|
+
"platform_create_analytics_report",
|
|
1358
|
+
"Create a new Analytics Report.",
|
|
1357
1359
|
{
|
|
1358
|
-
name: z.string().describe("
|
|
1360
|
+
name: z.string().describe("Analytics Report name"),
|
|
1359
1361
|
},
|
|
1360
|
-
withToolLogging("
|
|
1362
|
+
withToolLogging("platform_create_analytics_report", async (params) => {
|
|
1361
1363
|
requireApiKey();
|
|
1362
|
-
const {
|
|
1364
|
+
const { handleCreateAnalyticsReport } = await import("./tools/create-analytics-report.ts");
|
|
1363
1365
|
return {
|
|
1364
|
-
content: [
|
|
1366
|
+
content: [
|
|
1367
|
+
{
|
|
1368
|
+
type: "text",
|
|
1369
|
+
text: await handleCreateAnalyticsReport(params),
|
|
1370
|
+
},
|
|
1371
|
+
],
|
|
1365
1372
|
};
|
|
1366
1373
|
}),
|
|
1367
1374
|
);
|
|
1368
1375
|
|
|
1369
1376
|
server.tool(
|
|
1370
|
-
"
|
|
1371
|
-
"Delete
|
|
1377
|
+
"platform_delete_analytics_report",
|
|
1378
|
+
"Delete an Analytics Report and all its graphs.",
|
|
1372
1379
|
{
|
|
1373
|
-
|
|
1380
|
+
reportId: z.string().describe("The Analytics Report ID to delete"),
|
|
1374
1381
|
},
|
|
1375
|
-
withToolLogging("
|
|
1382
|
+
withToolLogging("platform_delete_analytics_report", async (params) => {
|
|
1376
1383
|
requireApiKey();
|
|
1377
|
-
const {
|
|
1384
|
+
const { handleDeleteAnalyticsReport } = await import("./tools/delete-analytics-report.ts");
|
|
1378
1385
|
return {
|
|
1379
|
-
content: [
|
|
1386
|
+
content: [
|
|
1387
|
+
{
|
|
1388
|
+
type: "text",
|
|
1389
|
+
text: await handleDeleteAnalyticsReport(params),
|
|
1390
|
+
},
|
|
1391
|
+
],
|
|
1380
1392
|
};
|
|
1381
1393
|
}),
|
|
1382
1394
|
);
|
|
1383
1395
|
|
|
1384
1396
|
server.tool(
|
|
1385
|
-
"
|
|
1386
|
-
"Rename
|
|
1397
|
+
"platform_rename_analytics_report",
|
|
1398
|
+
"Rename an Analytics Report.",
|
|
1387
1399
|
{
|
|
1388
|
-
|
|
1389
|
-
name: z.string().describe("The new name for the
|
|
1400
|
+
reportId: z.string().describe("The Analytics Report ID to rename"),
|
|
1401
|
+
name: z.string().describe("The new name for the Analytics Report"),
|
|
1390
1402
|
},
|
|
1391
|
-
withToolLogging("
|
|
1403
|
+
withToolLogging("platform_rename_analytics_report", async (params) => {
|
|
1392
1404
|
requireApiKey();
|
|
1393
|
-
const {
|
|
1394
|
-
const result = await
|
|
1405
|
+
const { renameAnalyticsReport } = await import("./langwatch-api-analytics-reports.ts");
|
|
1406
|
+
const result = await renameAnalyticsReport({ reportId: params.reportId, name: params.name });
|
|
1395
1407
|
return {
|
|
1396
1408
|
content: [
|
|
1397
1409
|
{
|
|
1398
1410
|
type: "text",
|
|
1399
|
-
text: `
|
|
1411
|
+
text: `Analytics Report "${result.name}" renamed successfully (ID: ${result.id}).`,
|
|
1400
1412
|
},
|
|
1401
1413
|
],
|
|
1402
1414
|
};
|
|
1403
1415
|
}),
|
|
1404
1416
|
);
|
|
1417
|
+
}
|
|
1405
1418
|
|
|
1419
|
+
// --- Dashboard Tools (require API key) ---
|
|
1420
|
+
function registerDashboardTools(server: McpServer): void {
|
|
1406
1421
|
server.tool(
|
|
1407
|
-
"
|
|
1408
|
-
"Lists the project's
|
|
1422
|
+
"list_dashboards",
|
|
1423
|
+
"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.",
|
|
1409
1424
|
{},
|
|
1410
|
-
withToolLogging("
|
|
1425
|
+
withToolLogging("list_dashboards", async () => {
|
|
1411
1426
|
requireApiKey();
|
|
1412
|
-
const {
|
|
1427
|
+
const { handleListDashboards } = await import("./tools/list-dashboards.js");
|
|
1413
1428
|
return {
|
|
1414
|
-
content: [{ type: "text", text: await
|
|
1429
|
+
content: [{ type: "text", text: await handleListDashboards() }],
|
|
1415
1430
|
};
|
|
1416
1431
|
}),
|
|
1417
1432
|
);
|
|
@@ -1422,7 +1437,7 @@ function registerDashboardTools(server: McpServer): void {
|
|
|
1422
1437
|
{
|
|
1423
1438
|
dashboardId: z
|
|
1424
1439
|
.string()
|
|
1425
|
-
.describe("The
|
|
1440
|
+
.describe("The dashboard to add the widget to, as list_dashboards lists it"),
|
|
1426
1441
|
name: z.string().describe("The widget's display name"),
|
|
1427
1442
|
code: z
|
|
1428
1443
|
.string()
|
|
@@ -1444,6 +1459,7 @@ function registerDashboardTools(server: McpServer): void {
|
|
|
1444
1459
|
.describe(
|
|
1445
1460
|
"The widget's named LangWatchQL queries: either {name: sql} or an array of {name, sql}. Max 8. Validate each statement with run_query first.",
|
|
1446
1461
|
),
|
|
1462
|
+
sources: widgetSourcesInput,
|
|
1447
1463
|
},
|
|
1448
1464
|
withToolLogging("add_dashboard_widget", async (params) => {
|
|
1449
1465
|
requireApiKey();
|
|
@@ -1456,7 +1472,7 @@ function registerDashboardTools(server: McpServer): void {
|
|
|
1456
1472
|
|
|
1457
1473
|
server.tool(
|
|
1458
1474
|
"update_dashboard_widget",
|
|
1459
|
-
"Changes one custom widget on a dashboard: its name, its TSX `code`, its named LangWatchQL `queries` or
|
|
1475
|
+
"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.",
|
|
1460
1476
|
{
|
|
1461
1477
|
dashboardId: z.string().describe("The dashboard the widget is on"),
|
|
1462
1478
|
widgetId: z.string().describe("The widget to change, as add_dashboard_widget returned it"),
|
|
@@ -1487,6 +1503,7 @@ function registerDashboardTools(server: McpServer): void {
|
|
|
1487
1503
|
.string()
|
|
1488
1504
|
.optional()
|
|
1489
1505
|
.describe("What the widget's info tip says: a sentence or two"),
|
|
1506
|
+
sources: widgetSourcesInput,
|
|
1490
1507
|
},
|
|
1491
1508
|
withToolLogging("update_dashboard_widget", async (params) => {
|
|
1492
1509
|
requireApiKey();
|
|
@@ -1496,6 +1513,87 @@ function registerDashboardTools(server: McpServer): void {
|
|
|
1496
1513
|
};
|
|
1497
1514
|
}),
|
|
1498
1515
|
);
|
|
1516
|
+
|
|
1517
|
+
registerDashboardCrudTools(server);
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
/** Dashboard CRUD and a dashboard's widgets, over `/api/v1/dashboards`. */
|
|
1521
|
+
function registerDashboardCrudTools(server: McpServer): void {
|
|
1522
|
+
const dashboardId = z.string().describe("The dashboard's ID, as list_dashboards lists it");
|
|
1523
|
+
const text = (value: string) => ({ content: [{ type: "text" as const, text: value }] });
|
|
1524
|
+
|
|
1525
|
+
server.tool(
|
|
1526
|
+
"get_dashboard",
|
|
1527
|
+
"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.",
|
|
1528
|
+
{ dashboardId },
|
|
1529
|
+
withToolLogging("get_dashboard", async (params) => {
|
|
1530
|
+
requireApiKey();
|
|
1531
|
+
const { handleGetDashboard } = await import("./tools/dashboards.js");
|
|
1532
|
+
return text(await handleGetDashboard(params));
|
|
1533
|
+
}),
|
|
1534
|
+
);
|
|
1535
|
+
|
|
1536
|
+
server.tool(
|
|
1537
|
+
"create_dashboard",
|
|
1538
|
+
"Creates an empty dashboard in the Dashboards area. Add widgets to it with add_dashboard_widget.",
|
|
1539
|
+
{ name: z.string().describe("The dashboard's name") },
|
|
1540
|
+
withToolLogging("create_dashboard", async (params) => {
|
|
1541
|
+
requireApiKey();
|
|
1542
|
+
const { handleCreateDashboard } = await import("./tools/dashboards.js");
|
|
1543
|
+
return text(await handleCreateDashboard(params));
|
|
1544
|
+
}),
|
|
1545
|
+
);
|
|
1546
|
+
|
|
1547
|
+
server.tool(
|
|
1548
|
+
"rename_dashboard",
|
|
1549
|
+
"Changes a dashboard's name and/or description; a field left out keeps its value.",
|
|
1550
|
+
{
|
|
1551
|
+
dashboardId,
|
|
1552
|
+
name: z.string().optional().describe("The dashboard's new name"),
|
|
1553
|
+
description: z.string().optional().describe("The dashboard's new description"),
|
|
1554
|
+
},
|
|
1555
|
+
withToolLogging("rename_dashboard", async (params) => {
|
|
1556
|
+
requireApiKey();
|
|
1557
|
+
const { handleRenameDashboard } = await import("./tools/dashboards.js");
|
|
1558
|
+
return text(await handleRenameDashboard(params));
|
|
1559
|
+
}),
|
|
1560
|
+
);
|
|
1561
|
+
|
|
1562
|
+
server.tool(
|
|
1563
|
+
"delete_dashboard",
|
|
1564
|
+
"Deletes a dashboard together with the widgets on it. This cannot be undone.",
|
|
1565
|
+
{ dashboardId },
|
|
1566
|
+
withToolLogging("delete_dashboard", async (params) => {
|
|
1567
|
+
requireApiKey();
|
|
1568
|
+
const { handleDeleteDashboard } = await import("./tools/dashboards.js");
|
|
1569
|
+
return text(await handleDeleteDashboard(params));
|
|
1570
|
+
}),
|
|
1571
|
+
);
|
|
1572
|
+
|
|
1573
|
+
server.tool(
|
|
1574
|
+
"list_dashboard_widgets",
|
|
1575
|
+
"Lists the custom widgets on one dashboard, with each widget's ID and query names.",
|
|
1576
|
+
{ dashboardId },
|
|
1577
|
+
withToolLogging("list_dashboard_widgets", async (params) => {
|
|
1578
|
+
requireApiKey();
|
|
1579
|
+
const { handleListDashboardWidgets } = await import("./tools/dashboards.js");
|
|
1580
|
+
return text(await handleListDashboardWidgets(params));
|
|
1581
|
+
}),
|
|
1582
|
+
);
|
|
1583
|
+
|
|
1584
|
+
server.tool(
|
|
1585
|
+
"delete_dashboard_widget",
|
|
1586
|
+
"Deletes one custom widget from a dashboard. A widget on another dashboard is not found.",
|
|
1587
|
+
{
|
|
1588
|
+
dashboardId,
|
|
1589
|
+
widgetId: z.string().describe("The widget's ID, as list_dashboard_widgets lists it"),
|
|
1590
|
+
},
|
|
1591
|
+
withToolLogging("delete_dashboard_widget", async (params) => {
|
|
1592
|
+
requireApiKey();
|
|
1593
|
+
const { handleDeleteDashboardWidget } = await import("./tools/dashboards.js");
|
|
1594
|
+
return text(await handleDeleteDashboardWidget(params));
|
|
1595
|
+
}),
|
|
1596
|
+
);
|
|
1499
1597
|
}
|
|
1500
1598
|
|
|
1501
1599
|
// --- Platform Workflow Tools (require API key) ---
|
|
@@ -2026,6 +2124,15 @@ function registerExperimentTools(server: McpServer): void {
|
|
|
2026
2124
|
"Start an experiment run by slug. Returns a run ID for polling status.",
|
|
2027
2125
|
{
|
|
2028
2126
|
slug: z.string().describe("The experiment slug to run"),
|
|
2127
|
+
concurrency: z
|
|
2128
|
+
.number()
|
|
2129
|
+
.int()
|
|
2130
|
+
.min(1)
|
|
2131
|
+
.max(24)
|
|
2132
|
+
.optional()
|
|
2133
|
+
.describe(
|
|
2134
|
+
"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.",
|
|
2135
|
+
),
|
|
2029
2136
|
},
|
|
2030
2137
|
withToolLogging("platform_run_experiment", async (params) => {
|
|
2031
2138
|
requireApiKey();
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { makeRequest } from "./langwatch-api.ts";
|
|
2
|
+
|
|
3
|
+
/** An Analytics Report, at `/api/v1/analytics/reports`. Dashboards live at `/api/v1/dashboards`. */
|
|
4
|
+
export interface AnalyticsReportSummary {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
order: number;
|
|
8
|
+
graphCount: number;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
updatedAt: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface AnalyticsReportDetail extends AnalyticsReportSummary {
|
|
14
|
+
graphs: unknown[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface AnalyticsReportListResponse {
|
|
18
|
+
data: AnalyticsReportSummary[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const reportPath = (reportId: string) =>
|
|
22
|
+
`/api/v1/analytics/reports/${encodeURIComponent(reportId)}`;
|
|
23
|
+
|
|
24
|
+
export async function listAnalyticsReports(): Promise<AnalyticsReportListResponse> {
|
|
25
|
+
return makeRequest("GET", "/api/v1/analytics/reports") as Promise<AnalyticsReportListResponse>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export async function getAnalyticsReport({
|
|
29
|
+
reportId,
|
|
30
|
+
}: {
|
|
31
|
+
reportId: string;
|
|
32
|
+
}): Promise<AnalyticsReportDetail> {
|
|
33
|
+
return makeRequest("GET", reportPath(reportId)) as Promise<AnalyticsReportDetail>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function createAnalyticsReport({
|
|
37
|
+
name,
|
|
38
|
+
}: {
|
|
39
|
+
name: string;
|
|
40
|
+
}): Promise<AnalyticsReportDetail> {
|
|
41
|
+
return makeRequest("POST", "/api/v1/analytics/reports", {
|
|
42
|
+
name,
|
|
43
|
+
}) as Promise<AnalyticsReportDetail>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function renameAnalyticsReport({
|
|
47
|
+
reportId,
|
|
48
|
+
name,
|
|
49
|
+
}: {
|
|
50
|
+
reportId: string;
|
|
51
|
+
name: string;
|
|
52
|
+
}): Promise<AnalyticsReportDetail> {
|
|
53
|
+
return makeRequest("PATCH", reportPath(reportId), { name }) as Promise<AnalyticsReportDetail>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export async function deleteAnalyticsReport({
|
|
57
|
+
reportId,
|
|
58
|
+
}: {
|
|
59
|
+
reportId: string;
|
|
60
|
+
}): Promise<{ id: string; name: string }> {
|
|
61
|
+
return makeRequest("DELETE", reportPath(reportId)) as Promise<{ id: string; name: string }>;
|
|
62
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { WidgetSource } from "./schemas/widget-sources.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* One named LangWatchQL statement a widget may run, as the REST endpoint validates it
|
|
@@ -12,6 +12,8 @@ export interface DashboardWidgetQueryInput {
|
|
|
12
12
|
type: "string" | "number" | "boolean";
|
|
13
13
|
default?: string | number | boolean;
|
|
14
14
|
}[];
|
|
15
|
+
/** The trace origins the query counts; `null` makes it unset, counting application. */
|
|
16
|
+
sources?: WidgetSource[] | null;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
/** Where a widget came from, as the platform records it. */
|
|
@@ -43,70 +45,3 @@ export interface DashboardWidget {
|
|
|
43
45
|
colSpan: number;
|
|
44
46
|
rowSpan: number;
|
|
45
47
|
}
|
|
46
|
-
|
|
47
|
-
/** Saves a new widget, unplaced (not yet on any dashboard). */
|
|
48
|
-
export async function createDashboardWidget(params: {
|
|
49
|
-
projectId: string;
|
|
50
|
-
name: string;
|
|
51
|
-
code: string;
|
|
52
|
-
queries: DashboardWidgetQueryInput[];
|
|
53
|
-
}): Promise<DashboardWidget> {
|
|
54
|
-
const { projectId, ...data } = params;
|
|
55
|
-
return makeRequest(
|
|
56
|
-
"POST",
|
|
57
|
-
`/api/v1/projects/${encodeURIComponent(projectId)}/analytics/dashboard-widgets`,
|
|
58
|
-
data,
|
|
59
|
-
) as Promise<DashboardWidget>;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Reads one widget; a widget in another project answers 404. */
|
|
63
|
-
export async function getDashboardWidget(params: {
|
|
64
|
-
projectId: string;
|
|
65
|
-
widgetId: string;
|
|
66
|
-
}): Promise<DashboardWidget> {
|
|
67
|
-
return makeRequest(
|
|
68
|
-
"GET",
|
|
69
|
-
`/api/v1/projects/${encodeURIComponent(params.projectId)}/analytics/dashboard-widgets/${encodeURIComponent(params.widgetId)}`,
|
|
70
|
-
) as Promise<DashboardWidget>;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/** Changes the fields given; every field left out keeps its stored value. */
|
|
74
|
-
export async function updateDashboardWidget(params: {
|
|
75
|
-
projectId: string;
|
|
76
|
-
widgetId: string;
|
|
77
|
-
name?: string;
|
|
78
|
-
code?: string;
|
|
79
|
-
queries?: DashboardWidgetQueryInput[];
|
|
80
|
-
description?: string;
|
|
81
|
-
}): Promise<DashboardWidget> {
|
|
82
|
-
const { projectId, widgetId, ...data } = params;
|
|
83
|
-
return makeRequest(
|
|
84
|
-
"PATCH",
|
|
85
|
-
`/api/v1/projects/${encodeURIComponent(projectId)}/analytics/dashboard-widgets/${encodeURIComponent(widgetId)}`,
|
|
86
|
-
data,
|
|
87
|
-
) as Promise<DashboardWidget>;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Places an existing widget on a dashboard, at the next free row. */
|
|
91
|
-
export async function assignDashboardWidgetToDashboard(params: {
|
|
92
|
-
projectId: string;
|
|
93
|
-
widgetId: string;
|
|
94
|
-
dashboardId: string;
|
|
95
|
-
}): Promise<DashboardWidget> {
|
|
96
|
-
return makeRequest(
|
|
97
|
-
"POST",
|
|
98
|
-
`/api/v1/projects/${encodeURIComponent(params.projectId)}/analytics/dashboard-widgets/${encodeURIComponent(params.widgetId)}/dashboard`,
|
|
99
|
-
{ dashboardId: params.dashboardId },
|
|
100
|
-
) as Promise<DashboardWidget>;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** Deletes a widget. Used to undo a create when placing it fails. */
|
|
104
|
-
export async function deleteDashboardWidget(params: {
|
|
105
|
-
projectId: string;
|
|
106
|
-
widgetId: string;
|
|
107
|
-
}): Promise<void> {
|
|
108
|
-
await makeRequest(
|
|
109
|
-
"DELETE",
|
|
110
|
-
`/api/v1/projects/${encodeURIComponent(params.projectId)}/analytics/dashboard-widgets/${encodeURIComponent(params.widgetId)}`,
|
|
111
|
-
);
|
|
112
|
-
}
|