@langwatch/mcp-server 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +7 -0
- package/.npmignore +41 -0
- package/CHANGELOG.md +192 -201
- package/CONTRIBUTING.md +10 -0
- package/README.md +70 -68
- package/dist/add-dashboard-widget-4ZC5UN73.js +50 -0
- package/dist/add-dashboard-widget-ACC6QYBG.js +49 -0
- package/dist/archive-project-KWFM3I5Z.js +19 -0
- package/dist/{archive-project-W3IKI7UL.js → archive-project-SPVHXK6A.js} +4 -4
- package/dist/{archive-run-plan-474OKHHU.js → archive-run-plan-65QN3XRX.js} +4 -4
- package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
- package/dist/{archive-scenario-V5UNYK26.js → archive-scenario-A6QV5LOW.js} +4 -4
- package/dist/archive-scenario-FXEYQNEH.js +19 -0
- package/dist/archive-test-suite-5ADQ3KPQ.js +15 -0
- package/dist/{archive-test-suite-O7FLDMXK.js → archive-test-suite-NKZDZY3D.js} +4 -4
- package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
- package/dist/{assign-prompt-tag-Q46WRB6P.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
- package/dist/{chunk-OJLYYJWI.js → chunk-3OCG3QPU.js} +7 -10
- package/dist/chunk-3YLN3ATJ.js +241 -0
- package/dist/chunk-5FNCQRCX.js +91 -0
- package/dist/{chunk-UF6XIGYR.js → chunk-6YZUOD34.js} +2 -5
- package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
- package/dist/chunk-7VNSRCXO.js +129 -0
- package/dist/{chunk-G4ZAZTZW.js → chunk-B4J3PJLX.js} +11 -10
- package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
- package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
- package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
- package/dist/{chunk-WT4PO4A3.js → chunk-H6WGMG2T.js} +10 -7
- package/dist/{chunk-EYXMLE5X.js → chunk-HGELNIVY.js} +56 -47
- package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
- package/dist/{chunk-RVAE2MEA.js → chunk-I7ATIZED.js} +7 -7
- package/dist/{chunk-S4GVX36W.js → chunk-ILZDO25L.js} +7 -10
- package/dist/{chunk-QRO35SOM.js → chunk-J7PQKBLD.js} +652 -528
- package/dist/{chunk-SR6QPRIE.js → chunk-JRJPH75H.js} +7 -13
- package/dist/chunk-K2I7Z3LZ.js +28 -0
- package/dist/{chunk-UFOYFYI7.js → chunk-NKMTIHIJ.js} +6 -9
- package/dist/{chunk-HV4DWKBI.js → chunk-O7EMWEVJ.js} +2 -4
- package/dist/{chunk-56OGTS24.js → chunk-PTDR56Z3.js} +4 -11
- package/dist/{chunk-JR6DJZOU.js → chunk-RABYBFX5.js} +4 -10
- package/dist/chunk-SUPUUC4W.js +64 -0
- package/dist/{chunk-JTQJRNFJ.js → chunk-SXFC3FNH.js} +4 -4
- package/dist/{chunk-CKNAH5TG.js → chunk-U24EACC4.js} +3 -10
- package/dist/chunk-UNJM3BIL.js +21 -0
- package/dist/{chunk-QAMP3CGR.js → chunk-UTJCWXPZ.js} +4 -4
- package/dist/chunk-UWLE5T2F.js +312 -0
- package/dist/{chunk-6DJDEXET.js → chunk-VMWJD732.js} +6 -12
- package/dist/{chunk-7E4FZIYJ.js → chunk-XUIJYNRJ.js} +1 -1
- package/dist/chunk-Y34DHR5K.js +67 -0
- package/dist/chunk-YCARO42Z.js +516 -0
- package/dist/config-EAKW6F26.js +16 -0
- package/dist/config.cjs +109 -0
- package/dist/config.js +5 -4
- package/dist/{create-agent-JFJ2K6X3.js → create-agent-AYZ3LB3V.js} +4 -4
- package/dist/create-agent-S5ZBCEFT.js +23 -0
- package/dist/create-annotation-LHNCLHYP.js +29 -0
- package/dist/{create-annotation-EUXXQ6NS.js → create-annotation-VUSXULQK.js} +10 -5
- package/dist/{create-api-key-BGBB76JX.js → create-api-key-NNYKARMG.js} +5 -7
- package/dist/create-api-key-T4KSNPKB.js +24 -0
- package/dist/create-dashboard-DHVFMEU4.js +18 -0
- package/dist/{create-dashboard-Z76AIPLS.js → create-dashboard-WTKKS5Z6.js} +4 -4
- package/dist/{create-dataset-FD5VAXU4.js → create-dataset-2MC4SD4O.js} +6 -6
- package/dist/create-dataset-LUP5PVDM.js +22 -0
- package/dist/create-dataset-records-NSKBZP3G.js +20 -0
- package/dist/{create-dataset-records-WQUXXOHI.js → create-dataset-records-W4GLN2FV.js} +5 -7
- package/dist/{create-evaluator-6NV33Z52.js → create-evaluator-643G6LXL.js} +4 -4
- package/dist/create-evaluator-HMTYO5SS.js +27 -0
- package/dist/create-mcp-server.cjs +9513 -0
- package/dist/create-mcp-server.js +2647 -10
- package/dist/create-project-6N7PIYRY.js +44 -0
- package/dist/{create-project-ZQ7TFIO2.js → create-project-KAIC46UY.js} +4 -4
- package/dist/{create-prompt-BS6QRCUU.js → create-prompt-E67LXIYT.js} +5 -7
- package/dist/create-prompt-PKJ7EDRR.js +37 -0
- package/dist/create-prompt-tag-4YO3FSJ3.js +17 -0
- package/dist/{create-prompt-tag-FCQ5ELSQ.js → create-prompt-tag-OPQUEXWB.js} +3 -3
- package/dist/create-scenario-5PJBMAXO.js +33 -0
- package/dist/{create-scenario-DRPTPXU3.js → create-scenario-UEM77OE7.js} +5 -5
- package/dist/{create-test-suite-ZIZCCFJ4.js → create-test-suite-4IPXVSFQ.js} +6 -6
- package/dist/create-test-suite-SZEPVXSE.js +36 -0
- package/dist/create-trigger-5HZSCRAN.js +49 -0
- package/dist/create-trigger-PRELMT6J.js +48 -0
- package/dist/delete-agent-JUIZWAXG.js +18 -0
- package/dist/{delete-agent-SA4JMUZF.js → delete-agent-QMEK3XHK.js} +4 -4
- package/dist/delete-annotation-HY3O2OGR.js +17 -0
- package/dist/{delete-annotation-X3KKK7QY.js → delete-annotation-VKIQWUYW.js} +4 -4
- package/dist/delete-dashboard-76N66XXL.js +18 -0
- package/dist/{delete-dashboard-LYMRPF27.js → delete-dashboard-JVIVHNJM.js} +4 -4
- package/dist/delete-dataset-HQCR66MG.js +18 -0
- package/dist/{delete-dataset-W6EZ44HY.js → delete-dataset-WKRUW4FP.js} +5 -7
- package/dist/{delete-dataset-records-7CNOTALB.js → delete-dataset-records-C2IQFFVQ.js} +5 -7
- package/dist/delete-dataset-records-SDUHQLLM.js +19 -0
- package/dist/delete-evaluator-4SNSCLEE.js +16 -0
- package/dist/delete-evaluator-QP3QHTLN.js +15 -0
- package/dist/delete-prompt-tag-NZ4JQMYG.js +17 -0
- package/dist/{delete-prompt-tag-QB3OCZUV.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
- package/dist/{delete-workflow-NG2VXYYM.js → delete-workflow-5J46T73T.js} +4 -4
- package/dist/delete-workflow-JSWABL5F.js +17 -0
- package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
- package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
- package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
- package/dist/{discover-scenario-schema-W7KBXA4J.js → discover-scenario-schema-OOFIQKOG.js} +37 -17
- package/dist/{discover-schema-L6QDPON3.js → discover-schema-55YJBFGQ.js} +181 -186
- package/dist/discover-schema-A33SLMXW.js +442 -0
- package/dist/get-agent-LJQX7OF4.js +69 -0
- package/dist/{get-agent-7THF7HCU.js → get-agent-OTIYUFZA.js} +15 -11
- package/dist/get-analytics-DCS72353.js +80 -0
- package/dist/get-analytics-IQZKJHLW.js +79 -0
- package/dist/get-dashboard-5NYJEIX2.js +29 -0
- package/dist/{get-dashboard-P4WWVHFU.js → get-dashboard-QMTYDQAZ.js} +4 -4
- package/dist/get-dataset-ALSP7RTX.js +64 -0
- package/dist/get-dataset-X4B5JDG2.js +63 -0
- package/dist/{get-evaluator-RZ44UIN6.js → get-evaluator-ISMC4LLI.js} +4 -4
- package/dist/get-evaluator-XEUZGZCH.js +47 -0
- package/dist/{get-project-QSQEAB33.js → get-project-5VKROSDH.js} +4 -4
- package/dist/get-project-RM6FRCBK.js +26 -0
- package/dist/{get-prompt-GVKXF5NL.js → get-prompt-OWXJZHQQ.js} +53 -58
- package/dist/get-prompt-W52DY36E.js +94 -0
- package/dist/{get-run-plan-NY7J5GRE.js → get-run-plan-BE3M2AUX.js} +7 -9
- package/dist/get-run-plan-RUXQ6PAX.js +58 -0
- package/dist/get-scenario-RNM7BAX2.js +37 -0
- package/dist/{get-scenario-Q3LLQE4T.js → get-scenario-YM4ODWW6.js} +5 -5
- package/dist/get-simulation-run-6GIATQE5.js +69 -0
- package/dist/{get-simulation-run-WINEYDMK.js → get-simulation-run-LCFSMPGQ.js} +26 -22
- package/dist/{get-test-suite-4HKA7OKS.js → get-test-suite-GC2O7YH6.js} +5 -5
- package/dist/get-test-suite-P5LJ6VLF.js +48 -0
- package/dist/get-trace-KBRVV4NN.js +45 -0
- package/dist/{get-trace-RCUV7N4O.js → get-trace-SEF3FMR5.js} +11 -13
- package/dist/get-workflow-7PVED7JE.js +25 -0
- package/dist/{get-workflow-EEOC7Y45.js → get-workflow-YXULW4GC.js} +4 -4
- package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
- package/dist/{http-server-WCDUARTH.js → http-server-IR4QOS43.js} +4071 -347
- package/dist/index.js +58671 -37983
- package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
- package/dist/{langwatch-api-annotations-6DHVZWUK.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
- package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
- package/dist/{langwatch-api-dashboards-2KJL2M42.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
- package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
- package/dist/{langwatch-api-monitors-6ISFJ7WX.js → langwatch-api-monitors-YNWA2M5Y.js} +11 -16
- package/dist/langwatch-api-secrets-ADTOJELP.js +56 -0
- package/dist/langwatch-api-secrets-RNFO4LF2.js +55 -0
- package/dist/langwatch-api-triggers-KQDQC6L5.js +22 -0
- package/dist/langwatch-api-triggers-QS7HDIVW.js +23 -0
- package/dist/{langwatch-api-workflows-6UJL5U4Z.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
- package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
- package/dist/{list-agents-AMVDQPQL.js → list-agents-HVYWEQMI.js} +4 -4
- package/dist/list-agents-RBAOCF53.js +42 -0
- package/dist/list-annotations-HJH4NBLD.js +38 -0
- package/dist/{list-annotations-6PR5NLIC.js → list-annotations-J4UAHSUN.js} +10 -5
- package/dist/{list-api-keys-GVPNBIHQ.js → list-api-keys-7UTJRZDG.js} +10 -5
- package/dist/list-api-keys-A2PMV435.js +42 -0
- package/dist/list-dashboard-boards-OPWROHMG.js +33 -0
- package/dist/list-dashboard-boards-U2GJ7GC5.js +34 -0
- package/dist/{list-dashboards-Z3BZKDGF.js → list-dashboards-ROSYFLDQ.js} +4 -4
- package/dist/list-dashboards-RQ635ZU7.js +32 -0
- package/dist/{list-dataset-records-O67HZ35Y.js → list-dataset-records-M5TKA6LK.js} +14 -10
- package/dist/list-dataset-records-WFM7F33C.js +43 -0
- package/dist/{list-datasets-WXZL6UMP.js → list-datasets-B5X4P7BQ.js} +9 -13
- package/dist/list-datasets-THUKQHPX.js +56 -0
- package/dist/{list-evaluators-PAX72WCN.js → list-evaluators-MYH2OVCI.js} +5 -7
- package/dist/list-evaluators-NLVWF6K7.js +32 -0
- package/dist/{list-model-providers-VVLZMLCX.js → list-model-providers-3JUGP4YI.js} +4 -4
- package/dist/list-model-providers-H3XKORFO.js +35 -0
- package/dist/{list-projects-AQVI6SUK.js → list-projects-6EJ5YYEW.js} +5 -7
- package/dist/list-projects-YNNSRMLC.js +40 -0
- package/dist/{list-prompt-tags-WZFBJOHG.js → list-prompt-tags-NVFQO6WX.js} +3 -3
- package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
- package/dist/{list-prompts-BQOHRHYT.js → list-prompts-HSIMMHTF.js} +4 -6
- package/dist/list-prompts-IRI6AIXO.js +30 -0
- package/dist/{list-run-plans-UBAU2DGH.js → list-run-plans-PX2XI6EK.js} +5 -5
- package/dist/list-run-plans-QALLCN2K.js +45 -0
- package/dist/{list-scenarios-MS4IUIVM.js → list-scenarios-QZRPVHS4.js} +13 -11
- package/dist/list-scenarios-SSJQEMJP.js +45 -0
- package/dist/list-simulation-runs-KNOLGMDV.js +53 -0
- package/dist/{list-simulation-runs-D6YF4ZOU.js → list-simulation-runs-OEADLLQR.js} +12 -8
- package/dist/list-test-suites-ANAQBLDG.js +34 -0
- package/dist/{list-test-suites-L7R2O6DR.js → list-test-suites-N4WVLBKK.js} +4 -4
- package/dist/list-trigger-fires-JV3WFYYG.js +19 -0
- package/dist/list-trigger-fires-WTW4DVIW.js +20 -0
- package/dist/list-triggers-SQNIG35Q.js +45 -0
- package/dist/list-triggers-V4Y356AK.js +46 -0
- package/dist/{list-workflows-6MV4XJHF.js → list-workflows-IMSX7SXU.js} +5 -7
- package/dist/list-workflows-ZHTX5LCL.js +33 -0
- package/dist/{rename-prompt-tag-K5LQ4CY6.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
- package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
- package/dist/{rename-test-suite-NTYHAO5X.js → rename-test-suite-4J7UX5S2.js} +4 -4
- package/dist/rename-test-suite-NNVLMLKY.js +20 -0
- package/dist/report-issue-AS34ZMJF.js +898 -0
- package/dist/{report-issue-RHZZ33IS.js → report-issue-DCZFLGDO.js} +81 -67
- package/dist/{rerun-run-plan-MUDWJBE4.js → rerun-run-plan-TG2V4WM4.js} +5 -5
- package/dist/rerun-run-plan-ZI5OY3VA.js +21 -0
- package/dist/revoke-api-key-3J3ZA4UB.js +15 -0
- package/dist/{revoke-api-key-6LAZ3QZZ.js → revoke-api-key-SFMEFWJC.js} +4 -4
- package/dist/run-agent-W4VJP72Z.js +75 -0
- package/dist/run-agent-YNV6ZHW4.js +74 -0
- package/dist/run-plan-6C77GWG4.js +38 -0
- package/dist/{run-plan-T4ZYOZGA.js → run-plan-PAARQSI4.js} +7 -7
- package/dist/run-query-KJDH544C.js +47 -0
- package/dist/run-query-T4QW2Z5O.js +46 -0
- package/dist/{run-test-suite-L4MZ7G4D.js → run-test-suite-SQJELEZX.js} +6 -6
- package/dist/run-test-suite-STB6NUJM.js +25 -0
- package/dist/{run-workflow-DFIS23AP.js → run-workflow-D6PQNBI6.js} +4 -4
- package/dist/run-workflow-SP32SO5M.js +36 -0
- package/dist/search-traces-HCBGOG6R.js +170 -0
- package/dist/search-traces-HSTQ6WTQ.js +171 -0
- package/dist/{set-model-provider-XRNMFOVR.js → set-model-provider-GF7NXUJA.js} +4 -4
- package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
- package/dist/{update-agent-DUWNYBNA.js → update-agent-DWG43T2P.js} +4 -4
- package/dist/update-agent-MXNOBS4H.js +20 -0
- package/dist/update-dashboard-widget-CJKJLCDY.js +71 -0
- package/dist/update-dashboard-widget-CYQDS2NR.js +70 -0
- package/dist/update-dataset-DQH3OHOU.js +22 -0
- package/dist/{update-dataset-YSOMDCOB.js → update-dataset-SQZ6T4WX.js} +6 -6
- package/dist/{update-dataset-record-DEA2ITYR.js → update-dataset-record-3AT4IPBC.js} +4 -4
- package/dist/update-dataset-record-7PLDGTMR.js +19 -0
- package/dist/update-evaluator-4LFTKFPT.js +24 -0
- package/dist/{update-evaluator-NH7Q5GWV.js → update-evaluator-IGTX6PX4.js} +4 -4
- package/dist/{update-project-Q26FBSYH.js → update-project-PLJIOZS6.js} +4 -4
- package/dist/update-project-QVHSJRUP.js +24 -0
- package/dist/update-prompt-GDKRYJI3.js +140 -0
- package/dist/{update-prompt-ZQQ2C3KU.js → update-prompt-MY263DYF.js} +27 -29
- package/dist/update-scenario-7KA3JDXA.js +34 -0
- package/dist/{update-scenario-WUX34JAR.js → update-scenario-MOHRQKAQ.js} +5 -5
- package/package.json +35 -39
- package/pyproject.toml +8 -8
- package/src/config.d.ts +4 -0
- package/src/config.ts +20 -29
- package/src/create-mcp-server.ts +755 -609
- package/src/documentation-fetch.ts +21 -20
- package/src/http-security.ts +166 -135
- package/src/http-server.ts +189 -224
- package/src/index.ts +14 -16
- package/src/langwatch-api-agents.ts +18 -21
- package/src/langwatch-api-annotations.ts +11 -12
- package/src/langwatch-api-api-keys.ts +8 -9
- package/src/langwatch-api-boards.ts +46 -0
- package/src/langwatch-api-dashboard-widgets.ts +112 -0
- package/src/langwatch-api-dashboards.ts +13 -10
- package/src/langwatch-api-datasets.ts +98 -32
- package/src/langwatch-api-evaluators.ts +13 -19
- package/src/langwatch-api-model-providers.ts +4 -4
- package/src/langwatch-api-monitors.ts +14 -18
- package/src/langwatch-api-projects.ts +27 -9
- package/src/langwatch-api-query.ts +114 -0
- package/src/langwatch-api-run-plans.ts +12 -29
- package/src/langwatch-api-scenarios.ts +9 -11
- package/src/langwatch-api-secrets.ts +31 -24
- package/src/langwatch-api-simulation-runs.ts +6 -8
- package/src/langwatch-api-test-suites.ts +14 -33
- package/src/langwatch-api-triggers.ts +96 -34
- package/src/langwatch-api-workflows.ts +9 -9
- package/src/langwatch-api.ts +108 -124
- package/src/public-http-request.ts +21 -12
- package/src/schemas/analytics-metrics.ts +3 -15
- package/src/schemas/create-dataset.ts +3 -4
- package/src/schemas/run-plan.ts +13 -29
- package/src/schemas/suite-fields.ts +6 -23
- package/src/schemas/triggers.ts +365 -0
- package/src/tools/add-dashboard-widget.ts +63 -0
- package/src/tools/archive-project.ts +2 -4
- package/src/tools/archive-run-plan.ts +2 -4
- package/src/tools/archive-scenario.ts +2 -4
- package/src/tools/archive-test-suite.ts +2 -4
- package/src/tools/assign-prompt-tag.ts +6 -2
- package/src/tools/create-agent.ts +1 -1
- package/src/tools/create-annotation.ts +7 -2
- package/src/tools/create-api-key.ts +4 -6
- package/src/tools/create-dashboard.ts +1 -1
- package/src/tools/create-dataset-records.ts +4 -8
- package/src/tools/create-dataset.ts +5 -7
- package/src/tools/create-evaluator.ts +3 -5
- package/src/tools/create-project.ts +2 -2
- package/src/tools/create-prompt-tag.ts +2 -4
- package/src/tools/create-prompt.ts +9 -18
- package/src/tools/create-scenario.ts +5 -7
- package/src/tools/create-test-suite.ts +4 -9
- package/src/tools/create-trigger.ts +55 -0
- package/src/tools/dashboard-exists.ts +25 -0
- package/src/tools/dashboard-widget-queries.ts +32 -0
- package/src/tools/delete-agent.ts +1 -1
- package/src/tools/delete-annotation.ts +1 -1
- package/src/tools/delete-dashboard.ts +1 -1
- package/src/tools/delete-dataset-records.ts +4 -8
- package/src/tools/delete-dataset.ts +3 -7
- package/src/tools/delete-evaluator.ts +4 -6
- package/src/tools/delete-prompt-tag.ts +2 -4
- package/src/tools/delete-workflow.ts +1 -1
- package/src/tools/discover-evaluator-schema.ts +34 -25
- package/src/tools/discover-scenario-schema.ts +41 -21
- package/src/tools/discover-schema.ts +149 -27
- package/src/tools/experiment-run-status.ts +2 -8
- package/src/tools/format-dataset-mutation.ts +5 -10
- package/src/tools/format-run-plan.ts +7 -21
- package/src/tools/format-scenario.ts +2 -4
- package/src/tools/format-suite-details.ts +6 -12
- package/src/tools/get-agent.ts +15 -6
- package/src/tools/get-analytics.ts +52 -46
- package/src/tools/get-dashboard.ts +1 -1
- package/src/tools/get-dataset.ts +34 -16
- package/src/tools/get-evaluator.ts +4 -11
- package/src/tools/get-experiment-results.ts +219 -186
- package/src/tools/get-project.ts +2 -4
- package/src/tools/get-prompt.ts +63 -84
- package/src/tools/get-run-plan.ts +4 -6
- package/src/tools/get-scenario.ts +4 -6
- package/src/tools/get-simulation-run.ts +27 -24
- package/src/tools/get-test-suite.ts +2 -5
- package/src/tools/get-trace.ts +16 -17
- package/src/tools/get-workflow.ts +1 -1
- package/src/tools/list-agents.ts +1 -1
- package/src/tools/list-annotations.ts +8 -5
- package/src/tools/list-api-keys.ts +7 -2
- package/src/tools/list-dashboard-boards.ts +28 -0
- package/src/tools/list-dashboards.ts +1 -1
- package/src/tools/list-dataset-records.ts +8 -6
- package/src/tools/list-datasets.ts +12 -23
- package/src/tools/list-evaluators.ts +4 -8
- package/src/tools/list-experiment-runs.ts +5 -9
- package/src/tools/list-experiments.ts +5 -11
- package/src/tools/list-model-providers.ts +3 -5
- package/src/tools/list-projects.ts +2 -4
- package/src/tools/list-prompt-tags.ts +3 -3
- package/src/tools/list-prompts.ts +4 -8
- package/src/tools/list-run-plans.ts +2 -2
- package/src/tools/list-scenarios.ts +14 -15
- package/src/tools/list-simulation-runs.ts +8 -4
- package/src/tools/list-test-suites.ts +1 -1
- package/src/tools/list-trigger-fires.ts +17 -0
- package/src/tools/list-triggers.ts +39 -0
- package/src/tools/list-workflows.ts +2 -4
- package/src/tools/rename-prompt-tag.ts +1 -1
- package/src/tools/rename-test-suite.ts +2 -5
- package/src/tools/report-issue.ts +5 -9
- package/src/tools/rerun-run-plan.ts +2 -5
- package/src/tools/revoke-api-key.ts +2 -4
- package/src/tools/run-agent.ts +29 -26
- package/src/tools/run-experiment.ts +36 -37
- package/src/tools/run-plan.ts +4 -7
- package/src/tools/run-query.ts +47 -0
- package/src/tools/run-test-suite.ts +4 -7
- package/src/tools/run-workflow.ts +2 -5
- package/src/tools/search-traces.ts +161 -47
- package/src/tools/set-model-provider.ts +4 -6
- package/src/tools/test-agent.ts +2 -2
- package/src/tools/update-agent.ts +1 -1
- package/src/tools/update-dashboard-widget.ts +97 -0
- package/src/tools/update-dataset-record.ts +1 -1
- package/src/tools/update-dataset.ts +5 -7
- package/src/tools/update-evaluator.ts +3 -5
- package/src/tools/update-project.ts +1 -1
- package/src/tools/update-prompt.ts +44 -59
- package/src/tools/update-scenario.ts +5 -7
- package/src/tools/update-test-suite.ts +6 -11
- package/src/utils/date-parsing.ts +1 -1
- package/src/utils/escape-markdown.ts +3 -8
- package/src/utils/format-evaluations.ts +6 -6
- package/src/utils/markdown-table.ts +58 -0
- package/src/utils/trace-id-shape.ts +20 -0
- package/tsconfig.app.json +24 -0
- package/tsconfig.json +14 -12
- package/vitest.integration.config.js +10 -0
- package/vitest.scenario.config.js +9 -0
- package/.eslintrc.cjs +0 -36
- package/dist/chunk-AN4OUA4D.js +0 -86
- package/dist/chunk-GELJ2MQR.js +0 -226
- package/dist/chunk-K37ZNPXK.js +0 -24
- package/dist/config.d.ts +0 -17
- package/dist/create-mcp-server.d.ts +0 -10
- package/dist/delete-evaluator-RKYC4TNB.js +0 -16
- package/dist/discover-evaluator-schema-ESSHQGPY.js +0 -1912
- package/dist/get-analytics-R6AZD3AW.js +0 -73
- package/dist/get-dataset-AKTYSQDI.js +0 -49
- package/dist/index.d.ts +0 -2
- package/dist/langwatch-api-secrets-OEBD6GBU.js +0 -41
- package/dist/langwatch-api-triggers-5E6DDGX6.js +0 -31
- package/dist/run-agent-CAGWGTYT.js +0 -72
- package/dist/search-traces-4XTJYXIK.js +0 -79
- package/src/__tests__/agent-tools.unit.test.ts +0 -257
- package/src/__tests__/all-tools.integration.test.ts +0 -1872
- package/src/__tests__/config.unit.test.ts +0 -202
- package/src/__tests__/datasets.integration.test.ts +0 -620
- package/src/__tests__/datasets.unit.test.ts +0 -244
- package/src/__tests__/date-parsing.unit.test.ts +0 -78
- package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
- package/src/__tests__/discover-schema.unit.test.ts +0 -118
- package/src/__tests__/docker.integration.test.ts +0 -318
- package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
- package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
- package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
- package/src/__tests__/experiment-status.unit.test.ts +0 -194
- package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
- package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
- package/src/__tests__/http-security-origin.unit.test.ts +0 -97
- package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
- package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
- package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
- package/src/__tests__/http-server-origin.integration.test.ts +0 -169
- package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
- package/src/__tests__/http-transport.integration.test.ts +0 -395
- package/src/__tests__/integration.integration.test.ts +0 -284
- package/src/__tests__/langwatch-api.unit.test.ts +0 -661
- package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
- package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
- package/src/__tests__/prompt-response-types.unit.test.ts +0 -51
- package/src/__tests__/prompts.integration.test.ts +0 -736
- package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
- package/src/__tests__/report-issue.integration.test.ts +0 -147
- package/src/__tests__/run-plan-tools.unit.test.ts +0 -565
- package/src/__tests__/scenario-tools.integration.test.ts +0 -286
- package/src/__tests__/scenario-tools.unit.test.ts +0 -207
- package/src/__tests__/schemas.unit.test.ts +0 -85
- package/src/__tests__/simulation-run-tools.unit.test.ts +0 -116
- package/src/__tests__/support/http-server-harness.ts +0 -138
- package/src/__tests__/test-suite-tools.unit.test.ts +0 -615
- package/src/__tests__/tools.integration.test.ts +0 -896
- package/src/schemas/filter-fields.ts +0 -119
- package/src/schemas/index.ts +0 -9
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
updateDatasetRecord
|
|
3
|
+
} from "./chunk-7VNSRCXO.js";
|
|
4
|
+
import "./chunk-UWLE5T2F.js";
|
|
5
|
+
import "./chunk-H6WGMG2T.js";
|
|
6
|
+
|
|
7
|
+
// src/tools/update-dataset-record.ts
|
|
8
|
+
async function handleUpdateDatasetRecord(params) {
|
|
9
|
+
const result = await updateDatasetRecord(params);
|
|
10
|
+
const lines = [];
|
|
11
|
+
lines.push("Record updated successfully!\n");
|
|
12
|
+
lines.push(`**Record ID**: ${result.id}`);
|
|
13
|
+
lines.push(`**Entry**: ${JSON.stringify(result.entry)}`);
|
|
14
|
+
return lines.join("\n");
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
handleUpdateDatasetRecord
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=update-dataset-record-7PLDGTMR.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getEvaluatorType,
|
|
3
|
+
updateEvaluator
|
|
4
|
+
} from "./chunk-3OCG3QPU.js";
|
|
5
|
+
import "./chunk-UWLE5T2F.js";
|
|
6
|
+
import "./chunk-H6WGMG2T.js";
|
|
7
|
+
|
|
8
|
+
// src/tools/update-evaluator.ts
|
|
9
|
+
async function handleUpdateEvaluator(params) {
|
|
10
|
+
const { evaluatorId, ...data } = params;
|
|
11
|
+
const result = await updateEvaluator({ id: evaluatorId, ...data });
|
|
12
|
+
const evaluatorType = getEvaluatorType(result);
|
|
13
|
+
const lines = [];
|
|
14
|
+
lines.push("Evaluator updated successfully!\n");
|
|
15
|
+
lines.push(`**ID**: ${result.id}`);
|
|
16
|
+
if (result.slug) lines.push(`**Slug**: ${result.slug}`);
|
|
17
|
+
lines.push(`**Name**: ${result.name}`);
|
|
18
|
+
if (evaluatorType) lines.push(`**Evaluator Type**: ${evaluatorType}`);
|
|
19
|
+
return lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
handleUpdateEvaluator
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=update-evaluator-4LFTKFPT.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getEvaluatorType,
|
|
3
3
|
updateEvaluator
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-3OCG3QPU.js";
|
|
5
|
+
import "./chunk-UWLE5T2F.js";
|
|
6
|
+
import "./chunk-H6WGMG2T.js";
|
|
7
7
|
import "./chunk-SAS5OB7F.js";
|
|
8
8
|
|
|
9
9
|
// src/tools/update-evaluator.ts
|
|
@@ -22,4 +22,4 @@ async function handleUpdateEvaluator(params) {
|
|
|
22
22
|
export {
|
|
23
23
|
handleUpdateEvaluator
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=update-evaluator-
|
|
25
|
+
//# sourceMappingURL=update-evaluator-IGTX6PX4.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
updateProject
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-B4J3PJLX.js";
|
|
4
|
+
import "./chunk-UWLE5T2F.js";
|
|
5
|
+
import "./chunk-H6WGMG2T.js";
|
|
6
6
|
import "./chunk-SAS5OB7F.js";
|
|
7
7
|
|
|
8
8
|
// src/tools/update-project.ts
|
|
@@ -22,4 +22,4 @@ async function handleUpdateProject(params) {
|
|
|
22
22
|
export {
|
|
23
23
|
handleUpdateProject
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=update-project-
|
|
25
|
+
//# sourceMappingURL=update-project-PLJIOZS6.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
updateProject
|
|
3
|
+
} from "./chunk-B4J3PJLX.js";
|
|
4
|
+
import "./chunk-UWLE5T2F.js";
|
|
5
|
+
import "./chunk-H6WGMG2T.js";
|
|
6
|
+
|
|
7
|
+
// src/tools/update-project.ts
|
|
8
|
+
async function handleUpdateProject(params) {
|
|
9
|
+
const project = await updateProject(params);
|
|
10
|
+
const lines = [];
|
|
11
|
+
lines.push(`Project updated successfully!
|
|
12
|
+
`);
|
|
13
|
+
lines.push(`**Name**: ${project.name}`);
|
|
14
|
+
lines.push(`**ID**: ${project.id}`);
|
|
15
|
+
lines.push(`**Slug**: ${project.slug}`);
|
|
16
|
+
lines.push(`**Language**: ${project.language}`);
|
|
17
|
+
lines.push(`**Framework**: ${project.framework}`);
|
|
18
|
+
lines.push(`**PII Redaction**: ${project.piiRedactionLevel}`);
|
|
19
|
+
return lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
handleUpdateProject
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=update-project-QVHSJRUP.js.map
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getPrompt,
|
|
3
|
+
getPromptVersions,
|
|
4
|
+
updatePrompt
|
|
5
|
+
} from "./chunk-UWLE5T2F.js";
|
|
6
|
+
import "./chunk-H6WGMG2T.js";
|
|
7
|
+
|
|
8
|
+
// src/tools/update-prompt.ts
|
|
9
|
+
async function handleUpdatePrompt(params) {
|
|
10
|
+
const { idOrHandle, ...data } = params;
|
|
11
|
+
let updated;
|
|
12
|
+
try {
|
|
13
|
+
updated = await updatePrompt(idOrHandle, data);
|
|
14
|
+
} catch (err) {
|
|
15
|
+
if (params.tags && params.tags.length > 0) {
|
|
16
|
+
return renderTagFailure({ idOrHandle, params });
|
|
17
|
+
}
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
return renderUpdateSuccess({ idOrHandle, params, updated });
|
|
21
|
+
}
|
|
22
|
+
async function identifyNewVersion({
|
|
23
|
+
idOrHandle,
|
|
24
|
+
prompt,
|
|
25
|
+
commitMessage
|
|
26
|
+
}) {
|
|
27
|
+
if (prompt.commitMessage === commitMessage) {
|
|
28
|
+
return { version: prompt.version, versionId: prompt.versionId };
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const versions = await getPromptVersions(idOrHandle);
|
|
32
|
+
const match = (Array.isArray(versions) ? versions : []).find(
|
|
33
|
+
(v) => v.commitMessage === commitMessage
|
|
34
|
+
);
|
|
35
|
+
if (match) return { version: match.version, versionId: match.versionId };
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
function deploymentTagsOf(prompt) {
|
|
41
|
+
return (prompt.tags ?? []).filter((tag) => tag?.name !== "latest");
|
|
42
|
+
}
|
|
43
|
+
function deploymentLines({
|
|
44
|
+
prompt,
|
|
45
|
+
newVersion
|
|
46
|
+
}) {
|
|
47
|
+
const allDeployments = deploymentTagsOf(prompt);
|
|
48
|
+
const newTags = allDeployments.filter((tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId).map((tag) => tag.name);
|
|
49
|
+
if (newTags.length > 0) {
|
|
50
|
+
return [`**Deployed to**: ${newTags.join(", ")}`];
|
|
51
|
+
}
|
|
52
|
+
const lines = [`**Deployment**: not deployed`];
|
|
53
|
+
const otherTags = Array.from(
|
|
54
|
+
new Set(
|
|
55
|
+
allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
if (otherTags.length > 0) {
|
|
59
|
+
lines.push(`**Existing deployments (untouched)**: ${otherTags.join(", ")}`);
|
|
60
|
+
}
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
async function renderUpdateSuccess({
|
|
64
|
+
idOrHandle,
|
|
65
|
+
params,
|
|
66
|
+
updated
|
|
67
|
+
}) {
|
|
68
|
+
let prompt;
|
|
69
|
+
try {
|
|
70
|
+
prompt = await getPrompt(idOrHandle, {
|
|
71
|
+
version: void 0,
|
|
72
|
+
tag: void 0
|
|
73
|
+
});
|
|
74
|
+
} catch {
|
|
75
|
+
const lines2 = [];
|
|
76
|
+
lines2.push("Prompt updated successfully!\n");
|
|
77
|
+
if (updated?.id) lines2.push(`**ID**: ${updated.id}`);
|
|
78
|
+
if (updated?.handle) lines2.push(`**Handle**: ${updated.handle}`);
|
|
79
|
+
lines2.push(`**Commit**: ${params.commitMessage}`);
|
|
80
|
+
lines2.push(
|
|
81
|
+
`**Note**: the update succeeded, but version and deployment details are unavailable (confirmation read failed). Run platform_get_prompt to inspect the current state. Do not retry the update.`
|
|
82
|
+
);
|
|
83
|
+
return lines2.join("\n");
|
|
84
|
+
}
|
|
85
|
+
const newVersion = await identifyNewVersion({
|
|
86
|
+
idOrHandle,
|
|
87
|
+
prompt,
|
|
88
|
+
commitMessage: params.commitMessage
|
|
89
|
+
});
|
|
90
|
+
const lines = [];
|
|
91
|
+
lines.push("Prompt updated successfully!\n");
|
|
92
|
+
if (prompt.id) lines.push(`**ID**: ${prompt.id}`);
|
|
93
|
+
if (prompt.handle) lines.push(`**Handle**: ${prompt.handle}`);
|
|
94
|
+
if (newVersion?.version != null) lines.push(`**Version**: v${newVersion.version}`);
|
|
95
|
+
if (newVersion?.versionId) lines.push(`**Version ID**: ${newVersion.versionId}`);
|
|
96
|
+
lines.push(`**Commit**: ${params.commitMessage}`);
|
|
97
|
+
if (!newVersion) {
|
|
98
|
+
lines.push(
|
|
99
|
+
`**Note**: update succeeded, but the new version could not be identified in the re-fetched prompt \u2014 version and deployment details are unavailable. Run platform_get_prompt to inspect the current state.`
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
if (newVersion) {
|
|
103
|
+
lines.push(...deploymentLines({ prompt, newVersion }));
|
|
104
|
+
}
|
|
105
|
+
return lines.join("\n");
|
|
106
|
+
}
|
|
107
|
+
async function renderTagFailure({
|
|
108
|
+
idOrHandle,
|
|
109
|
+
params
|
|
110
|
+
}) {
|
|
111
|
+
const failedTags = params.tags?.join(", ") ?? "";
|
|
112
|
+
let prompt;
|
|
113
|
+
try {
|
|
114
|
+
prompt = await getPrompt(idOrHandle, {
|
|
115
|
+
version: void 0,
|
|
116
|
+
tag: void 0
|
|
117
|
+
});
|
|
118
|
+
} catch {
|
|
119
|
+
return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}". Whether a new version was created could not be confirmed (confirmation read failed) \u2014 run platform_get_prompt before retrying.`;
|
|
120
|
+
}
|
|
121
|
+
const matched = await identifyNewVersion({
|
|
122
|
+
idOrHandle,
|
|
123
|
+
prompt,
|
|
124
|
+
commitMessage: params.commitMessage
|
|
125
|
+
});
|
|
126
|
+
if (matched) {
|
|
127
|
+
const lines = [];
|
|
128
|
+
lines.push("Prompt update partially failed.\n");
|
|
129
|
+
lines.push("A new version was created, but assigning the requested tag(s) failed.");
|
|
130
|
+
if (matched.versionId) lines.push(`**Version ID**: ${matched.versionId}`);
|
|
131
|
+
lines.push(`**Status**: created, untagged`);
|
|
132
|
+
lines.push(`**Failed tag(s)**: ${failedTags}`);
|
|
133
|
+
return lines.join("\n");
|
|
134
|
+
}
|
|
135
|
+
return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}".`;
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
handleUpdatePrompt
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=update-prompt-GDKRYJI3.js.map
|
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
getPrompt,
|
|
3
3
|
getPromptVersions,
|
|
4
4
|
updatePrompt
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-UWLE5T2F.js";
|
|
6
|
+
import "./chunk-H6WGMG2T.js";
|
|
7
7
|
import "./chunk-SAS5OB7F.js";
|
|
8
8
|
|
|
9
9
|
// src/tools/update-prompt.ts
|
|
@@ -41,6 +41,26 @@ async function identifyNewVersion({
|
|
|
41
41
|
function deploymentTagsOf(prompt) {
|
|
42
42
|
return (prompt.tags ?? []).filter((tag) => tag?.name !== "latest");
|
|
43
43
|
}
|
|
44
|
+
function deploymentLines({
|
|
45
|
+
prompt,
|
|
46
|
+
newVersion
|
|
47
|
+
}) {
|
|
48
|
+
const allDeployments = deploymentTagsOf(prompt);
|
|
49
|
+
const newTags = allDeployments.filter((tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId).map((tag) => tag.name);
|
|
50
|
+
if (newTags.length > 0) {
|
|
51
|
+
return [`**Deployed to**: ${newTags.join(", ")}`];
|
|
52
|
+
}
|
|
53
|
+
const lines = [`**Deployment**: not deployed`];
|
|
54
|
+
const otherTags = Array.from(
|
|
55
|
+
new Set(
|
|
56
|
+
allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
|
|
57
|
+
)
|
|
58
|
+
);
|
|
59
|
+
if (otherTags.length > 0) {
|
|
60
|
+
lines.push(`**Existing deployments (untouched)**: ${otherTags.join(", ")}`);
|
|
61
|
+
}
|
|
62
|
+
return lines;
|
|
63
|
+
}
|
|
44
64
|
async function renderUpdateSuccess({
|
|
45
65
|
idOrHandle,
|
|
46
66
|
params,
|
|
@@ -72,10 +92,8 @@ async function renderUpdateSuccess({
|
|
|
72
92
|
lines.push("Prompt updated successfully!\n");
|
|
73
93
|
if (prompt.id) lines.push(`**ID**: ${prompt.id}`);
|
|
74
94
|
if (prompt.handle) lines.push(`**Handle**: ${prompt.handle}`);
|
|
75
|
-
if (newVersion?.version != null)
|
|
76
|
-
|
|
77
|
-
if (newVersion?.versionId)
|
|
78
|
-
lines.push(`**Version ID**: ${newVersion.versionId}`);
|
|
95
|
+
if (newVersion?.version != null) lines.push(`**Version**: v${newVersion.version}`);
|
|
96
|
+
if (newVersion?.versionId) lines.push(`**Version ID**: ${newVersion.versionId}`);
|
|
79
97
|
lines.push(`**Commit**: ${params.commitMessage}`);
|
|
80
98
|
if (!newVersion) {
|
|
81
99
|
lines.push(
|
|
@@ -83,25 +101,7 @@ async function renderUpdateSuccess({
|
|
|
83
101
|
);
|
|
84
102
|
}
|
|
85
103
|
if (newVersion) {
|
|
86
|
-
|
|
87
|
-
const newTags = allDeployments.filter(
|
|
88
|
-
(tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId
|
|
89
|
-
).map((tag) => tag.name);
|
|
90
|
-
if (newTags.length > 0) {
|
|
91
|
-
lines.push(`**Deployed to**: ${newTags.join(", ")}`);
|
|
92
|
-
} else {
|
|
93
|
-
lines.push(`**Deployment**: not deployed`);
|
|
94
|
-
const otherTags = Array.from(
|
|
95
|
-
new Set(
|
|
96
|
-
allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
|
|
97
|
-
)
|
|
98
|
-
);
|
|
99
|
-
if (otherTags.length > 0) {
|
|
100
|
-
lines.push(
|
|
101
|
-
`**Existing deployments (untouched)**: ${otherTags.join(", ")}`
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
104
|
+
lines.push(...deploymentLines({ prompt, newVersion }));
|
|
105
105
|
}
|
|
106
106
|
return lines.join("\n");
|
|
107
107
|
}
|
|
@@ -127,9 +127,7 @@ async function renderTagFailure({
|
|
|
127
127
|
if (matched) {
|
|
128
128
|
const lines = [];
|
|
129
129
|
lines.push("Prompt update partially failed.\n");
|
|
130
|
-
lines.push(
|
|
131
|
-
"A new version was created, but assigning the requested tag(s) failed."
|
|
132
|
-
);
|
|
130
|
+
lines.push("A new version was created, but assigning the requested tag(s) failed.");
|
|
133
131
|
if (matched.versionId) lines.push(`**Version ID**: ${matched.versionId}`);
|
|
134
132
|
lines.push(`**Status**: created, untagged`);
|
|
135
133
|
lines.push(`**Failed tag(s)**: ${failedTags}`);
|
|
@@ -140,4 +138,4 @@ async function renderTagFailure({
|
|
|
140
138
|
export {
|
|
141
139
|
handleUpdatePrompt
|
|
142
140
|
};
|
|
143
|
-
//# sourceMappingURL=update-prompt-
|
|
141
|
+
//# sourceMappingURL=update-prompt-MY263DYF.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
formatScenarioFields
|
|
3
|
+
} from "./chunk-XUIJYNRJ.js";
|
|
4
|
+
import {
|
|
5
|
+
updateScenario
|
|
6
|
+
} from "./chunk-I7ATIZED.js";
|
|
7
|
+
import "./chunk-UWLE5T2F.js";
|
|
8
|
+
import "./chunk-H6WGMG2T.js";
|
|
9
|
+
|
|
10
|
+
// src/tools/update-scenario.ts
|
|
11
|
+
async function handleUpdateScenario(params) {
|
|
12
|
+
const { scenarioId, ...data } = params;
|
|
13
|
+
const result = await updateScenario({ id: scenarioId, ...data });
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push("Scenario updated successfully!\n");
|
|
16
|
+
lines.push(`**ID**: ${result.id}`);
|
|
17
|
+
lines.push(`**Name**: ${result.name}`);
|
|
18
|
+
if (result.situation) lines.push(`**Situation**: ${result.situation}`);
|
|
19
|
+
if (Array.isArray(result.criteria) && result.criteria.length > 0) {
|
|
20
|
+
lines.push(`**Criteria**: ${result.criteria.length} criteria`);
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(result.labels) && result.labels.length > 0) {
|
|
23
|
+
lines.push(`**Labels**: ${result.labels.join(", ")}`);
|
|
24
|
+
}
|
|
25
|
+
if (result.testSuiteId) {
|
|
26
|
+
lines.push(`**Test suite**: ${result.testSuiteId}`);
|
|
27
|
+
}
|
|
28
|
+
lines.push(...formatScenarioFields(result.fields));
|
|
29
|
+
return lines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
handleUpdateScenario
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=update-scenario-7KA3JDXA.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatScenarioFields
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XUIJYNRJ.js";
|
|
4
4
|
import {
|
|
5
5
|
updateScenario
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-I7ATIZED.js";
|
|
7
|
+
import "./chunk-UWLE5T2F.js";
|
|
8
|
+
import "./chunk-H6WGMG2T.js";
|
|
9
9
|
import "./chunk-SAS5OB7F.js";
|
|
10
10
|
|
|
11
11
|
// src/tools/update-scenario.ts
|
|
@@ -32,4 +32,4 @@ async function handleUpdateScenario(params) {
|
|
|
32
32
|
export {
|
|
33
33
|
handleUpdateScenario
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=update-scenario-
|
|
35
|
+
//# sourceMappingURL=update-scenario-MOHRQKAQ.js.map
|
package/package.json
CHANGED
|
@@ -1,80 +1,76 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langwatch/mcp-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "An MCP server for Langwatch.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/langwatch/langwatch.git",
|
|
10
|
+
"directory": "mcp-server"
|
|
11
|
+
},
|
|
12
|
+
"bin": {
|
|
13
|
+
"langwatch-mcp-server": "./dist/index.js"
|
|
14
|
+
},
|
|
5
15
|
"type": "module",
|
|
6
16
|
"main": "./dist/index.js",
|
|
7
17
|
"module": "./dist/index.js",
|
|
8
18
|
"types": "./dist/index.d.ts",
|
|
9
19
|
"exports": {
|
|
10
20
|
".": {
|
|
11
|
-
"import": "./dist/index.js"
|
|
12
|
-
"require": "./dist/index.js"
|
|
21
|
+
"import": "./dist/index.js"
|
|
13
22
|
},
|
|
14
23
|
"./create-mcp-server": {
|
|
15
24
|
"types": "./src/create-mcp-server.d.ts",
|
|
16
25
|
"import": "./dist/create-mcp-server.js",
|
|
17
|
-
"require": "./dist/create-mcp-server.
|
|
26
|
+
"require": "./dist/create-mcp-server.cjs",
|
|
18
27
|
"default": "./dist/create-mcp-server.js"
|
|
19
28
|
},
|
|
20
29
|
"./config": {
|
|
21
30
|
"types": "./src/config.d.ts",
|
|
22
31
|
"import": "./dist/config.js",
|
|
23
|
-
"require": "./dist/config.
|
|
32
|
+
"require": "./dist/config.cjs",
|
|
24
33
|
"default": "./dist/config.js"
|
|
25
34
|
}
|
|
26
35
|
},
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
},
|
|
32
|
-
"author": "",
|
|
33
|
-
"license": "MIT",
|
|
34
|
-
"engines": {
|
|
35
|
-
"node": ">=18.0.0"
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@langwatch/evaluator-contract": "0.1.0",
|
|
38
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
39
|
+
"zod": "^4.6.7"
|
|
36
40
|
},
|
|
37
41
|
"devDependencies": {
|
|
38
42
|
"@ai-sdk/anthropic": "^3.0.44",
|
|
39
43
|
"@anthropic-ai/claude-code": "2.1.228",
|
|
40
|
-
"@
|
|
41
|
-
"@langwatch/
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
+
"@langwatch/egress": "0.0.1",
|
|
45
|
+
"@langwatch/handled-error": "0.1.0",
|
|
46
|
+
"@langwatch/redaction": "0.0.1",
|
|
47
|
+
"@langwatch/scenario": "1.7.0-dev.voice10",
|
|
44
48
|
"@types/debug": "^4.1.13",
|
|
45
49
|
"@types/express": "^5.0.6",
|
|
46
50
|
"@types/node": "^26.2.0",
|
|
47
51
|
"@types/yargs": "^17.0.33",
|
|
48
|
-
"ai": "^6.0.
|
|
52
|
+
"ai": "^6.0.217",
|
|
49
53
|
"chalk": "^6.0.0",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"esbuild": "^0.28.1",
|
|
53
|
-
"eslint": "^10.2.1",
|
|
54
|
+
"dotenv": "^17.4.2",
|
|
55
|
+
"esbuild": "^0.28.2",
|
|
54
56
|
"express": "^5.2.1",
|
|
55
57
|
"node-pty": "^1.0.0",
|
|
56
|
-
"tsup": "^8.
|
|
57
|
-
"tsx": "^4.20.5",
|
|
58
|
+
"tsup": "^8.5.0",
|
|
58
59
|
"typescript": "^6.0.3",
|
|
59
|
-
"
|
|
60
|
-
"vitest": "^4.1.8",
|
|
60
|
+
"vitest": "^5.0.1",
|
|
61
61
|
"yargs": "^18.0.0",
|
|
62
|
-
"zod-validation-error": "^5.0.0"
|
|
63
|
-
"@langwatch/handled-error": "0.1.0",
|
|
64
|
-
"@langwatch/ssrf": "0.0.1",
|
|
65
|
-
"@langwatch/redaction": "0.0.1"
|
|
66
|
-
},
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
69
|
-
"zod": "^4.3.6"
|
|
62
|
+
"zod-validation-error": "^5.0.0"
|
|
70
63
|
},
|
|
71
|
-
"
|
|
72
|
-
"
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
73
66
|
},
|
|
74
67
|
"scripts": {
|
|
75
|
-
"start": "
|
|
68
|
+
"start": "node --experimental-transform-types src/index.ts",
|
|
76
69
|
"build": "tsup && node build.js",
|
|
70
|
+
"typecheck": "GOMAXPROCS=2 GOMEMLIMIT=2GiB pnpm -w exec tsc -b mcp/typescript",
|
|
77
71
|
"prepublish": "pnpm run build",
|
|
78
|
-
"test": "vitest"
|
|
72
|
+
"test": "vitest run",
|
|
73
|
+
"test:integration": "vitest run --config vitest.integration.config.js",
|
|
74
|
+
"test:scenario": "vitest run --config vitest.scenario.config.js"
|
|
79
75
|
}
|
|
80
76
|
}
|
package/pyproject.toml
CHANGED
|
@@ -5,12 +5,12 @@ description = "Add your description here"
|
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
"ipykernel>=7.3.0",
|
|
9
|
+
"langwatch",
|
|
10
|
+
"litellm>=1.96.0",
|
|
11
|
+
"mcp[cli]>=2.0.0",
|
|
12
|
+
"pandas>=2.3.2",
|
|
13
|
+
"tenacity>=9.1.4",
|
|
14
14
|
]
|
|
15
15
|
|
|
16
16
|
[tool.uv]
|
|
@@ -20,8 +20,8 @@ exclude-newer = "7 days"
|
|
|
20
20
|
# package isn't a direct dependency, so a future re-resolution can't silently
|
|
21
21
|
# pull a vulnerable version back in.
|
|
22
22
|
constraint-dependencies = [
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
"python-dotenv>=1.2.2", # security: python-dotenv advisory (#934)
|
|
24
|
+
"python-liquid>=2.2.1", # security: python-liquid advisory (#1528)
|
|
25
25
|
]
|
|
26
26
|
|
|
27
27
|
[tool.uv.sources]
|
package/src/config.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
export interface McpConfig {
|
|
2
2
|
apiKey: string | undefined;
|
|
3
3
|
endpoint: string;
|
|
4
|
+
projectId?: string;
|
|
4
5
|
}
|
|
5
6
|
|
|
6
7
|
export declare function initConfig(args: {
|
|
7
8
|
apiKey?: string;
|
|
8
9
|
endpoint?: string;
|
|
10
|
+
projectId?: string;
|
|
9
11
|
}): void;
|
|
10
12
|
|
|
13
|
+
export declare function tryGetConfig(): McpConfig | undefined;
|
|
14
|
+
|
|
11
15
|
export declare function getConfig(): McpConfig;
|
|
12
16
|
|
|
13
17
|
export declare function requireApiKey(): string;
|
package/src/config.ts
CHANGED
|
@@ -6,19 +6,7 @@ export interface McpConfig {
|
|
|
6
6
|
projectId?: string;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
//
|
|
10
|
-
// Singleton storage on globalThis
|
|
11
|
-
//
|
|
12
|
-
// When the langwatch app (CJS, no "type": "module") imports this module,
|
|
13
|
-
// tsx creates a CJS-cached copy. When mcp-server's own ESM dist chunks
|
|
14
|
-
// do `await import("./search-traces-*.js")`, Node creates a separate
|
|
15
|
-
// ESM-cached copy. Module-level variables are NOT shared between them.
|
|
16
|
-
//
|
|
17
|
-
// By storing config on globalThis, both CJS and ESM instances read/write
|
|
18
|
-
// the same object, fixing the "Config not initialized" error that occurs
|
|
19
|
-
// when initConfig() runs on the CJS side but tool handlers execute on
|
|
20
|
-
// the ESM side.
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
9
|
+
// Store on globalThis to share config between CJS and ESM module instances.
|
|
22
10
|
|
|
23
11
|
const GLOBAL_KEY = "__langwatch_mcp_config" as const;
|
|
24
12
|
const STORAGE_KEY = "__langwatch_mcp_config_storage" as const;
|
|
@@ -49,13 +37,10 @@ function getGlobalState(): McpGlobalState {
|
|
|
49
37
|
};
|
|
50
38
|
}
|
|
51
39
|
|
|
40
|
+
/** Trim surrounding whitespace and drop any trailing slashes. */
|
|
52
41
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* Request URLs are built as `${endpoint}/api/...`, so an endpoint written as
|
|
56
|
-
* `https://app.langwatch.ai/` would produce a double slash the router does not
|
|
57
|
-
* match, and the caller gets an opaque 404 with nothing pointing at the
|
|
58
|
-
* endpoint as the cause.
|
|
42
|
+
* Request URLs are built as `${endpoint}/api/...`; a trailing slash would
|
|
43
|
+
* double up and 404 with nothing pointing at the endpoint as the cause.
|
|
59
44
|
*/
|
|
60
45
|
function normalizeEndpoint(endpoint: string): string {
|
|
61
46
|
const trimmed = endpoint.trim();
|
|
@@ -64,7 +49,7 @@ function normalizeEndpoint(endpoint: string): string {
|
|
|
64
49
|
return trimmed.slice(0, end);
|
|
65
50
|
}
|
|
66
51
|
|
|
67
|
-
export function initConfig(args: { apiKey?: string; endpoint?: string }): void {
|
|
52
|
+
export function initConfig(args: { apiKey?: string; endpoint?: string; projectId?: string }): void {
|
|
68
53
|
const state = getGlobalState();
|
|
69
54
|
state.globalConfig = {
|
|
70
55
|
apiKey: args.apiKey || process.env.LANGWATCH_API_KEY,
|
|
@@ -72,19 +57,25 @@ export function initConfig(args: { apiKey?: string; endpoint?: string }): void {
|
|
|
72
57
|
normalizeEndpoint(args.endpoint ?? "") ||
|
|
73
58
|
normalizeEndpoint(process.env.LANGWATCH_ENDPOINT ?? "") ||
|
|
74
59
|
"https://app.langwatch.ai",
|
|
75
|
-
projectId: process.env.LANGWATCH_PROJECT_ID,
|
|
60
|
+
projectId: args.projectId ?? process.env.LANGWATCH_PROJECT_ID,
|
|
76
61
|
};
|
|
77
62
|
}
|
|
78
63
|
|
|
64
|
+
// Current config: per-request scoped if inside runWithConfig(), otherwise global.
|
|
65
|
+
// Returns undefined rather than throwing so callers don't need try/catch.
|
|
66
|
+
export function tryGetConfig(): McpConfig | undefined {
|
|
67
|
+
const state = getGlobalState();
|
|
68
|
+
return state.configStorage.getStore() ?? state.globalConfig;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** The current config: per-request scoped inside runWithConfig(), else global. */
|
|
79
72
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
73
|
+
* Throws when there is none — every caller here needs it to proceed. A
|
|
74
|
+
* caller that can carry on without it asks `tryGetConfig()` instead.
|
|
82
75
|
*/
|
|
83
76
|
export function getConfig(): McpConfig {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
if (scoped) return scoped;
|
|
87
|
-
if (!state.globalConfig) {
|
|
77
|
+
const config = tryGetConfig();
|
|
78
|
+
if (!config) {
|
|
88
79
|
console.error(
|
|
89
80
|
"[MCP config] getConfig() failed: globalConfig is null, no scoped config active. " +
|
|
90
81
|
"Was initConfig() called? Stack:",
|
|
@@ -92,7 +83,7 @@ export function getConfig(): McpConfig {
|
|
|
92
83
|
);
|
|
93
84
|
throw new Error("Config not initialized");
|
|
94
85
|
}
|
|
95
|
-
return
|
|
86
|
+
return config;
|
|
96
87
|
}
|
|
97
88
|
|
|
98
89
|
export function requireApiKey(): string {
|
|
@@ -107,7 +98,7 @@ export function requireApiKey(): string {
|
|
|
107
98
|
new Error().stack,
|
|
108
99
|
);
|
|
109
100
|
throw new Error(
|
|
110
|
-
"LANGWATCH_API_KEY is required. Set it via --apiKey flag or LANGWATCH_API_KEY environment variable."
|
|
101
|
+
"LANGWATCH_API_KEY is required. Set it via --apiKey flag or LANGWATCH_API_KEY environment variable.",
|
|
111
102
|
);
|
|
112
103
|
}
|
|
113
104
|
return config.apiKey;
|