@langwatch/mcp-server 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +7 -0
- package/.npmignore +41 -0
- package/CHANGELOG.md +280 -200
- package/CONTRIBUTING.md +10 -0
- package/README.md +82 -52
- 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-4EQGLBJJ.js → archive-project-SPVHXK6A.js} +4 -4
- package/dist/archive-run-plan-65QN3XRX.js +16 -0
- package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
- package/dist/{archive-scenario-W6BXYDZ3.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-NKZDZY3D.js +16 -0
- package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
- package/dist/{assign-prompt-tag-VLXUWEKU.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
- package/dist/{chunk-CDYQOY5U.js → chunk-3OCG3QPU.js} +7 -10
- package/dist/chunk-3YLN3ATJ.js +241 -0
- package/dist/chunk-5FNCQRCX.js +91 -0
- package/dist/chunk-6YZUOD34.js +55 -0
- package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
- package/dist/chunk-7VNSRCXO.js +129 -0
- package/dist/{chunk-7RHG56OH.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-TOXJQDIZ.js → chunk-HGELNIVY.js} +135 -51
- package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
- package/dist/{chunk-J42FWRJ2.js → chunk-I7ATIZED.js} +7 -7
- package/dist/{chunk-AQJO2EI5.js → chunk-ILZDO25L.js} +7 -10
- package/dist/{chunk-4QC7SA2L.js → chunk-J7PQKBLD.js} +884 -559
- package/dist/{chunk-YX3A3CFM.js → chunk-JRJPH75H.js} +7 -13
- package/dist/chunk-K2I7Z3LZ.js +28 -0
- package/dist/{chunk-5CCZFUXS.js → chunk-NKMTIHIJ.js} +6 -9
- package/dist/chunk-O7EMWEVJ.js +44 -0
- package/dist/chunk-PTDR56Z3.js +37 -0
- package/dist/chunk-RABYBFX5.js +43 -0
- package/dist/chunk-SUPUUC4W.js +64 -0
- package/dist/{chunk-SFB4MU6H.js → chunk-SXFC3FNH.js} +4 -4
- package/dist/chunk-U24EACC4.js +67 -0
- package/dist/chunk-UNJM3BIL.js +21 -0
- package/dist/{chunk-ZWIL4EFL.js → chunk-UTJCWXPZ.js} +4 -4
- package/dist/chunk-UWLE5T2F.js +312 -0
- package/dist/chunk-VMWJD732.js +57 -0
- package/dist/chunk-XUIJYNRJ.js +15 -0
- 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-7XHO6UIS.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-YQXRQC6A.js → create-annotation-VUSXULQK.js} +10 -5
- package/dist/{create-api-key-YUS36KBU.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-4Z5JO5LB.js → create-dashboard-WTKKS5Z6.js} +4 -4
- package/dist/{create-dataset-E6NMSVX7.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-SKHPRD2K.js → create-dataset-records-W4GLN2FV.js} +5 -7
- package/dist/{create-evaluator-JXF5PF33.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 -5
- package/dist/create-project-6N7PIYRY.js +44 -0
- package/dist/{create-project-CS2CB57Y.js → create-project-KAIC46UY.js} +4 -4
- package/dist/{create-prompt-F5RMX3L3.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-GMRWTEFR.js → create-prompt-tag-OPQUEXWB.js} +3 -3
- package/dist/create-scenario-5PJBMAXO.js +33 -0
- package/dist/{create-scenario-JDR2VB2H.js → create-scenario-UEM77OE7.js} +11 -4
- package/dist/create-test-suite-4IPXVSFQ.js +37 -0
- 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-O3EEH4S5.js → delete-agent-QMEK3XHK.js} +4 -4
- package/dist/delete-annotation-HY3O2OGR.js +17 -0
- package/dist/{delete-annotation-XP6FQM7A.js → delete-annotation-VKIQWUYW.js} +4 -4
- package/dist/delete-dashboard-76N66XXL.js +18 -0
- package/dist/{delete-dashboard-RFUNYCNP.js → delete-dashboard-JVIVHNJM.js} +4 -4
- package/dist/delete-dataset-HQCR66MG.js +18 -0
- package/dist/{delete-dataset-3MJFRDLP.js → delete-dataset-WKRUW4FP.js} +5 -7
- package/dist/{delete-dataset-records-WPMU5GL5.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-KNMZVSPB.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
- package/dist/{delete-workflow-3NUXO46U.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-OOFIQKOG.js +139 -0
- 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-OTIYUFZA.js +70 -0
- 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-KHBEGZGL.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-ADMKVWYZ.js → get-evaluator-ISMC4LLI.js} +4 -4
- package/dist/get-evaluator-XEUZGZCH.js +47 -0
- package/dist/{get-project-RAK7URQJ.js → get-project-5VKROSDH.js} +4 -4
- package/dist/get-project-RM6FRCBK.js +26 -0
- package/dist/get-prompt-OWXJZHQQ.js +95 -0
- package/dist/get-prompt-W52DY36E.js +94 -0
- package/dist/get-run-plan-BE3M2AUX.js +59 -0
- package/dist/get-run-plan-RUXQ6PAX.js +58 -0
- package/dist/get-scenario-RNM7BAX2.js +37 -0
- package/dist/{get-scenario-ZTAJJL5T.js → get-scenario-YM4ODWW6.js} +8 -4
- package/dist/get-simulation-run-6GIATQE5.js +69 -0
- package/dist/{get-simulation-run-T2ZQWYH2.js → get-simulation-run-LCFSMPGQ.js} +33 -20
- package/dist/get-test-suite-GC2O7YH6.js +49 -0
- package/dist/get-test-suite-P5LJ6VLF.js +48 -0
- package/dist/get-trace-KBRVV4NN.js +45 -0
- package/dist/{get-trace-K7U234Q4.js → get-trace-SEF3FMR5.js} +11 -13
- package/dist/get-workflow-7PVED7JE.js +25 -0
- package/dist/{get-workflow-L5L2PSK3.js → get-workflow-YXULW4GC.js} +4 -4
- package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
- package/dist/{http-server-YXHFPPGA.js → http-server-IR4QOS43.js} +4071 -342
- package/dist/index.js +60221 -38077
- package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
- package/dist/{langwatch-api-annotations-FDAS6NQ7.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
- package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
- package/dist/{langwatch-api-dashboards-JTVCS7ZJ.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
- package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
- package/dist/{langwatch-api-monitors-3J7UIQME.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-NBJX5KOG.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
- package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
- package/dist/list-agents-HVYWEQMI.js +43 -0
- package/dist/list-agents-RBAOCF53.js +42 -0
- package/dist/list-annotations-HJH4NBLD.js +38 -0
- package/dist/{list-annotations-ZTVP4EEL.js → list-annotations-J4UAHSUN.js} +10 -5
- package/dist/{list-api-keys-CWD4UQT5.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-PWG6P6KR.js → list-dashboards-ROSYFLDQ.js} +4 -4
- package/dist/list-dashboards-RQ635ZU7.js +32 -0
- package/dist/{list-dataset-records-IOE7LQXS.js → list-dataset-records-M5TKA6LK.js} +14 -10
- package/dist/list-dataset-records-WFM7F33C.js +43 -0
- package/dist/{list-datasets-ZT4JYUDT.js → list-datasets-B5X4P7BQ.js} +9 -13
- package/dist/list-datasets-THUKQHPX.js +56 -0
- package/dist/{list-evaluators-SJHC7VBH.js → list-evaluators-MYH2OVCI.js} +5 -7
- package/dist/list-evaluators-NLVWF6K7.js +32 -0
- package/dist/{list-model-providers-PPD2WPD2.js → list-model-providers-3JUGP4YI.js} +4 -4
- package/dist/list-model-providers-H3XKORFO.js +35 -0
- package/dist/{list-projects-K7QAIX2I.js → list-projects-6EJ5YYEW.js} +5 -7
- package/dist/list-projects-YNNSRMLC.js +40 -0
- package/dist/{list-prompt-tags-FOO6TNHB.js → list-prompt-tags-NVFQO6WX.js} +3 -3
- package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
- package/dist/{list-prompts-SC2HAUFG.js → list-prompts-HSIMMHTF.js} +4 -6
- package/dist/list-prompts-IRI6AIXO.js +30 -0
- package/dist/list-run-plans-PX2XI6EK.js +46 -0
- package/dist/list-run-plans-QALLCN2K.js +45 -0
- package/dist/list-scenarios-QZRPVHS4.js +46 -0
- package/dist/list-scenarios-SSJQEMJP.js +45 -0
- package/dist/list-simulation-runs-KNOLGMDV.js +53 -0
- package/dist/{list-simulation-runs-KF5THG5H.js → list-simulation-runs-OEADLLQR.js} +19 -9
- package/dist/list-test-suites-ANAQBLDG.js +34 -0
- package/dist/list-test-suites-N4WVLBKK.js +35 -0
- 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-QSJWURCK.js → list-workflows-IMSX7SXU.js} +5 -7
- package/dist/list-workflows-ZHTX5LCL.js +33 -0
- package/dist/{rename-prompt-tag-EKWU5QF3.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
- package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
- package/dist/rename-test-suite-4J7UX5S2.js +21 -0
- package/dist/rename-test-suite-NNVLMLKY.js +20 -0
- package/dist/report-issue-AS34ZMJF.js +898 -0
- package/dist/report-issue-DCZFLGDO.js +899 -0
- package/dist/rerun-run-plan-TG2V4WM4.js +22 -0
- package/dist/rerun-run-plan-ZI5OY3VA.js +21 -0
- package/dist/revoke-api-key-3J3ZA4UB.js +15 -0
- package/dist/{revoke-api-key-FTRTZMOF.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-PAARQSI4.js +39 -0
- package/dist/run-query-KJDH544C.js +47 -0
- package/dist/run-query-T4QW2Z5O.js +46 -0
- package/dist/run-test-suite-SQJELEZX.js +26 -0
- package/dist/run-test-suite-STB6NUJM.js +25 -0
- package/dist/{run-workflow-QPXC627O.js → run-workflow-D6PQNBI6.js} +4 -4
- package/dist/{run-agent-6SM4XNA7.js → run-workflow-SP32SO5M.js} +10 -11
- package/dist/search-traces-HCBGOG6R.js +170 -0
- package/dist/search-traces-HSTQ6WTQ.js +171 -0
- package/dist/{set-model-provider-3WKT63ZN.js → set-model-provider-GF7NXUJA.js} +4 -4
- package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
- package/dist/{update-agent-SMAEHLXH.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-BDUK7TUO.js → update-dataset-SQZ6T4WX.js} +6 -6
- package/dist/{update-dataset-record-4ZSDRBSW.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-LS6TIBY7.js → update-evaluator-IGTX6PX4.js} +4 -4
- package/dist/{update-project-LKVYXENH.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-MY263DYF.js +141 -0
- package/dist/update-scenario-7KA3JDXA.js +34 -0
- package/dist/{update-scenario-NEXCAQI7.js → update-scenario-MOHRQKAQ.js} +11 -4
- package/package.json +39 -44
- package/pyproject.toml +8 -8
- package/src/config.d.ts +4 -0
- package/src/config.ts +20 -29
- package/src/create-mcp-server.ts +1021 -596
- 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 +202 -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 +140 -0
- package/src/langwatch-api-scenarios.ts +17 -10
- package/src/langwatch-api-secrets.ts +31 -24
- package/src/langwatch-api-simulation-runs.ts +10 -7
- package/src/langwatch-api-test-suites.ts +116 -0
- package/src/langwatch-api-triggers.ts +96 -34
- package/src/langwatch-api-workflows.ts +9 -9
- package/src/langwatch-api.ts +143 -109
- 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 +76 -0
- package/src/schemas/suite-fields.ts +132 -0
- 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 +10 -0
- package/src/tools/archive-scenario.ts +2 -4
- package/src/tools/archive-test-suite.ts +10 -0
- 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 +11 -5
- package/src/tools/create-test-suite.ts +38 -0
- 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 +86 -12
- 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 +54 -0
- package/src/tools/format-scenario.ts +12 -0
- package/src/tools/format-suite-details.ts +90 -0
- package/src/tools/get-agent.ts +54 -3
- 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 +100 -37
- package/src/tools/get-run-plan.ts +60 -0
- package/src/tools/get-scenario.ts +6 -5
- package/src/tools/get-simulation-run.ts +32 -20
- package/src/tools/get-test-suite.ts +46 -0
- package/src/tools/get-trace.ts +16 -17
- package/src/tools/get-workflow.ts +1 -1
- package/src/tools/list-agents.ts +20 -3
- 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 +47 -0
- package/src/tools/list-scenarios.ts +26 -17
- package/src/tools/list-simulation-runs.ts +13 -5
- package/src/tools/list-test-suites.ts +35 -0
- 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 +15 -0
- package/src/tools/report-issue.ts +5 -9
- package/src/tools/rerun-run-plan.ts +18 -0
- package/src/tools/revoke-api-key.ts +2 -4
- package/src/tools/run-agent.ts +65 -14
- package/src/tools/run-experiment.ts +36 -37
- package/src/tools/run-plan.ts +46 -0
- package/src/tools/run-query.ts +47 -0
- package/src/tools/run-test-suite.ts +27 -0
- 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 +18 -0
- 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 +185 -15
- package/src/tools/update-scenario.ts +11 -5
- package/src/tools/update-test-suite.ts +40 -0
- 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 +19 -12
- package/uv.lock +416 -296
- package/vitest.integration.config.js +10 -0
- package/vitest.scenario.config.js +9 -0
- package/.eslintrc.cjs +0 -36
- package/dist/archive-suite-4T6BSRS7.js +0 -16
- package/dist/chunk-77BNWQ3U.js +0 -86
- package/dist/chunk-A2LEVYQ5.js +0 -217
- package/dist/chunk-TJCXFNDT.js +0 -24
- package/dist/chunk-YZLYHLLI.js +0 -48
- package/dist/config.d.ts +0 -17
- package/dist/create-mcp-server.d.ts +0 -10
- package/dist/create-suite-LZS6QIAF.js +0 -39
- package/dist/delete-evaluator-33SP2JFX.js +0 -16
- package/dist/discover-evaluator-schema-XTAD4X7D.js +0 -2191
- package/dist/discover-scenario-schema-FE64QK2D.js +0 -67
- package/dist/get-agent-Y7MWZ65F.js +0 -29
- package/dist/get-analytics-TETCSOK6.js +0 -73
- package/dist/get-dataset-RCMU5VAH.js +0 -49
- package/dist/get-prompt-OY5B7TRI.js +0 -46
- package/dist/get-suite-J7JVWO6O.js +0 -45
- package/dist/index.d.ts +0 -2
- package/dist/langwatch-api-secrets-BUBSNCNO.js +0 -41
- package/dist/langwatch-api-triggers-EDFUCJN6.js +0 -31
- package/dist/list-agents-KFHKGPXV.js +0 -33
- package/dist/list-scenarios-F2WYNRIE.js +0 -41
- package/dist/list-suites-CRY4VWW6.js +0 -43
- package/dist/report-issue-XYVAPAYJ.js +0 -412
- package/dist/run-suite-NKZCJ2IN.js +0 -30
- package/dist/search-traces-A6HFKPLJ.js +0 -79
- package/dist/update-prompt-ODCRQRN6.js +0 -25
- package/dist/update-suite-SNO3GS7T.js +0 -40
- package/src/__tests__/all-tools.integration.test.ts +0 -1626
- 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 -288
- 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__/public-http-request-security.integration.test.ts +0 -118
- package/src/__tests__/report-issue.integration.test.ts +0 -147
- package/src/__tests__/scenario-tools.integration.test.ts +0 -286
- package/src/__tests__/scenario-tools.unit.test.ts +0 -188
- package/src/__tests__/schemas.unit.test.ts +0 -85
- package/src/__tests__/support/http-server-harness.ts +0 -138
- package/src/__tests__/tools.unit.test.ts +0 -924
- package/src/langwatch-api-suites.ts +0 -118
- package/src/schemas/filter-fields.ts +0 -119
- package/src/schemas/index.ts +0 -4
- package/src/tools/archive-suite.ts +0 -12
- package/src/tools/create-suite.ts +0 -42
- package/src/tools/get-suite.ts +0 -47
- package/src/tools/list-suites.ts +0 -43
- package/src/tools/run-suite.ts +0 -28
- package/src/tools/update-suite.ts +0 -44
|
@@ -1,5 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { makeRequest } from "./langwatch-api.ts";
|
|
4
|
+
import { requestPublicJson } from "./public-http-request.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The run parameters a call carries: a flat record of scalars. The platform
|
|
8
|
+
* declares run parameters as `string`, `number` or `boolean`, so a nested
|
|
9
|
+
* object or an array is outside the contract and is refused here.
|
|
10
|
+
*/
|
|
11
|
+
export const agentCallParamsSchema = z.record(
|
|
12
|
+
z.string(),
|
|
13
|
+
z.union([z.string(), z.number(), z.boolean()]),
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
export type AgentCallParams = z.infer<typeof agentCallParamsSchema>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* One run parameter an agent declares, as the platform lists it. An agent
|
|
20
|
+
* never declares a secret parameter: a secret belongs to the scenario and is
|
|
21
|
+
* supplied per run.
|
|
22
|
+
*/
|
|
23
|
+
export interface AgentParameterSpec {
|
|
24
|
+
name: string;
|
|
25
|
+
type: "string" | "number" | "boolean";
|
|
26
|
+
options?: string[];
|
|
27
|
+
default?: string | number | boolean;
|
|
28
|
+
description?: string;
|
|
29
|
+
required?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** One process connected as an instance of a connected agent. */
|
|
33
|
+
export interface AgentInstance {
|
|
34
|
+
id: string;
|
|
35
|
+
hostname: string;
|
|
36
|
+
label?: string | null;
|
|
37
|
+
connectedAt: string;
|
|
38
|
+
}
|
|
3
39
|
|
|
4
40
|
export interface AgentSummary {
|
|
5
41
|
id: string;
|
|
@@ -8,6 +44,19 @@ export interface AgentSummary {
|
|
|
8
44
|
config: Record<string, unknown> | null;
|
|
9
45
|
createdAt: string;
|
|
10
46
|
updatedAt: string;
|
|
47
|
+
/** Connected agents: the environment the SDK registered under. */
|
|
48
|
+
environment?: string | null;
|
|
49
|
+
/** Connected agents: online while at least one instance is connected. */
|
|
50
|
+
status?: "online" | "offline" | null;
|
|
51
|
+
instances?: AgentInstance[];
|
|
52
|
+
lastSeenAt?: string | null;
|
|
53
|
+
owner?: { userId: string; name: string } | null;
|
|
54
|
+
hostLabel?: string | null;
|
|
55
|
+
/** Whether this key can run the agent. */
|
|
56
|
+
selectable?: boolean;
|
|
57
|
+
/** Why the agent cannot be run with this key; null when it can. */
|
|
58
|
+
notSelectableReason?: "owned_by_another_person" | null;
|
|
59
|
+
parameters?: AgentParameterSpec[];
|
|
11
60
|
}
|
|
12
61
|
|
|
13
62
|
export interface AgentListResponse {
|
|
@@ -20,6 +69,31 @@ export interface AgentListResponse {
|
|
|
20
69
|
};
|
|
21
70
|
}
|
|
22
71
|
|
|
72
|
+
/** One conversation message as the relay carries it, OpenAI style. */
|
|
73
|
+
export interface AgentCallMessage {
|
|
74
|
+
role: string;
|
|
75
|
+
content?: unknown;
|
|
76
|
+
[key: string]: unknown;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** The body `POST /api/v1/agents/:id/call` takes. */
|
|
80
|
+
export interface AgentCallBody {
|
|
81
|
+
messages: AgentCallMessage[];
|
|
82
|
+
newMessages?: AgentCallMessage[];
|
|
83
|
+
threadId?: string;
|
|
84
|
+
params?: AgentCallParams;
|
|
85
|
+
session?: unknown;
|
|
86
|
+
traceparent?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** The reply of the relay: the function's output and the instance that ran it. */
|
|
90
|
+
export interface AgentCallResponse {
|
|
91
|
+
output: unknown;
|
|
92
|
+
session?: unknown;
|
|
93
|
+
instance: { hostname: string; label?: string | null };
|
|
94
|
+
durationMs: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
23
97
|
export async function listAgents(params?: {
|
|
24
98
|
page?: number;
|
|
25
99
|
limit?: number;
|
|
@@ -28,14 +102,11 @@ export async function listAgents(params?: {
|
|
|
28
102
|
if (params?.page) query.set("page", String(params.page));
|
|
29
103
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
30
104
|
const qs = query.toString() ? `?${query}` : "";
|
|
31
|
-
return makeRequest("GET", `/api/agents${qs}`) as Promise<AgentListResponse>;
|
|
105
|
+
return makeRequest("GET", `/api/v1/agents${qs}`) as Promise<AgentListResponse>;
|
|
32
106
|
}
|
|
33
107
|
|
|
34
108
|
export async function getAgent(id: string): Promise<AgentSummary> {
|
|
35
|
-
return makeRequest(
|
|
36
|
-
"GET",
|
|
37
|
-
`/api/agents/${encodeURIComponent(id)}`,
|
|
38
|
-
) as Promise<AgentSummary>;
|
|
109
|
+
return makeRequest("GET", `/api/v1/agents/${encodeURIComponent(id)}`) as Promise<AgentSummary>;
|
|
39
110
|
}
|
|
40
111
|
|
|
41
112
|
export async function createAgent(data: {
|
|
@@ -43,7 +114,7 @@ export async function createAgent(data: {
|
|
|
43
114
|
type: string;
|
|
44
115
|
config: Record<string, unknown>;
|
|
45
116
|
}): Promise<AgentSummary> {
|
|
46
|
-
return makeRequest("POST", "/api/agents", data) as Promise<AgentSummary>;
|
|
117
|
+
return makeRequest("POST", "/api/v1/agents", data) as Promise<AgentSummary>;
|
|
47
118
|
}
|
|
48
119
|
|
|
49
120
|
export async function updateAgent(params: {
|
|
@@ -55,22 +126,132 @@ export async function updateAgent(params: {
|
|
|
55
126
|
const { id, ...data } = params;
|
|
56
127
|
return makeRequest(
|
|
57
128
|
"PATCH",
|
|
58
|
-
`/api/agents/${encodeURIComponent(id)}`,
|
|
129
|
+
`/api/v1/agents/${encodeURIComponent(id)}`,
|
|
59
130
|
data,
|
|
60
131
|
) as Promise<AgentSummary>;
|
|
61
132
|
}
|
|
62
133
|
|
|
63
134
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
135
|
+
* Runs one turn of a connected agent through the relay: the platform
|
|
136
|
+
* dispatches it to a live instance and answers with the function's output.
|
|
66
137
|
*/
|
|
67
|
-
export async function
|
|
68
|
-
id
|
|
69
|
-
|
|
70
|
-
|
|
138
|
+
export async function callAgent({
|
|
139
|
+
id,
|
|
140
|
+
body,
|
|
141
|
+
}: {
|
|
142
|
+
id: string;
|
|
143
|
+
body: AgentCallBody;
|
|
144
|
+
}): Promise<AgentCallResponse> {
|
|
145
|
+
return makeRequest(
|
|
146
|
+
"POST",
|
|
147
|
+
`/api/v1/agents/${encodeURIComponent(id)}/call`,
|
|
148
|
+
body,
|
|
149
|
+
) as Promise<AgentCallResponse>;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** The ids `POST /api/v1/agents/:id/test` answers with. */
|
|
153
|
+
export interface AgentTestRunResponse {
|
|
154
|
+
scenarioRunId: string;
|
|
155
|
+
batchRunId: string;
|
|
156
|
+
setId: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Runs one scripted "ping" scenario against an agent and succeeds when
|
|
161
|
+
* the answer arrives. Creates no scenario, run plan or test suite; the
|
|
162
|
+
* response carries the run ids to follow.
|
|
163
|
+
*/
|
|
164
|
+
export async function testAgent(id: string): Promise<AgentTestRunResponse> {
|
|
165
|
+
return makeRequest(
|
|
166
|
+
"POST",
|
|
167
|
+
`/api/v1/agents/${encodeURIComponent(id)}/test`,
|
|
168
|
+
{},
|
|
169
|
+
) as Promise<AgentTestRunResponse>;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const isMessageList = (value: unknown): value is AgentCallMessage[] =>
|
|
173
|
+
Array.isArray(value) &&
|
|
174
|
+
value.every(
|
|
175
|
+
(item) =>
|
|
176
|
+
typeof item === "object" &&
|
|
177
|
+
item !== null &&
|
|
178
|
+
typeof (item as AgentCallMessage).role === "string",
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The relay body for a connected agent: `message` is one user turn,
|
|
183
|
+
* `input` is the raw body (must carry `messages`), `parameters` are run
|
|
184
|
+
* parameters, `threadId` continues a conversation. A string is a refusal.
|
|
185
|
+
*/
|
|
186
|
+
export function buildRelayBody({
|
|
187
|
+
input,
|
|
188
|
+
message,
|
|
189
|
+
parameters,
|
|
190
|
+
threadId,
|
|
191
|
+
}: {
|
|
192
|
+
input: Record<string, unknown>;
|
|
193
|
+
message?: string;
|
|
194
|
+
parameters?: AgentCallParams;
|
|
195
|
+
threadId?: string;
|
|
196
|
+
}): AgentCallBody | string {
|
|
197
|
+
let messages: AgentCallMessage[];
|
|
198
|
+
if (message !== undefined) {
|
|
199
|
+
messages = [{ role: "user", content: message }];
|
|
200
|
+
} else if (isMessageList(input.messages)) {
|
|
201
|
+
messages = input.messages;
|
|
202
|
+
} else {
|
|
203
|
+
return "a connected agent takes a conversation: give `message`, or `input` with a `messages` list.";
|
|
204
|
+
}
|
|
205
|
+
const body: AgentCallBody = { messages };
|
|
206
|
+
const thread = threadId ?? (typeof input.threadId === "string" ? input.threadId : undefined);
|
|
207
|
+
if (thread) body.threadId = thread;
|
|
208
|
+
if (isMessageList(input.newMessages)) body.newMessages = input.newMessages;
|
|
209
|
+
if (input.session !== undefined) body.session = input.session;
|
|
210
|
+
let inputParams: AgentCallParams | undefined;
|
|
211
|
+
if (input.params !== undefined) {
|
|
212
|
+
const parsed = agentCallParamsSchema.safeParse(input.params);
|
|
213
|
+
if (!parsed.success) {
|
|
214
|
+
return "`params` takes one flat object of string, number or boolean values. Nested objects and arrays are not run parameters.";
|
|
215
|
+
}
|
|
216
|
+
inputParams = parsed.data;
|
|
217
|
+
}
|
|
218
|
+
if (inputParams || parameters) body.params = { ...inputParams, ...parameters };
|
|
219
|
+
return body;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Run an agent. A connected agent runs one turn through the relay; an HTTP
|
|
224
|
+
* agent is called at its URL; a workflow-linked agent runs on the workflow
|
|
225
|
+
* engine.
|
|
226
|
+
*/
|
|
227
|
+
export async function runAgent({
|
|
228
|
+
id,
|
|
229
|
+
input,
|
|
230
|
+
message,
|
|
231
|
+
parameters,
|
|
232
|
+
threadId,
|
|
233
|
+
}: {
|
|
234
|
+
id: string;
|
|
235
|
+
input?: Record<string, unknown>;
|
|
236
|
+
message?: string;
|
|
237
|
+
parameters?: AgentCallParams;
|
|
238
|
+
threadId?: string;
|
|
239
|
+
}): Promise<{ agentType: string; result: Record<string, unknown> }> {
|
|
71
240
|
const agent = await getAgent(id);
|
|
72
241
|
const config = agent.config ?? {};
|
|
73
242
|
|
|
243
|
+
if (agent.type === "connected") {
|
|
244
|
+
const body = buildRelayBody({ input: input ?? {}, message, parameters, threadId });
|
|
245
|
+
if (typeof body === "string") throw new Error(body);
|
|
246
|
+
if (agent.status === "offline") {
|
|
247
|
+
throw new Error(
|
|
248
|
+
`Agent "${agent.name}" is offline. Start the process that calls connectAgent (or connect_agent) and try again.`,
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
const result = await callAgent({ id: agent.id, body });
|
|
252
|
+
return { agentType: "connected", result: result as unknown as Record<string, unknown> };
|
|
253
|
+
}
|
|
254
|
+
|
|
74
255
|
if (agent.type === "http") {
|
|
75
256
|
const url = (config as Record<string, unknown>).url as string | undefined;
|
|
76
257
|
if (!url) {
|
|
@@ -91,18 +272,18 @@ export async function runAgent(
|
|
|
91
272
|
if (!workflowId) {
|
|
92
273
|
throw new Error(
|
|
93
274
|
`Agent "${agent.name}" (type: ${agent.type}) cannot be executed directly. ` +
|
|
94
|
-
`Only HTTP agents and workflow-linked agents can be run.`,
|
|
275
|
+
`Only connected agents, HTTP agents and workflow-linked agents can be run.`,
|
|
95
276
|
);
|
|
96
277
|
}
|
|
97
278
|
|
|
98
|
-
const { runWorkflow } = await import("./langwatch-api-workflows.
|
|
279
|
+
const { runWorkflow } = await import("./langwatch-api-workflows.ts");
|
|
99
280
|
const result = await runWorkflow(workflowId, input);
|
|
100
281
|
return { agentType: agent.type, result };
|
|
101
282
|
}
|
|
102
283
|
|
|
103
284
|
export async function deleteAgent(id: string): Promise<{ id: string; name: string }> {
|
|
104
|
-
return makeRequest(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
285
|
+
return makeRequest("DELETE", `/api/v1/agents/${encodeURIComponent(id)}`) as Promise<{
|
|
286
|
+
id: string;
|
|
287
|
+
name: string;
|
|
288
|
+
}>;
|
|
108
289
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeRequest } from "./langwatch-api.
|
|
1
|
+
import { makeRequest } from "./langwatch-api.ts";
|
|
2
2
|
|
|
3
3
|
export interface AnnotationResponse {
|
|
4
4
|
id?: string;
|
|
@@ -13,21 +13,20 @@ export interface AnnotationResponse {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export async function listAnnotations(): Promise<AnnotationResponse[]> {
|
|
16
|
-
return makeRequest("GET", "/api/annotations") as Promise<AnnotationResponse[]>;
|
|
16
|
+
return makeRequest("GET", "/api/v1/annotations") as Promise<AnnotationResponse[]>;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export async function getAnnotation(id: string): Promise<AnnotationResponse> {
|
|
20
20
|
return makeRequest(
|
|
21
21
|
"GET",
|
|
22
|
-
`/api/annotations/${encodeURIComponent(id)}`,
|
|
22
|
+
`/api/v1/annotations/${encodeURIComponent(id)}`,
|
|
23
23
|
) as Promise<AnnotationResponse>;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export async function getAnnotationsByTrace(traceId: string): Promise<AnnotationResponse[]> {
|
|
27
|
-
return makeRequest(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
) as Promise<AnnotationResponse[]>;
|
|
27
|
+
return makeRequest("GET", `/api/v1/annotations/trace/${encodeURIComponent(traceId)}`) as Promise<
|
|
28
|
+
AnnotationResponse[]
|
|
29
|
+
>;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
export async function createAnnotation(
|
|
@@ -36,14 +35,14 @@ export async function createAnnotation(
|
|
|
36
35
|
): Promise<AnnotationResponse> {
|
|
37
36
|
return makeRequest(
|
|
38
37
|
"POST",
|
|
39
|
-
`/api/annotations/trace/${encodeURIComponent(traceId)}`,
|
|
38
|
+
`/api/v1/annotations/trace/${encodeURIComponent(traceId)}`,
|
|
40
39
|
data,
|
|
41
40
|
) as Promise<AnnotationResponse>;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
export async function deleteAnnotation(id: string): Promise<{ status?: string; message?: string }> {
|
|
45
|
-
return makeRequest(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
return makeRequest("DELETE", `/api/v1/annotations/${encodeURIComponent(id)}`) as Promise<{
|
|
45
|
+
status?: string;
|
|
46
|
+
message?: string;
|
|
47
|
+
}>;
|
|
49
48
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeRequest } from "./langwatch-api.
|
|
1
|
+
import { makeRequest } from "./langwatch-api.ts";
|
|
2
2
|
|
|
3
3
|
export interface RoleBinding {
|
|
4
4
|
id: string;
|
|
@@ -28,7 +28,7 @@ export interface ApiKeyCreateResponse {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export async function listApiKeys(): Promise<{ data: ApiKeySummary[] }> {
|
|
31
|
-
return makeRequest("GET", "/api/api-keys") as Promise<{ data: ApiKeySummary[] }>;
|
|
31
|
+
return makeRequest("GET", "/api/v1/api-keys") as Promise<{ data: ApiKeySummary[] }>;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export async function createApiKey(data: {
|
|
@@ -36,19 +36,18 @@ export async function createApiKey(data: {
|
|
|
36
36
|
name: string;
|
|
37
37
|
description?: string;
|
|
38
38
|
expiresAt?: string;
|
|
39
|
-
bindings?:
|
|
39
|
+
bindings?: {
|
|
40
40
|
role: "ADMIN" | "MEMBER" | "VIEWER";
|
|
41
41
|
scopeType: "ORGANIZATION" | "TEAM" | "PROJECT";
|
|
42
42
|
scopeId: string;
|
|
43
|
-
}
|
|
43
|
+
}[];
|
|
44
44
|
projectIds?: string[];
|
|
45
45
|
}): Promise<ApiKeyCreateResponse> {
|
|
46
|
-
return makeRequest("POST", "/api/api-keys", data) as Promise<ApiKeyCreateResponse>;
|
|
46
|
+
return makeRequest("POST", "/api/v1/api-keys", data) as Promise<ApiKeyCreateResponse>;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export async function revokeApiKey(id: string): Promise<{ success: boolean }> {
|
|
50
|
-
return makeRequest(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
) as Promise<{ success: boolean }>;
|
|
50
|
+
return makeRequest("DELETE", `/api/v1/api-keys/${encodeURIComponent(id)}`) as Promise<{
|
|
51
|
+
success: boolean;
|
|
52
|
+
}>;
|
|
54
53
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { makeRequest } from "./langwatch-api.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A board in the Dashboards area, the place a widget is added to
|
|
5
|
+
* (`modules/dashboard/contract/src/board-rest.schemas.ts`). Analytics Reports boards are
|
|
6
|
+
* `/api/v1/dashboards`, and hold no widget.
|
|
7
|
+
*/
|
|
8
|
+
export interface Board {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description: string | null;
|
|
12
|
+
scope: "PRIVATE" | "PROJECT" | "ORGANIZATION";
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
platformUrl: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface BoardListItem extends Board {
|
|
19
|
+
widgetCount: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The project's Dashboards boards, each with how many widgets it holds. */
|
|
23
|
+
export async function listBoards({
|
|
24
|
+
projectId,
|
|
25
|
+
}: {
|
|
26
|
+
projectId: string;
|
|
27
|
+
}): Promise<{ data: BoardListItem[] }> {
|
|
28
|
+
return makeRequest(
|
|
29
|
+
"GET",
|
|
30
|
+
`/api/v1/projects/${encodeURIComponent(projectId)}/analytics/boards`,
|
|
31
|
+
) as Promise<{ data: BoardListItem[] }>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Reads one Dashboards board; a board in another project, or only in Reports, answers 404. */
|
|
35
|
+
export async function getBoard({
|
|
36
|
+
projectId,
|
|
37
|
+
boardId,
|
|
38
|
+
}: {
|
|
39
|
+
projectId: string;
|
|
40
|
+
boardId: string;
|
|
41
|
+
}): Promise<Board> {
|
|
42
|
+
return makeRequest(
|
|
43
|
+
"GET",
|
|
44
|
+
`/api/v1/projects/${encodeURIComponent(projectId)}/analytics/boards/${encodeURIComponent(boardId)}`,
|
|
45
|
+
) as Promise<Board>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { makeRequest } from "./langwatch-api.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* One named LangWatchQL statement a widget may run, as the REST endpoint validates it
|
|
5
|
+
* (`modules/dashboard/contract/src/dashboard-widget-rest.schemas.ts`).
|
|
6
|
+
*/
|
|
7
|
+
export interface DashboardWidgetQueryInput {
|
|
8
|
+
name: string;
|
|
9
|
+
sql: string;
|
|
10
|
+
parameters?: {
|
|
11
|
+
name: string;
|
|
12
|
+
type: "string" | "number" | "boolean";
|
|
13
|
+
default?: string | number | boolean;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Where a widget came from, as the platform records it. */
|
|
18
|
+
export type DashboardWidgetSource =
|
|
19
|
+
| { kind: "catalogue"; catalogueId: string }
|
|
20
|
+
| { kind: "langy" }
|
|
21
|
+
| { kind: "code" }
|
|
22
|
+
| { kind: "api" };
|
|
23
|
+
|
|
24
|
+
export interface DashboardWidgetDefinition {
|
|
25
|
+
version: number;
|
|
26
|
+
code: string;
|
|
27
|
+
queries: DashboardWidgetQueryInput[];
|
|
28
|
+
description?: string;
|
|
29
|
+
prompt?: string;
|
|
30
|
+
source?: DashboardWidgetSource;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface DashboardWidget {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
definition: DashboardWidgetDefinition;
|
|
37
|
+
createdAt: string;
|
|
38
|
+
updatedAt: string;
|
|
39
|
+
platformUrl: string;
|
|
40
|
+
dashboardId: string | null;
|
|
41
|
+
gridColumn: number;
|
|
42
|
+
gridRow: number;
|
|
43
|
+
colSpan: number;
|
|
44
|
+
rowSpan: number;
|
|
45
|
+
}
|
|
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
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeRequest } from "./langwatch-api.
|
|
1
|
+
import { makeRequest } from "./langwatch-api.ts";
|
|
2
2
|
|
|
3
3
|
export interface DashboardSummary {
|
|
4
4
|
id: string;
|
|
@@ -18,31 +18,34 @@ export interface DashboardListResponse {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export async function listDashboards(): Promise<DashboardListResponse> {
|
|
21
|
-
return makeRequest("GET", "/api/dashboards") as Promise<DashboardListResponse>;
|
|
21
|
+
return makeRequest("GET", "/api/v1/dashboards") as Promise<DashboardListResponse>;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export async function getDashboard(id: string): Promise<DashboardDetail> {
|
|
25
25
|
return makeRequest(
|
|
26
26
|
"GET",
|
|
27
|
-
`/api/dashboards/${encodeURIComponent(id)}`,
|
|
27
|
+
`/api/v1/dashboards/${encodeURIComponent(id)}`,
|
|
28
28
|
) as Promise<DashboardDetail>;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export async function createDashboard(data: { name: string }): Promise<DashboardDetail> {
|
|
32
|
-
return makeRequest("POST", "/api/dashboards", data) as Promise<DashboardDetail>;
|
|
32
|
+
return makeRequest("POST", "/api/v1/dashboards", data) as Promise<DashboardDetail>;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export async function renameDashboard(
|
|
35
|
+
export async function renameDashboard(
|
|
36
|
+
id: string,
|
|
37
|
+
data: { name: string },
|
|
38
|
+
): Promise<DashboardDetail> {
|
|
36
39
|
return makeRequest(
|
|
37
40
|
"PATCH",
|
|
38
|
-
`/api/dashboards/${encodeURIComponent(id)}`,
|
|
41
|
+
`/api/v1/dashboards/${encodeURIComponent(id)}`,
|
|
39
42
|
data,
|
|
40
43
|
) as Promise<DashboardDetail>;
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
export async function deleteDashboard(id: string): Promise<{ id: string; name: string }> {
|
|
44
|
-
return makeRequest(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
return makeRequest("DELETE", `/api/v1/dashboards/${encodeURIComponent(id)}`) as Promise<{
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
}>;
|
|
48
51
|
}
|