@langwatch/mcp-server 0.7.0 → 0.9.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/.release-please-shim +1 -0
- package/CHANGELOG.md +87 -0
- package/LICENSE +7 -0
- package/dist/archive-project-HZBRPR2S.js +19 -0
- package/dist/{archive-scenario-WJ2A7ETN.js → archive-scenario-P5RRITRM.js} +4 -4
- package/dist/{archive-suite-4JOM4SSL.js → archive-suite-NUUFD2EM.js} +4 -4
- package/dist/{assign-prompt-tag-GL7EAAF3.js → assign-prompt-tag-FKCCZPML.js} +3 -3
- package/dist/{chunk-2WPLXEKF.js → chunk-42ZHHHIJ.js} +20 -5
- package/dist/chunk-ADSJ2FDA.js +44 -0
- package/dist/{chunk-IE4M5OGE.js → chunk-BB7EOKHR.js} +2 -2
- package/dist/chunk-BBJ5WAJB.js +24 -0
- package/dist/{chunk-EGH5RPXM.js → chunk-BYWYM2RP.js} +2 -2
- package/dist/{chunk-2GT7IFWK.js → chunk-CCM4ZFGF.js} +2 -2
- package/dist/{chunk-LUMEZEHL.js → chunk-CHKCEZBP.js} +2 -2
- package/dist/{chunk-ZVS4UKN2.js → chunk-HKY3GW45.js} +2 -2
- package/dist/{chunk-EUQDVOSU.js → chunk-JHOSVOHT.js} +2 -2
- package/dist/{chunk-E5JYYU3J.js → chunk-JVLJKQJG.js} +669 -94
- package/dist/{chunk-BWWY5KEF.js → chunk-KOO5733S.js} +3 -2
- package/dist/{chunk-HYMIWO3U.js → chunk-R7C7OUVG.js} +2 -2
- package/dist/{chunk-WQG2DFHX.js → chunk-TROIWSEQ.js} +2 -2
- package/dist/{chunk-CCWCIJJ3.js → chunk-X2SEURT2.js} +2 -2
- package/dist/{chunk-4AUB2BIA.js → chunk-XC62KJIT.js} +3 -3
- package/dist/config.js +1 -1
- package/dist/{create-agent-MBOOT3XK.js → create-agent-K5Q7BFGZ.js} +4 -4
- package/dist/{create-annotation-XMV6A7ED.js → create-annotation-KN3GE3DK.js} +4 -4
- package/dist/create-api-key-OQI5PUNQ.js +26 -0
- package/dist/{create-dashboard-VRKLFVZJ.js → create-dashboard-G4QA5AXP.js} +4 -4
- package/dist/{create-dataset-7HQPZCRE.js → create-dataset-WQSC37N7.js} +4 -4
- package/dist/{create-dataset-records-2NIVFYTV.js → create-dataset-records-B4RL3FLC.js} +4 -4
- package/dist/{create-evaluator-WYFRFLRC.js → create-evaluator-YFFQIR7E.js} +4 -4
- package/dist/create-mcp-server.js +3 -2
- package/dist/create-project-CUVQ67VN.js +44 -0
- package/dist/{create-prompt-IEN7O6JT.js → create-prompt-NGXKSP4X.js} +3 -3
- package/dist/{create-prompt-tag-CAEZ45VO.js → create-prompt-tag-IUKYPVHH.js} +3 -3
- package/dist/{create-scenario-6YHSMGLP.js → create-scenario-FNBXALH3.js} +4 -4
- package/dist/{create-suite-H5XOFDE5.js → create-suite-DJEPD4ZB.js} +4 -4
- package/dist/{delete-agent-JKTNBWAA.js → delete-agent-TJI5XBBM.js} +4 -4
- package/dist/{delete-annotation-ACMDV6QO.js → delete-annotation-KRP53TUU.js} +4 -4
- package/dist/{delete-dashboard-VJSR7CRU.js → delete-dashboard-N5SZJIR3.js} +4 -4
- package/dist/{delete-dataset-RTTTWP4D.js → delete-dataset-KDUOHL2P.js} +4 -4
- package/dist/{delete-dataset-records-KNQTIPQK.js → delete-dataset-records-DM4W3PAW.js} +4 -4
- package/dist/{delete-evaluator-7FVC5WM4.js → delete-evaluator-7ZATLJOA.js} +4 -4
- package/dist/{delete-prompt-tag-ZMZUAGFW.js → delete-prompt-tag-I6HNMSVJ.js} +3 -3
- package/dist/{delete-workflow-EYQ3T4RQ.js → delete-workflow-QEO74JQR.js} +4 -4
- package/dist/{get-agent-E3QSTVKG.js → get-agent-3KDWCP5N.js} +4 -4
- package/dist/{get-analytics-2OHV763I.js → get-analytics-GPVJX7SF.js} +3 -3
- package/dist/{get-dashboard-PC7JDHH6.js → get-dashboard-YPTIE5YY.js} +4 -4
- package/dist/{get-dataset-H5IK5FVU.js → get-dataset-6DQFYITM.js} +4 -4
- package/dist/{get-evaluator-UWVUPYTM.js → get-evaluator-PCM6XQAU.js} +4 -4
- package/dist/get-project-JCMWXVLU.js +26 -0
- package/dist/{get-prompt-WZUOLLQC.js → get-prompt-5XAGWWBG.js} +3 -3
- package/dist/{get-scenario-Q6LCNUYN.js → get-scenario-7XBCDZWX.js} +4 -4
- package/dist/{get-simulation-run-Z2XKO256.js → get-simulation-run-AV24FJWI.js} +4 -4
- package/dist/{get-suite-BXK5TN7P.js → get-suite-4DBVHFEM.js} +4 -4
- package/dist/{get-trace-4EJAYVBG.js → get-trace-MRBDS3HJ.js} +3 -3
- package/dist/{get-workflow-O34QJLHD.js → get-workflow-UR4Y6UFX.js} +4 -4
- package/dist/{http-server-ISHF7NJX.js → http-server-DEGNV5EP.js} +4 -3
- package/dist/index.js +1453 -431
- package/dist/{langwatch-api-annotations-ERBG27RF.js → langwatch-api-annotations-ZJDRB4JH.js} +4 -4
- package/dist/{langwatch-api-dashboards-G6TR7VVO.js → langwatch-api-dashboards-WARLI6NF.js} +4 -4
- package/dist/{langwatch-api-monitors-WSXZLS2B.js → langwatch-api-monitors-4XKXHYCG.js} +3 -3
- package/dist/{langwatch-api-secrets-RR5DKG2X.js → langwatch-api-secrets-6SHK5G7Q.js} +3 -3
- package/dist/{langwatch-api-triggers-2RTNSWQY.js → langwatch-api-triggers-5SX6R2WU.js} +3 -3
- package/dist/langwatch-api-workflows-NLJENNXE.js +15 -0
- package/dist/{list-agents-AW3P6FJV.js → list-agents-NECO7MPI.js} +4 -4
- package/dist/{list-annotations-QNCGWPQ3.js → list-annotations-3OJEO774.js} +4 -4
- package/dist/list-api-keys-AWW7ROLB.js +37 -0
- package/dist/{list-dashboards-R7RK2IXL.js → list-dashboards-DVPVVVKW.js} +4 -4
- package/dist/{list-dataset-records-WVCSQP7P.js → list-dataset-records-I4BYORF5.js} +4 -4
- package/dist/{list-datasets-KEXRLDEU.js → list-datasets-WUAE5HGX.js} +4 -4
- package/dist/{list-evaluators-7R2LB4JH.js → list-evaluators-B6OSVAM2.js} +4 -4
- package/dist/{list-model-providers-OBYJCKBX.js → list-model-providers-NL6IP4UZ.js} +4 -4
- package/dist/list-projects-5FHMJ4PQ.js +42 -0
- package/dist/{list-prompt-tags-6LY3ZPYI.js → list-prompt-tags-Z2DD6FLQ.js} +3 -3
- package/dist/{list-prompts-VWEZ4CDE.js → list-prompts-VNXKHK7T.js} +3 -3
- package/dist/{list-scenarios-TXD4W2ZJ.js → list-scenarios-CFZHXL76.js} +4 -4
- package/dist/{list-simulation-runs-RHPOLMFI.js → list-simulation-runs-AM2BXLBW.js} +4 -4
- package/dist/{list-suites-FSGBX27Z.js → list-suites-ZDOHAAXF.js} +4 -4
- package/dist/{list-workflows-VRGEZ3EN.js → list-workflows-WBRBKLIT.js} +4 -4
- package/dist/{rename-prompt-tag-VOJJLX4M.js → rename-prompt-tag-A4RJUK7Z.js} +3 -3
- package/dist/revoke-api-key-ZSPSPF5G.js +15 -0
- package/dist/{run-agent-KTCC7TB7.js → run-agent-JFNDY7MR.js} +4 -4
- package/dist/{run-suite-BTMHGI2D.js → run-suite-TH7LO5TJ.js} +4 -4
- package/dist/{run-workflow-IGAYGKJL.js → run-workflow-CK3JP5U2.js} +4 -4
- package/dist/{search-traces-VYFUIMXH.js → search-traces-3BBVYPC3.js} +3 -3
- package/dist/{set-model-provider-W5IUI326.js → set-model-provider-WOC5FNMV.js} +4 -4
- package/dist/{update-agent-4BB7EYLR.js → update-agent-YMEV5MTL.js} +4 -4
- package/dist/{update-dataset-CXBKZ4W3.js → update-dataset-EYT5POFM.js} +4 -4
- package/dist/{update-dataset-record-HOHAMHXG.js → update-dataset-record-VFF5JTX4.js} +4 -4
- package/dist/{update-evaluator-IVOR6FTR.js → update-evaluator-6IJHFG2E.js} +4 -4
- package/dist/update-project-OIT4WPFI.js +24 -0
- package/dist/{update-prompt-OWQAKE7K.js → update-prompt-ZU2DD6KM.js} +3 -3
- package/dist/{update-scenario-GDFVILPN.js → update-scenario-3VUTPDRU.js} +4 -4
- package/dist/{update-suite-BXYUYSPT.js → update-suite-C6JFDQHL.js} +4 -4
- package/package.json +7 -7
- package/pnpm-workspace.yaml +2 -0
- package/pyproject.toml +3 -0
- package/src/__tests__/all-tools.integration.test.ts +9 -0
- package/src/__tests__/datasets.integration.test.ts +17 -0
- package/src/__tests__/datasets.unit.test.ts +4 -0
- package/src/__tests__/experiment-list-tools.unit.test.ts +157 -0
- package/src/__tests__/get-experiment-results.unit.test.ts +222 -0
- package/src/__tests__/project-api-key-tools.unit.test.ts +451 -0
- package/src/__tests__/scenario-tools.unit.test.ts +3 -0
- package/src/config.ts +2 -0
- package/src/create-mcp-server.ts +257 -13
- package/src/langwatch-api-api-keys.ts +54 -0
- package/src/langwatch-api-projects.ts +82 -0
- package/src/langwatch-api.ts +22 -4
- package/src/tools/archive-project.ts +14 -0
- package/src/tools/create-api-key.ts +29 -0
- package/src/tools/create-project.ts +45 -0
- package/src/tools/get-experiment-results.ts +273 -0
- package/src/tools/get-project.ts +20 -0
- package/src/tools/list-api-keys.ts +33 -0
- package/src/tools/list-experiment-runs.ts +142 -0
- package/src/tools/list-experiments.ts +95 -0
- package/src/tools/list-projects.ts +41 -0
- package/src/tools/revoke-api-key.ts +9 -0
- package/src/tools/{run-evaluation.ts → run-experiment.ts} +5 -5
- package/src/tools/update-project.ts +22 -0
- package/uv.lock +192 -530
- package/Dockerfile +0 -22
- package/build.js +0 -12
- package/dist/archive-scenario-WJ2A7ETN.js.map +0 -1
- package/dist/archive-suite-4JOM4SSL.js.map +0 -1
- package/dist/assign-prompt-tag-GL7EAAF3.js.map +0 -1
- package/dist/chunk-2GT7IFWK.js.map +0 -1
- package/dist/chunk-2WPLXEKF.js.map +0 -1
- package/dist/chunk-4AUB2BIA.js.map +0 -1
- package/dist/chunk-BWWY5KEF.js.map +0 -1
- package/dist/chunk-CCWCIJJ3.js.map +0 -1
- package/dist/chunk-E5JYYU3J.js.map +0 -1
- package/dist/chunk-EGH5RPXM.js.map +0 -1
- package/dist/chunk-EUQDVOSU.js.map +0 -1
- package/dist/chunk-HYMIWO3U.js.map +0 -1
- package/dist/chunk-IE4M5OGE.js.map +0 -1
- package/dist/chunk-LUMEZEHL.js.map +0 -1
- package/dist/chunk-NUFPTHKU.js.map +0 -1
- package/dist/chunk-WQG2DFHX.js.map +0 -1
- package/dist/chunk-WVI5CJ6S.js.map +0 -1
- package/dist/chunk-ZVS4UKN2.js.map +0 -1
- package/dist/chunk-ZXKLPC2E.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/create-agent-MBOOT3XK.js.map +0 -1
- package/dist/create-annotation-XMV6A7ED.js.map +0 -1
- package/dist/create-dashboard-VRKLFVZJ.js.map +0 -1
- package/dist/create-dataset-7HQPZCRE.js.map +0 -1
- package/dist/create-dataset-records-2NIVFYTV.js.map +0 -1
- package/dist/create-evaluator-WYFRFLRC.js.map +0 -1
- package/dist/create-mcp-server.js.map +0 -1
- package/dist/create-prompt-IEN7O6JT.js.map +0 -1
- package/dist/create-prompt-tag-CAEZ45VO.js.map +0 -1
- package/dist/create-scenario-6YHSMGLP.js.map +0 -1
- package/dist/create-suite-H5XOFDE5.js.map +0 -1
- package/dist/delete-agent-JKTNBWAA.js.map +0 -1
- package/dist/delete-annotation-ACMDV6QO.js.map +0 -1
- package/dist/delete-dashboard-VJSR7CRU.js.map +0 -1
- package/dist/delete-dataset-RTTTWP4D.js.map +0 -1
- package/dist/delete-dataset-records-KNQTIPQK.js.map +0 -1
- package/dist/delete-evaluator-7FVC5WM4.js.map +0 -1
- package/dist/delete-prompt-tag-ZMZUAGFW.js.map +0 -1
- package/dist/delete-workflow-EYQ3T4RQ.js.map +0 -1
- package/dist/discover-evaluator-schema-H23XCLNE.js.map +0 -1
- package/dist/discover-scenario-schema-MEEEVND7.js.map +0 -1
- package/dist/discover-schema-3T52ORPB.js.map +0 -1
- package/dist/get-agent-E3QSTVKG.js.map +0 -1
- package/dist/get-analytics-2OHV763I.js.map +0 -1
- package/dist/get-dashboard-PC7JDHH6.js.map +0 -1
- package/dist/get-dataset-H5IK5FVU.js.map +0 -1
- package/dist/get-evaluator-UWVUPYTM.js.map +0 -1
- package/dist/get-prompt-WZUOLLQC.js.map +0 -1
- package/dist/get-scenario-Q6LCNUYN.js.map +0 -1
- package/dist/get-simulation-run-Z2XKO256.js.map +0 -1
- package/dist/get-suite-BXK5TN7P.js.map +0 -1
- package/dist/get-trace-4EJAYVBG.js.map +0 -1
- package/dist/get-workflow-O34QJLHD.js.map +0 -1
- package/dist/http-server-ISHF7NJX.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/langwatch-api-annotations-ERBG27RF.js.map +0 -1
- package/dist/langwatch-api-dashboards-G6TR7VVO.js.map +0 -1
- package/dist/langwatch-api-monitors-WSXZLS2B.js.map +0 -1
- package/dist/langwatch-api-secrets-RR5DKG2X.js.map +0 -1
- package/dist/langwatch-api-triggers-2RTNSWQY.js.map +0 -1
- package/dist/langwatch-api-workflows-VJRIIDZ7.js +0 -15
- package/dist/langwatch-api-workflows-VJRIIDZ7.js.map +0 -1
- package/dist/list-agents-AW3P6FJV.js.map +0 -1
- package/dist/list-annotations-QNCGWPQ3.js.map +0 -1
- package/dist/list-dashboards-R7RK2IXL.js.map +0 -1
- package/dist/list-dataset-records-WVCSQP7P.js.map +0 -1
- package/dist/list-datasets-KEXRLDEU.js.map +0 -1
- package/dist/list-evaluators-7R2LB4JH.js.map +0 -1
- package/dist/list-model-providers-OBYJCKBX.js.map +0 -1
- package/dist/list-prompt-tags-6LY3ZPYI.js.map +0 -1
- package/dist/list-prompts-VWEZ4CDE.js.map +0 -1
- package/dist/list-scenarios-TXD4W2ZJ.js.map +0 -1
- package/dist/list-simulation-runs-RHPOLMFI.js.map +0 -1
- package/dist/list-suites-FSGBX27Z.js.map +0 -1
- package/dist/list-workflows-VRGEZ3EN.js.map +0 -1
- package/dist/rename-prompt-tag-VOJJLX4M.js.map +0 -1
- package/dist/run-agent-KTCC7TB7.js.map +0 -1
- package/dist/run-evaluation-2X3V3Q6L.js +0 -64
- package/dist/run-evaluation-2X3V3Q6L.js.map +0 -1
- package/dist/run-suite-BTMHGI2D.js.map +0 -1
- package/dist/run-workflow-IGAYGKJL.js.map +0 -1
- package/dist/search-traces-VYFUIMXH.js.map +0 -1
- package/dist/set-model-provider-W5IUI326.js.map +0 -1
- package/dist/update-agent-4BB7EYLR.js.map +0 -1
- package/dist/update-dataset-CXBKZ4W3.js.map +0 -1
- package/dist/update-dataset-record-HOHAMHXG.js.map +0 -1
- package/dist/update-evaluator-IVOR6FTR.js.map +0 -1
- package/dist/update-prompt-OWQAKE7K.js.map +0 -1
- package/dist/update-scenario-GDFVILPN.js.map +0 -1
- package/dist/update-suite-BXYUYSPT.js.map +0 -1
- package/tests/evaluations.ipynb +0 -649
- package/tests/fixtures/azure/azure_openai_stream_bot_expected.py +0 -102
- package/tests/fixtures/azure/azure_openai_stream_bot_input.py +0 -78
- package/tests/fixtures/dspy/dspy_bot_expected.py +0 -61
- package/tests/fixtures/dspy/dspy_bot_input.py +0 -53
- package/tests/fixtures/fastapi/fastapi_app_expected.py +0 -68
- package/tests/fixtures/fastapi/fastapi_app_input.py +0 -60
- package/tests/fixtures/fastapi/prompt_management_fastapi_expected.py +0 -114
- package/tests/fixtures/fastapi/prompt_management_fastapi_input.py +0 -88
- package/tests/fixtures/haystack/haystack_bot_expected.py +0 -141
- package/tests/fixtures/haystack/haystack_bot_input.py +0 -69
- package/tests/fixtures/langchain/langchain_bot_expected.py +0 -53
- package/tests/fixtures/langchain/langchain_bot_input.py +0 -45
- package/tests/fixtures/langchain/langchain_bot_with_memory_expected.py +0 -69
- package/tests/fixtures/langchain/langchain_bot_with_memory_input.py +0 -61
- package/tests/fixtures/langchain/langchain_rag_bot_expected.py +0 -97
- package/tests/fixtures/langchain/langchain_rag_bot_input.py +0 -77
- package/tests/fixtures/langchain/langchain_rag_bot_vertex_ai_expected.py +0 -116
- package/tests/fixtures/langchain/langchain_rag_bot_vertex_ai_input.py +0 -81
- package/tests/fixtures/langchain/langgraph_rag_bot_with_threads_expected.py +0 -331
- package/tests/fixtures/langchain/langgraph_rag_bot_with_threads_input.py +0 -106
- package/tests/fixtures/litellm/litellm_bot_expected.py +0 -40
- package/tests/fixtures/litellm/litellm_bot_input.py +0 -35
- package/tests/fixtures/openai/openai_bot_expected.py +0 -43
- package/tests/fixtures/openai/openai_bot_function_call_expected.py +0 -91
- package/tests/fixtures/openai/openai_bot_function_call_input.py +0 -82
- package/tests/fixtures/openai/openai_bot_input.py +0 -36
- package/tests/fixtures/openai/openai_bot_rag_expected.py +0 -73
- package/tests/fixtures/openai/openai_bot_rag_input.py +0 -51
- package/tests/fixtures/opentelemetry/openinference_dspy_bot_expected.py +0 -63
- package/tests/fixtures/opentelemetry/openinference_dspy_bot_input.py +0 -58
- package/tests/fixtures/opentelemetry/openinference_langchain_bot_expected.py +0 -53
- package/tests/fixtures/opentelemetry/openinference_langchain_bot_input.py +0 -52
- package/tests/fixtures/opentelemetry/openinference_openai_bot_expected.py +0 -49
- package/tests/fixtures/opentelemetry/openinference_openai_bot_input.py +0 -41
- package/tests/fixtures/opentelemetry/openllmetry_openai_bot_expected.py +0 -44
- package/tests/fixtures/opentelemetry/openllmetry_openai_bot_input.py +0 -40
- package/tests/fixtures/strands/strands_bot_expected.py +0 -84
- package/tests/fixtures/strands/strands_bot_input.py +0 -52
- package/tests/scenario-openai.test.ts +0 -160
- package/tsup.config.ts +0 -14
- package/vitest.config.js +0 -7
package/Dockerfile
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
FROM node:24-alpine
|
|
2
|
-
|
|
3
|
-
# node-pty requires native compilation tools
|
|
4
|
-
RUN apk add --no-cache python3 make g++
|
|
5
|
-
|
|
6
|
-
RUN corepack enable && corepack prepare pnpm@10 --activate
|
|
7
|
-
|
|
8
|
-
WORKDIR /app
|
|
9
|
-
|
|
10
|
-
# Build from repo root: docker build -t langwatch-mcp -f mcp-server/Dockerfile .
|
|
11
|
-
COPY mcp-server/package.json mcp-server/pnpm-lock.yaml mcp-server/pnpm-workspace.yaml ./mcp-server/
|
|
12
|
-
WORKDIR /app/mcp-server
|
|
13
|
-
RUN pnpm install --frozen-lockfile
|
|
14
|
-
|
|
15
|
-
WORKDIR /app
|
|
16
|
-
COPY mcp-server/ ./mcp-server/
|
|
17
|
-
COPY langevals/ ./langevals/
|
|
18
|
-
|
|
19
|
-
EXPOSE 3000
|
|
20
|
-
|
|
21
|
-
WORKDIR /app/mcp-server
|
|
22
|
-
CMD ["node", "--import", "tsx/esm", "src/index.ts", "--http", "--port", "3000"]
|
package/build.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/archive-scenario.ts"],"sourcesContent":["import { archiveScenario as apiArchiveScenario } from \"../langwatch-api-scenarios.js\";\n\n/**\n * Handles the platform_archive_scenario MCP tool invocation.\n *\n * Archives (soft-deletes) a scenario and returns confirmation.\n */\nexport async function handleArchiveScenario(params: {\n scenarioId: string;\n}): Promise<string> {\n const result = await apiArchiveScenario(params.scenarioId);\n\n const lines: string[] = [];\n lines.push(\"Scenario archived successfully!\\n\");\n lines.push(`**ID**: ${result.id}`);\n lines.push(`**Status**: ${result.archived ? \"archived\" : \"active\"}`);\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAOA,eAAsB,sBAAsB,QAExB;AAClB,QAAM,SAAS,MAAM,gBAAmB,OAAO,UAAU;AAEzD,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,mCAAmC;AAC9C,QAAM,KAAK,WAAW,OAAO,EAAE,EAAE;AACjC,QAAM,KAAK,eAAe,OAAO,WAAW,aAAa,QAAQ,EAAE;AAEnE,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/archive-suite.ts"],"sourcesContent":["import { archiveSuite as apiArchiveSuite } from \"../langwatch-api-suites.js\";\n\n/**\n * Handles the platform_archive_suite MCP tool invocation.\n */\nexport async function handleArchiveSuite(params: {\n id: string;\n}): Promise<string> {\n const result = await apiArchiveSuite(params.id);\n\n return `Suite ${result.id} has been archived (soft-deleted).`;\n}\n"],"mappings":";;;;;;;AAKA,eAAsB,mBAAmB,QAErB;AAClB,QAAM,SAAS,MAAM,aAAgB,OAAO,EAAE;AAE9C,SAAO,SAAS,OAAO,EAAE;AAC3B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/assign-prompt-tag.ts"],"sourcesContent":["import { assignPromptTag as apiAssignPromptTag } from \"../langwatch-api.js\";\n\nexport async function handleAssignPromptTag(params: {\n idOrHandle: string;\n tag: string;\n versionId: string;\n}): Promise<string> {\n await apiAssignPromptTag({ idOrHandle: params.idOrHandle, tag: params.tag, versionId: params.versionId });\n\n const lines: string[] = [];\n lines.push(\"Tag assigned successfully!\\n\");\n lines.push(`**Prompt**: ${params.idOrHandle}`);\n lines.push(`**Tag**: ${params.tag}`);\n lines.push(`**Version ID**: ${params.versionId}`);\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;AAEA,eAAsB,sBAAsB,QAIxB;AAClB,QAAM,gBAAmB,EAAE,YAAY,OAAO,YAAY,KAAK,OAAO,KAAK,WAAW,OAAO,UAAU,CAAC;AAExG,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,8BAA8B;AACzC,QAAM,KAAK,eAAe,OAAO,UAAU,EAAE;AAC7C,QAAM,KAAK,YAAY,OAAO,GAAG,EAAE;AACnC,QAAM,KAAK,mBAAmB,OAAO,SAAS,EAAE;AAChD,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-scenarios.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\n// --- Scenario types ---\n\nexport interface ScenarioSummary {\n id: string;\n name: string;\n situation: string;\n criteria: string[];\n labels: string[];\n}\n\nexport interface ScenarioArchiveResponse {\n id: string;\n archived: boolean;\n}\n\n// --- Scenario API functions ---\n\n/** Lists all scenarios in the project. */\nexport async function listScenarios(): Promise<ScenarioSummary[]> {\n return makeRequest(\"GET\", \"/api/scenarios\") as Promise<ScenarioSummary[]>;\n}\n\n/** Retrieves a single scenario by ID. */\nexport async function getScenario(id: string): Promise<ScenarioSummary> {\n return makeRequest(\n \"GET\",\n `/api/scenarios/${encodeURIComponent(id)}`\n ) as Promise<ScenarioSummary>;\n}\n\n/** Creates a new scenario. */\nexport async function createScenario(data: {\n name: string;\n situation: string;\n criteria?: string[];\n labels?: string[];\n}): Promise<ScenarioSummary> {\n return makeRequest(\"POST\", \"/api/scenarios\", data) as Promise<ScenarioSummary>;\n}\n\n/** Updates an existing scenario. */\nexport async function updateScenario(params: {\n id: string;\n name?: string;\n situation?: string;\n criteria?: string[];\n labels?: string[];\n}): Promise<ScenarioSummary> {\n const { id, ...data } = params;\n return makeRequest(\n \"PUT\",\n `/api/scenarios/${encodeURIComponent(id)}`,\n data\n ) as Promise<ScenarioSummary>;\n}\n\n/** Archives (soft-deletes) a scenario. */\nexport async function archiveScenario(\n id: string\n): Promise<ScenarioArchiveResponse> {\n return makeRequest(\n \"DELETE\",\n `/api/scenarios/${encodeURIComponent(id)}`\n ) as Promise<ScenarioArchiveResponse>;\n}\n"],"mappings":";;;;;AAoBA,eAAsB,gBAA4C;AAChE,SAAO,YAAY,OAAO,gBAAgB;AAC5C;AAGA,eAAsB,YAAY,IAAsC;AACtE,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,EAC1C;AACF;AAGA,eAAsB,eAAe,MAKR;AAC3B,SAAO,YAAY,QAAQ,kBAAkB,IAAI;AACnD;AAGA,eAAsB,eAAe,QAMR;AAC3B,QAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,IACxC;AAAA,EACF;AACF;AAGA,eAAsB,gBACpB,IACkC;AAClC,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,EAC1C;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api.ts"],"sourcesContent":["import { getConfig, requireApiKey } from \"./config.js\";\n\n// --- Response types ---\n\nexport interface TraceSearchResult {\n trace_id: string;\n formatted_trace?: string;\n input?: { value: string };\n output?: { value: string };\n timestamps?: { started_at?: string | number };\n metadata?: Record<string, unknown>;\n error?: Record<string, unknown>;\n}\n\nexport interface SearchTracesResponse {\n traces: TraceSearchResult[];\n pagination?: {\n totalHits?: number;\n scrollId?: string;\n };\n}\n\nexport interface TraceDetailResponse {\n trace_id: string;\n formatted_trace?: string;\n input?: { value: string };\n output?: { value: string };\n timestamps?: {\n started_at?: string | number;\n updated_at?: string | number;\n inserted_at?: string | number;\n };\n metadata?: {\n user_id?: string;\n thread_id?: string;\n customer_id?: string;\n labels?: string[];\n [key: string]: unknown;\n };\n error?: Record<string, unknown>;\n ascii_tree?: string;\n evaluations?: Array<{\n evaluator_id?: string;\n name?: string;\n score?: number;\n passed?: boolean;\n label?: string;\n }>;\n spans?: Array<{\n span_id: string;\n name?: string;\n type?: string;\n model?: string;\n input?: { value: string };\n output?: { value: string };\n timestamps?: { started_at?: number; finished_at?: number };\n metrics?: {\n completion_time_ms?: number;\n prompt_tokens?: number;\n completion_tokens?: number;\n tokens_estimated?: boolean;\n cost?: number;\n };\n }>;\n}\n\nexport interface AnalyticsBucket {\n date: string;\n [key: string]: unknown;\n}\n\nexport interface AnalyticsTimeseriesResponse {\n currentPeriod: AnalyticsBucket[];\n previousPeriod: AnalyticsBucket[];\n}\n\nexport interface PromptSummary {\n id?: string;\n handle?: string;\n name?: string;\n latestVersionNumber?: number;\n version?: number;\n}\n\nexport interface PromptVersion {\n version?: number;\n commitMessage?: string;\n model?: string;\n messages?: Array<{ role: string; content: string }>;\n}\n\nexport interface PromptDetailResponse extends PromptSummary {\n versions?: PromptVersion[];\n model?: string;\n messages?: Array<{ role: string; content: string }>;\n prompt?: Array<{ role: string; content: string }>;\n}\n\nexport interface PromptMutationResponse {\n id?: string;\n handle?: string;\n name?: string;\n latestVersionNumber?: number;\n}\n\n// --- HTTP client ---\n\n/**\n * Sends an HTTP request to the LangWatch API.\n *\n * Builds the full URL from the configured endpoint, adds authentication,\n * and handles JSON serialization/deserialization.\n *\n * @throws Error with status code and response body when the response is not OK\n */\nexport async function makeRequest(\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n path: string,\n body?: unknown\n): Promise<unknown> {\n const url = getConfig().endpoint + path;\n const headers: Record<string, string> = {\n \"X-Auth-Token\": requireApiKey(),\n };\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n const response = await fetch(url, {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n if (!response.ok) {\n const responseBody = await response.text();\n throw new Error(\n `LangWatch API error ${response.status}: ${responseBody}`\n );\n }\n\n if (response.status === 204 || response.headers?.get(\"content-length\") === \"0\") {\n return null;\n }\n return response.json();\n}\n\n/** Searches traces with optional filters and pagination. */\nexport async function searchTraces(params: {\n query?: string;\n filters?: Record<string, string[]>;\n startDate: number;\n endDate: number;\n pageSize?: number;\n pageOffset?: number;\n scrollId?: string;\n format?: \"digest\" | \"json\";\n}): Promise<SearchTracesResponse> {\n const { format = \"digest\", ...rest } = params;\n return makeRequest(\"POST\", \"/api/traces/search\", {\n ...rest,\n format,\n }) as Promise<SearchTracesResponse>;\n}\n\n/** Retrieves a single trace by its ID. */\nexport async function getTraceById(\n traceId: string,\n format: \"digest\" | \"json\" = \"digest\"\n): Promise<TraceDetailResponse> {\n return makeRequest(\n \"GET\",\n `/api/traces/${encodeURIComponent(traceId)}?format=${format}`\n ) as Promise<TraceDetailResponse>;\n}\n\n/** Fetches analytics timeseries data for the given metrics and date range. */\nexport async function getAnalyticsTimeseries(params: {\n series: Array<{\n metric: string;\n aggregation: string;\n key?: string;\n subkey?: string;\n }>;\n startDate: number;\n endDate: number;\n timeZone?: string;\n groupBy?: string;\n groupByKey?: string;\n filters?: Record<string, string[]>;\n}): Promise<AnalyticsTimeseriesResponse> {\n return makeRequest(\n \"POST\",\n \"/api/analytics/timeseries\",\n params\n ) as Promise<AnalyticsTimeseriesResponse>;\n}\n\n/** Lists all prompts in the project. */\nexport async function listPrompts(): Promise<PromptSummary[]> {\n return makeRequest(\"GET\", \"/api/prompts\") as Promise<PromptSummary[]>;\n}\n\n/** Retrieves a single prompt by ID or handle. */\nexport async function getPrompt(\n idOrHandle: string,\n options?: { version?: number; tag?: string }\n): Promise<PromptDetailResponse> {\n const params = new URLSearchParams();\n if (options?.version != null) params.set(\"version\", String(options.version));\n if (options?.tag) params.set(\"tag\", options.tag);\n const query = params.toString() ? `?${params}` : \"\";\n return makeRequest(\n \"GET\",\n `/api/prompts/${encodeURIComponent(idOrHandle)}${query}`\n ) as Promise<PromptDetailResponse>;\n}\n\n/** Creates a new prompt. */\nexport async function createPrompt(data: {\n handle: string;\n messages: Array<{ role: string; content: string }>;\n model: string;\n tags?: string[];\n}): Promise<PromptMutationResponse> {\n return makeRequest(\n \"POST\",\n \"/api/prompts\",\n data\n ) as Promise<PromptMutationResponse>;\n}\n\n/** Updates an existing prompt by ID or handle. */\nexport async function updatePrompt(\n idOrHandle: string,\n data: {\n messages?: Array<{ role: string; content: string }>;\n model?: string;\n commitMessage: string;\n tags?: string[];\n }\n): Promise<PromptMutationResponse> {\n return makeRequest(\n \"PUT\",\n `/api/prompts/${encodeURIComponent(idOrHandle)}`,\n data\n ) as Promise<PromptMutationResponse>;\n}\n\n/** Assigns a tag to a specific prompt version. */\nexport async function assignPromptTag({\n idOrHandle,\n tag,\n versionId,\n}: {\n idOrHandle: string;\n tag: string;\n versionId: string;\n}): Promise<unknown> {\n return makeRequest(\n \"PUT\",\n `/api/prompts/${encodeURIComponent(idOrHandle)}/tags/${encodeURIComponent(tag)}`,\n { versionId }\n );\n}\n\n/** Lists all prompt tag definitions for the organization. */\nexport async function listPromptTags(): Promise<unknown> {\n return makeRequest(\"GET\", \"/api/prompts/tags\");\n}\n\n/** Creates a custom prompt tag definition. */\nexport async function createPromptTag(name: string): Promise<unknown> {\n return makeRequest(\"POST\", \"/api/prompts/tags\", { name });\n}\n\n/** Renames an existing prompt tag. */\nexport async function renamePromptTag({\n tag,\n name,\n}: {\n tag: string;\n name: string;\n}): Promise<unknown> {\n return makeRequest(\n \"PUT\",\n `/api/prompts/tags/${encodeURIComponent(tag)}`,\n { name }\n );\n}\n\n/** Deletes a prompt tag and all its assignments. */\nexport async function deletePromptTag(tag: string): Promise<unknown> {\n return makeRequest(\n \"DELETE\",\n `/api/prompts/tags/${encodeURIComponent(tag)}`\n );\n}\n"],"mappings":";;;;;;AAmHA,eAAsB,YACpB,QACA,MACA,MACkB;AAClB,QAAM,MAAM,UAAU,EAAE,WAAW;AACnC,QAAM,UAAkC;AAAA,IACtC,gBAAgB,cAAc;AAAA,EAChC;AAEA,MAAI,SAAS,QAAW;AACtB,YAAQ,cAAc,IAAI;AAAA,EAC5B;AAEA,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC;AAAA,IACA;AAAA,IACA,GAAI,SAAS,SAAY,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,EAC7D,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,eAAe,MAAM,SAAS,KAAK;AACzC,UAAM,IAAI;AAAA,MACR,uBAAuB,SAAS,MAAM,KAAK,YAAY;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,OAAO,SAAS,SAAS,IAAI,gBAAgB,MAAM,KAAK;AAC9E,WAAO;AAAA,EACT;AACA,SAAO,SAAS,KAAK;AACvB;AAGA,eAAsB,aAAa,QASD;AAChC,QAAM,EAAE,SAAS,UAAU,GAAG,KAAK,IAAI;AACvC,SAAO,YAAY,QAAQ,sBAAsB;AAAA,IAC/C,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAGA,eAAsB,aACpB,SACA,SAA4B,UACE;AAC9B,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,OAAO,CAAC,WAAW,MAAM;AAAA,EAC7D;AACF;AAGA,eAAsB,uBAAuB,QAaJ;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGA,eAAsB,cAAwC;AAC5D,SAAO,YAAY,OAAO,cAAc;AAC1C;AAGA,eAAsB,UACpB,YACA,SAC+B;AAC/B,QAAM,SAAS,IAAI,gBAAgB;AACnC,MAAI,SAAS,WAAW,KAAM,QAAO,IAAI,WAAW,OAAO,QAAQ,OAAO,CAAC;AAC3E,MAAI,SAAS,IAAK,QAAO,IAAI,OAAO,QAAQ,GAAG;AAC/C,QAAM,QAAQ,OAAO,SAAS,IAAI,IAAI,MAAM,KAAK;AACjD,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,UAAU,CAAC,GAAG,KAAK;AAAA,EACxD;AACF;AAGA,eAAsB,aAAa,MAKC;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGA,eAAsB,aACpB,YACA,MAMiC;AACjC,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,UAAU,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;AAGA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIqB;AACnB,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,UAAU,CAAC,SAAS,mBAAmB,GAAG,CAAC;AAAA,IAC9E,EAAE,UAAU;AAAA,EACd;AACF;AAGA,eAAsB,iBAAmC;AACvD,SAAO,YAAY,OAAO,mBAAmB;AAC/C;AAGA,eAAsB,gBAAgB,MAAgC;AACpE,SAAO,YAAY,QAAQ,qBAAqB,EAAE,KAAK,CAAC;AAC1D;AAGA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AACF,GAGqB;AACnB,SAAO;AAAA,IACL;AAAA,IACA,qBAAqB,mBAAmB,GAAG,CAAC;AAAA,IAC5C,EAAE,KAAK;AAAA,EACT;AACF;AAGA,eAAsB,gBAAgB,KAA+B;AACnE,SAAO;AAAA,IACL;AAAA,IACA,qBAAqB,mBAAmB,GAAG,CAAC;AAAA,EAC9C;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-agents.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\nexport interface AgentSummary {\n id: string;\n name: string;\n type: string;\n config: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentListResponse {\n data: AgentSummary[];\n pagination: {\n page: number;\n limit: number;\n total: number;\n totalPages: number;\n };\n}\n\nexport async function listAgents(params?: {\n page?: number;\n limit?: number;\n}): Promise<AgentListResponse> {\n const query = new URLSearchParams();\n if (params?.page) query.set(\"page\", String(params.page));\n if (params?.limit) query.set(\"limit\", String(params.limit));\n const qs = query.toString() ? `?${query}` : \"\";\n return makeRequest(\"GET\", `/api/agents${qs}`) as Promise<AgentListResponse>;\n}\n\nexport async function getAgent(id: string): Promise<AgentSummary> {\n return makeRequest(\n \"GET\",\n `/api/agents/${encodeURIComponent(id)}`,\n ) as Promise<AgentSummary>;\n}\n\nexport async function createAgent(data: {\n name: string;\n type: string;\n config: Record<string, unknown>;\n}): Promise<AgentSummary> {\n return makeRequest(\"POST\", \"/api/agents\", data) as Promise<AgentSummary>;\n}\n\nexport async function updateAgent(params: {\n id: string;\n name?: string;\n type?: string;\n config?: Record<string, unknown>;\n}): Promise<AgentSummary> {\n const { id, ...data } = params;\n return makeRequest(\n \"PATCH\",\n `/api/agents/${encodeURIComponent(id)}`,\n data,\n ) as Promise<AgentSummary>;\n}\n\n/**\n * Run an agent. For HTTP agents, calls the configured URL directly.\n * For workflow-linked agents, calls the workflow run endpoint.\n */\nexport async function runAgent(\n id: string,\n input?: Record<string, unknown>,\n): Promise<{ agentType: string; result: Record<string, unknown> }> {\n const agent = await getAgent(id);\n const config = agent.config ?? {};\n\n if (agent.type === \"http\") {\n const url = (config as Record<string, unknown>).url as string | undefined;\n if (!url) {\n throw new Error(\"HTTP agent has no URL configured\");\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(input ?? {}),\n });\n\n const result = (await response.json()) as Record<string, unknown>;\n return { agentType: \"http\", result };\n }\n\n // For workflow-linked agents, use the workflow run endpoint\n const workflowId = (config as Record<string, unknown>).workflowId as string | undefined;\n if (!workflowId) {\n throw new Error(\n `Agent \"${agent.name}\" (type: ${agent.type}) cannot be executed directly. ` +\n `Only HTTP agents and workflow-linked agents can be run.`,\n );\n }\n\n const { runWorkflow } = await import(\"./langwatch-api-workflows.js\");\n const result = await runWorkflow(workflowId, input);\n return { agentType: agent.type, result };\n}\n\nexport async function deleteAgent(id: string): Promise<{ id: string; name: string }> {\n return makeRequest(\n \"DELETE\",\n `/api/agents/${encodeURIComponent(id)}`,\n ) as Promise<{ id: string; name: string }>;\n}\n"],"mappings":";;;;;AAqBA,eAAsB,WAAW,QAGF;AAC7B,QAAM,QAAQ,IAAI,gBAAgB;AAClC,MAAI,QAAQ,KAAM,OAAM,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACvD,MAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAM,KAAK,MAAM,SAAS,IAAI,IAAI,KAAK,KAAK;AAC5C,SAAO,YAAY,OAAO,cAAc,EAAE,EAAE;AAC9C;AAEA,eAAsB,SAAS,IAAmC;AAChE,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,EACvC;AACF;AAEA,eAAsB,YAAY,MAIR;AACxB,SAAO,YAAY,QAAQ,eAAe,IAAI;AAChD;AAEA,eAAsB,YAAY,QAKR;AACxB,QAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,IACrC;AAAA,EACF;AACF;AAMA,eAAsB,SACpB,IACA,OACiE;AACjE,QAAM,QAAQ,MAAM,SAAS,EAAE;AAC/B,QAAM,SAAS,MAAM,UAAU,CAAC;AAEhC,MAAI,MAAM,SAAS,QAAQ;AACzB,UAAM,MAAO,OAAmC;AAChD,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,SAAS,CAAC,CAAC;AAAA,IAClC,CAAC;AAED,UAAMA,UAAU,MAAM,SAAS,KAAK;AACpC,WAAO,EAAE,WAAW,QAAQ,QAAAA,QAAO;AAAA,EACrC;AAGA,QAAM,aAAc,OAAmC;AACvD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR,UAAU,MAAM,IAAI,YAAY,MAAM,IAAI;AAAA,IAE5C;AAAA,EACF;AAEA,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,uCAA8B;AACnE,QAAM,SAAS,MAAM,YAAY,YAAY,KAAK;AAClD,SAAO,EAAE,WAAW,MAAM,MAAM,OAAO;AACzC;AAEA,eAAsB,YAAY,IAAmD;AACnF,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,EACvC;AACF;","names":["result"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport interface McpConfig {\n apiKey: string | undefined;\n endpoint: string;\n}\n\n// ---------------------------------------------------------------------------\n// Singleton storage on globalThis\n//\n// When the langwatch app (CJS, no \"type\": \"module\") imports this module,\n// tsx creates a CJS-cached copy. When mcp-server's own ESM dist chunks\n// do `await import(\"./search-traces-*.js\")`, Node creates a separate\n// ESM-cached copy. Module-level variables are NOT shared between them.\n//\n// By storing config on globalThis, both CJS and ESM instances read/write\n// the same object, fixing the \"Config not initialized\" error that occurs\n// when initConfig() runs on the CJS side but tool handlers execute on\n// the ESM side.\n// ---------------------------------------------------------------------------\n\nconst GLOBAL_KEY = \"__langwatch_mcp_config\" as const;\nconst STORAGE_KEY = \"__langwatch_mcp_config_storage\" as const;\n\ninterface McpGlobalState {\n globalConfig: McpConfig | undefined;\n configStorage: AsyncLocalStorage<McpConfig>;\n}\n\nfunction getGlobalState(): McpGlobalState {\n const g = globalThis as unknown as Record<string, unknown>;\n if (!g[GLOBAL_KEY]) {\n g[GLOBAL_KEY] = undefined;\n }\n if (!g[STORAGE_KEY]) {\n g[STORAGE_KEY] = new AsyncLocalStorage<McpConfig>();\n }\n return {\n get globalConfig() {\n return g[GLOBAL_KEY] as McpConfig | undefined;\n },\n set globalConfig(val: McpConfig | undefined) {\n g[GLOBAL_KEY] = val;\n },\n get configStorage() {\n return g[STORAGE_KEY] as AsyncLocalStorage<McpConfig>;\n },\n };\n}\n\nexport function initConfig(args: { apiKey?: string; endpoint?: string }): void {\n const state = getGlobalState();\n state.globalConfig = {\n apiKey: args.apiKey || process.env.LANGWATCH_API_KEY,\n endpoint:\n args.endpoint ||\n process.env.LANGWATCH_ENDPOINT ||\n \"https://app.langwatch.ai\",\n };\n}\n\n/**\n * Returns the current config: the per-request scoped config if inside\n * a `runWithConfig()` callback, otherwise the global config.\n */\nexport function getConfig(): McpConfig {\n const state = getGlobalState();\n const scoped = state.configStorage.getStore();\n if (scoped) return scoped;\n if (!state.globalConfig) {\n console.error(\n \"[MCP config] getConfig() failed: globalConfig is null, no scoped config active. \" +\n \"Was initConfig() called? Stack:\",\n new Error().stack,\n );\n throw new Error(\"Config not initialized\");\n }\n return state.globalConfig;\n}\n\nexport function requireApiKey(): string {\n const config = getConfig();\n if (!config.apiKey) {\n const state = getGlobalState();\n const hasScoped = !!state.configStorage.getStore();\n console.error(\n \"[MCP config] requireApiKey() failed: apiKey is undefined. \" +\n `scopedConfig=${hasScoped}, endpoint=${config.endpoint}. ` +\n \"In HTTP mode, the API key should be set per-session via runWithConfig(). Stack:\",\n new Error().stack,\n );\n throw new Error(\n \"LANGWATCH_API_KEY is required. Set it via --apiKey flag or LANGWATCH_API_KEY environment variable.\"\n );\n }\n return config.apiKey;\n}\n\n/**\n * Runs `fn` with a per-request scoped config. All calls to `getConfig()`\n * and `requireApiKey()` within `fn` (including async continuations) will\n * see the provided config instead of the global one.\n */\nexport function runWithConfig<T>(config: McpConfig, fn: () => T): T {\n const state = getGlobalState();\n return state.configStorage.run(config, fn);\n}\n"],"mappings":";AAAA,SAAS,yBAAyB;AAqBlC,IAAM,aAAa;AACnB,IAAM,cAAc;AAOpB,SAAS,iBAAiC;AACxC,QAAM,IAAI;AACV,MAAI,CAAC,EAAE,UAAU,GAAG;AAClB,MAAE,UAAU,IAAI;AAAA,EAClB;AACA,MAAI,CAAC,EAAE,WAAW,GAAG;AACnB,MAAE,WAAW,IAAI,IAAI,kBAA6B;AAAA,EACpD;AACA,SAAO;AAAA,IACL,IAAI,eAAe;AACjB,aAAO,EAAE,UAAU;AAAA,IACrB;AAAA,IACA,IAAI,aAAa,KAA4B;AAC3C,QAAE,UAAU,IAAI;AAAA,IAClB;AAAA,IACA,IAAI,gBAAgB;AAClB,aAAO,EAAE,WAAW;AAAA,IACtB;AAAA,EACF;AACF;AAEO,SAAS,WAAW,MAAoD;AAC7E,QAAM,QAAQ,eAAe;AAC7B,QAAM,eAAe;AAAA,IACnB,QAAQ,KAAK,UAAU,QAAQ,IAAI;AAAA,IACnC,UACE,KAAK,YACL,QAAQ,IAAI,sBACZ;AAAA,EACJ;AACF;AAMO,SAAS,YAAuB;AACrC,QAAM,QAAQ,eAAe;AAC7B,QAAM,SAAS,MAAM,cAAc,SAAS;AAC5C,MAAI,OAAQ,QAAO;AACnB,MAAI,CAAC,MAAM,cAAc;AACvB,YAAQ;AAAA,MACN;AAAA,MAEA,IAAI,MAAM,EAAE;AAAA,IACd;AACA,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,SAAO,MAAM;AACf;AAEO,SAAS,gBAAwB;AACtC,QAAM,SAAS,UAAU;AACzB,MAAI,CAAC,OAAO,QAAQ;AAClB,UAAM,QAAQ,eAAe;AAC7B,UAAM,YAAY,CAAC,CAAC,MAAM,cAAc,SAAS;AACjD,YAAQ;AAAA,MACN,0EACkB,SAAS,cAAc,OAAO,QAAQ;AAAA,MAExD,IAAI,MAAM,EAAE;AAAA,IACd;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,OAAO;AAChB;AAOO,SAAS,cAAiB,QAAmB,IAAgB;AAClE,QAAM,QAAQ,eAAe;AAC7B,SAAO,MAAM,cAAc,IAAI,QAAQ,EAAE;AAC3C;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-model-providers.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\n// --- Model Provider types ---\n\nexport interface ModelProviderEntry {\n id?: string;\n provider: string;\n enabled: boolean;\n customKeys: Record<string, unknown> | null;\n models?: string[] | null;\n embeddingsModels?: string[] | null;\n customModels?: unknown[] | null;\n customEmbeddingsModels?: unknown[] | null;\n disabledByDefault?: boolean;\n deploymentMapping?: unknown;\n extraHeaders?: Array<{ key: string; value: string }> | null;\n}\n\n// --- Model Provider API functions ---\n\n/** Lists all model providers for the project, with masked API keys. */\nexport async function listModelProviders(): Promise<Record<string, ModelProviderEntry>> {\n return makeRequest(\"GET\", \"/api/model-providers\") as Promise<\n Record<string, ModelProviderEntry>\n >;\n}\n\n/** Creates or updates a model provider. */\nexport async function setModelProvider(params: {\n provider: string;\n enabled: boolean;\n customKeys?: Record<string, unknown>;\n defaultModel?: string;\n}): Promise<Record<string, ModelProviderEntry>> {\n const { provider, ...data } = params;\n return makeRequest(\n \"PUT\",\n `/api/model-providers/${encodeURIComponent(provider)}`,\n data,\n ) as Promise<Record<string, ModelProviderEntry>>;\n}\n"],"mappings":";;;;;AAqBA,eAAsB,qBAAkE;AACtF,SAAO,YAAY,OAAO,sBAAsB;AAGlD;AAGA,eAAsB,iBAAiB,QAKS;AAC9C,QAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,SAAO;AAAA,IACL;AAAA,IACA,wBAAwB,mBAAmB,QAAQ,CAAC;AAAA,IACpD;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create-mcp-server.ts","../package.json","../src/schemas/create-dataset.ts"],"sourcesContent":["import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\nimport packageJson from \"../package.json\" assert { type: \"json\" };\nimport { requireApiKey } from \"./config.js\";\nimport {\n createDatasetSchema,\n datasetColumnDefinitionSchema,\n} from \"./schemas/create-dataset.js\";\n\nconst modelSchema = z\n .string()\n .describe(\n 'Model in \"provider/model-name\" format, e.g., \"openai/gpt-4o\", \"anthropic/claude-sonnet-4-5-20250929\"'\n );\n\n/**\n * Creates a new McpServer instance with all LangWatch tools registered.\n *\n * This is used both for stdio mode (single server) and HTTP mode (per-session servers).\n */\nexport function createMcpServer(): McpServer {\n const server = new McpServer({\n name: \"LangWatch\",\n version: packageJson.version,\n });\n\n registerTools(server);\n\n return server;\n}\n\n/**\n * Wraps a tool handler with error logging. In HTTP mode (production),\n * tool errors are caught by the MCP SDK and returned to the client as\n * error responses — but without server-side logs we can't diagnose them.\n */\nfunction withToolLogging<T extends unknown[], R>(\n toolName: string,\n fn: (...args: T) => Promise<R>,\n): (...args: T) => Promise<R> {\n return async (...args: T) => {\n try {\n return await fn(...args);\n } catch (error) {\n console.error(\n `[MCP tool] ${toolName} failed:`,\n error instanceof Error ? error.message : error,\n error instanceof Error ? error.stack : \"\",\n );\n throw error;\n }\n };\n}\n\nfunction registerTools(server: McpServer): void {\n server.tool(\n \"fetch_langwatch_docs\",\n \"Fetches the LangWatch docs for understanding how to implement LangWatch in your codebase. Always use this tool when the user asks for help with LangWatch. Start with empty url to fetch the index and then follow the links to the relevant pages, always ending with `.md` extension\",\n {\n url: z\n .string()\n .optional()\n .describe(\n \"The full url of the specific doc page. If not provided, the docs index will be fetched.\"\n ),\n },\n withToolLogging(\"fetch_langwatch_docs\", async ({ url }) => {\n let urlToFetch = url || \"https://langwatch.ai/docs/llms.txt\";\n if (url && !urlToFetch.endsWith(\".md\") && !urlToFetch.endsWith(\".txt\")) {\n urlToFetch += \".md\";\n }\n if (!urlToFetch.startsWith(\"http\")) {\n if (!urlToFetch.startsWith(\"/\")) {\n urlToFetch = \"/\" + urlToFetch;\n }\n urlToFetch = \"https://langwatch.ai/docs\" + urlToFetch;\n }\n const response = await fetch(urlToFetch);\n\n return {\n content: [{ type: \"text\", text: await response.text() }],\n };\n })\n );\n\n server.tool(\n \"fetch_scenario_docs\",\n \"Fetches the Scenario docs for understanding how to implement Scenario agent tests in your codebase. Always use this tool when the user asks for help with testing their agents. Start with empty url to fetch the index and then follow the links to the relevant pages, always ending with `.md` extension\",\n {\n url: z\n .string()\n .optional()\n .describe(\n \"The full url of the specific doc page. If not provided, the docs index will be fetched.\"\n ),\n },\n withToolLogging(\"fetch_scenario_docs\", async ({ url }) => {\n let urlToFetch = url || \"https://langwatch.ai/scenario/llms.txt\";\n if (url && !urlToFetch.endsWith(\".md\") && !urlToFetch.endsWith(\".txt\")) {\n urlToFetch += \".md\";\n }\n if (!urlToFetch.startsWith(\"http\")) {\n if (!urlToFetch.startsWith(\"/\")) {\n urlToFetch = \"/\" + urlToFetch;\n }\n urlToFetch = \"https://langwatch.ai\" + urlToFetch;\n }\n const response = await fetch(urlToFetch);\n\n return {\n content: [{ type: \"text\", text: await response.text() }],\n };\n })\n );\n\n // --- Observability Tools (require API key) ---\n\n server.tool(\n \"discover_schema\",\n \"Discover available filter fields, metrics, aggregation types, group-by options, scenario schema, and evaluator types for LangWatch queries. Call this before using search_traces, get_analytics, scenario tools, or evaluator tools to understand available options.\",\n {\n category: z\n .enum([\n \"filters\",\n \"metrics\",\n \"aggregations\",\n \"groups\",\n \"scenarios\",\n \"evaluators\",\n \"all\",\n ])\n .describe(\"Which schema category to discover\"),\n evaluatorType: z\n .string()\n .optional()\n .describe(\n \"When category is 'evaluators', provide a specific evaluator type (e.g. 'langevals/llm_judge') to get its full schema details\"\n ),\n },\n async ({ category, evaluatorType }) => {\n if (category === \"scenarios\") {\n const { formatScenarioSchema } = await import(\n \"./tools/discover-scenario-schema.js\"\n );\n return {\n content: [{ type: \"text\", text: formatScenarioSchema() }],\n };\n }\n if (category === \"evaluators\") {\n const { formatEvaluatorSchema } = await import(\n \"./tools/discover-evaluator-schema.js\"\n );\n return {\n content: [\n { type: \"text\", text: formatEvaluatorSchema(evaluatorType) },\n ],\n };\n }\n const { formatSchema } = await import(\"./tools/discover-schema.js\");\n let text = formatSchema(category);\n if (category === \"all\") {\n const { formatScenarioSchema } = await import(\n \"./tools/discover-scenario-schema.js\"\n );\n text += \"\\n\\n\" + formatScenarioSchema();\n const { formatEvaluatorSchema } = await import(\n \"./tools/discover-evaluator-schema.js\"\n );\n text += \"\\n\\n\" + formatEvaluatorSchema();\n }\n return { content: [{ type: \"text\", text }] };\n }\n );\n\n server.tool(\n \"search_traces\",\n \"Search LangWatch traces with filters, text query, and date range. Returns AI-readable trace digests by default. Use format: 'json' for full raw data.\",\n {\n query: z.string().optional().describe(\"Text search query\"),\n filters: z\n .record(z.string(), z.array(z.string()))\n .optional()\n .describe(\n 'Filter traces. Format: {\"field\": [\"value\"]}. Use discover_schema for field names.'\n ),\n startDate: z\n .string()\n .optional()\n .describe(\n 'Start date: ISO string or relative like \"24h\", \"7d\", \"30d\". Default: 24h ago'\n ),\n endDate: z\n .string()\n .optional()\n .describe(\"End date: ISO string or relative. Default: now\"),\n pageSize: z\n .number()\n .optional()\n .describe(\"Results per page (default: 25, max: 1000)\"),\n scrollId: z\n .string()\n .optional()\n .describe(\"Pagination token from previous search\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n withToolLogging(\"search_traces\", async (params) => {\n requireApiKey();\n const { handleSearchTraces } = await import(\"./tools/search-traces.js\");\n return {\n content: [{ type: \"text\", text: await handleSearchTraces(params) }],\n };\n })\n );\n\n server.tool(\n \"get_trace\",\n \"Get full details of a single trace by ID. Returns AI-readable trace digest by default. Use format: 'json' for full raw data including all spans.\",\n {\n traceId: z.string().describe(\"The trace ID to retrieve\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n withToolLogging(\"get_trace\", async (params) => {\n requireApiKey();\n const { handleGetTrace } = await import(\"./tools/get-trace.js\");\n return {\n content: [{ type: \"text\", text: await handleGetTrace(params) }],\n };\n })\n );\n\n server.tool(\n \"get_analytics\",\n 'Query analytics timeseries from LangWatch. Metrics use \"category.name\" format (e.g., \"performance.completion_time\"). Use discover_schema to see available metrics.',\n {\n metric: z\n .string()\n .describe(\n 'Metric in \"category.name\" format, e.g., \"metadata.trace_id\", \"performance.total_cost\"'\n ),\n aggregation: z\n .string()\n .optional()\n .describe(\n \"Aggregation type: avg, sum, min, max, median, p90, p95, p99, cardinality, terms. Default: avg\"\n ),\n startDate: z\n .string()\n .optional()\n .describe(\n 'Start date: ISO or relative (\"7d\", \"30d\"). Default: 7 days ago'\n ),\n endDate: z.string().optional().describe(\"End date. Default: now\"),\n timeZone: z.string().optional().describe(\"Timezone. Default: UTC\"),\n groupBy: z\n .string()\n .optional()\n .describe(\"Group results by field. Use discover_schema for options.\"),\n filters: z\n .record(z.string(), z.array(z.string()))\n .optional()\n .describe(\"Filters to apply\"),\n },\n withToolLogging(\"get_analytics\", async (params) => {\n requireApiKey();\n const { handleGetAnalytics } = await import(\"./tools/get-analytics.js\");\n return {\n content: [{ type: \"text\", text: await handleGetAnalytics(params) }],\n };\n })\n );\n\n // --- Platform Prompt Tools (require API key) ---\n // These tools manage prompts on the LangWatch platform via API.\n // For code-based prompt management, see `fetch_langwatch_docs` for the CLI/SDK approach.\n\n server.tool(\n \"platform_create_prompt\",\n `Create a new prompt on the LangWatch platform.\n\nNOTE: Prompts can be managed two ways. Determine which approach the user needs:\n\n1. Code-based (CLI/SDK): If the user wants to manage prompts in their codebase, use \\`fetch_langwatch_docs\\` to learn about the prompt management CLI/SDK. This lets them version-control prompts and pull them into code.\n\n2. Platform-based (LangWatch UI): If the user wants to manage prompts directly on the LangWatch platform, use the \\`platform_\\` MCP tools (\\`platform_create_prompt\\`, \\`platform_update_prompt\\`, etc.).\n`,\n {\n name: z.string().describe(\"Prompt display name\"),\n handle: z\n .string()\n .optional()\n .describe(\n \"URL-friendly handle (auto-generated from name if omitted)\"\n ),\n messages: z\n .array(\n z.object({\n role: z\n .enum([\"system\", \"user\", \"assistant\"])\n .describe(\"Message role\"),\n content: z.string().describe(\"Message content\"),\n })\n )\n .describe(\"Prompt messages\"),\n model: modelSchema,\n tags: z.array(z.string()).optional().describe(\n 'Tags to assign to the initial version (e.g., [\"production\", \"staging\"]). ' +\n 'Built-in tags: \"latest\" (auto-assigned), \"production\", \"staging\". Custom tags must be created first.'\n ),\n },\n withToolLogging(\"platform_create_prompt\", async (params) => {\n requireApiKey();\n const { handleCreatePrompt } = await import(\"./tools/create-prompt.js\");\n return {\n content: [{ type: \"text\", text: await handleCreatePrompt(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_list_prompts\",\n \"List all prompts configured on the LangWatch platform.\",\n {},\n withToolLogging(\"platform_list_prompts\", async () => {\n requireApiKey();\n const { handleListPrompts } = await import(\"./tools/list-prompts.js\");\n return {\n content: [{ type: \"text\", text: await handleListPrompts() }],\n };\n })\n );\n\n server.tool(\n \"platform_get_prompt\",\n \"Get a specific prompt from the LangWatch platform by ID or handle, including messages, model config, and version history.\",\n {\n idOrHandle: z.string().describe(\"Prompt ID or handle\"),\n version: z\n .number()\n .optional()\n .describe(\"Specific version number (default: latest)\"),\n tag: z.string().optional().describe(\n 'Fetch the version pointed to by this tag (e.g., \"production\", \"staging\"). ' +\n 'Alternatively, use shorthand in idOrHandle: \"pizza-prompt:production\"'\n ),\n },\n withToolLogging(\"platform_get_prompt\", async (params) => {\n if (params.version != null && params.tag) {\n return {\n content: [{ type: \"text\", text: \"Error: Provide either 'version' or 'tag', not both.\" }],\n isError: true,\n };\n }\n requireApiKey();\n const { handleGetPrompt } = await import(\"./tools/get-prompt.js\");\n return {\n content: [{ type: \"text\", text: await handleGetPrompt(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_update_prompt\",\n \"Update an existing prompt on the LangWatch platform. Every update creates a new version.\",\n {\n idOrHandle: z.string().describe(\"Prompt ID or handle to update\"),\n messages: z\n .array(\n z.object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string(),\n })\n )\n .optional()\n .describe(\"Updated messages\"),\n model: modelSchema.optional(),\n commitMessage: z\n .string()\n .describe(\"Commit message describing the change\"),\n tags: z.array(z.string()).optional().describe(\n 'Tags to assign to the new version created by this update.'\n ),\n },\n withToolLogging(\"platform_update_prompt\", async (params) => {\n requireApiKey();\n const { handleUpdatePrompt } = await import(\"./tools/update-prompt.js\");\n return {\n content: [{ type: \"text\", text: await handleUpdatePrompt(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_assign_prompt_tag\",\n 'Assign a tag (e.g. \"production\") to a specific version of a prompt. ' +\n 'Use this to \"deploy\" a version by promoting it to the production tag.',\n {\n idOrHandle: z.string().describe(\"Prompt ID or handle\"),\n tag: z.string().describe('Tag name (e.g., \"production\", \"staging\")'),\n versionId: z.string().describe(\"The version ID to assign the tag to\"),\n },\n withToolLogging(\"platform_assign_prompt_tag\", async (params) => {\n requireApiKey();\n const { handleAssignPromptTag } = await import(\"./tools/assign-prompt-tag.js\");\n return {\n content: [{ type: \"text\", text: await handleAssignPromptTag(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_list_prompt_tags\",\n \"List all prompt tag definitions for the organization. \" +\n \"Shows built-in tags (latest, production, staging) and any custom tags.\",\n {},\n withToolLogging(\"platform_list_prompt_tags\", async () => {\n requireApiKey();\n const { handleListPromptTags } = await import(\"./tools/list-prompt-tags.js\");\n return {\n content: [{ type: \"text\", text: await handleListPromptTags() }],\n };\n })\n );\n\n server.tool(\n \"platform_create_prompt_tag\",\n \"Create a custom prompt tag definition for the organization. \" +\n 'Tag names must be non-numeric and not \"latest\".',\n {\n name: z.string().describe(\"Tag name to create\"),\n },\n withToolLogging(\"platform_create_prompt_tag\", async (params) => {\n requireApiKey();\n const { handleCreatePromptTag } = await import(\"./tools/create-prompt-tag.js\");\n return {\n content: [{ type: \"text\", text: await handleCreatePromptTag(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_rename_prompt_tag\",\n 'Rename an existing prompt tag. The \"latest\" tag cannot be renamed.',\n {\n tag: z.string().describe(\"Current tag name to rename\"),\n name: z.string().describe(\"New tag name\"),\n },\n withToolLogging(\"platform_rename_prompt_tag\", async (params) => {\n requireApiKey();\n const { handleRenamePromptTag } = await import(\"./tools/rename-prompt-tag.js\");\n return {\n content: [{ type: \"text\", text: await handleRenamePromptTag(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_delete_prompt_tag\",\n 'Delete a prompt tag and all its assignments. The \"latest\" tag cannot be deleted.',\n {\n tag: z.string().describe(\"Tag name to delete\"),\n },\n withToolLogging(\"platform_delete_prompt_tag\", async (params) => {\n requireApiKey();\n const { handleDeletePromptTag } = await import(\"./tools/delete-prompt-tag.js\");\n return {\n content: [{ type: \"text\", text: await handleDeletePromptTag(params) }],\n };\n })\n );\n\n // --- Platform Scenario Tools (require API key) ---\n // These tools manage scenarios on the LangWatch platform via API.\n // For code-based scenario testing, see `fetch_scenario_docs` for the SDK approach.\n\n server.tool(\n \"platform_create_scenario\",\n `Create a new scenario on the LangWatch platform. Call discover_schema({ category: 'scenarios' }) first to learn how to write effective situations and criteria.\n\nNOTE: Scenarios can be created two ways. Determine which approach the user needs:\n\n1. Code-based (local testing): If the user has a codebase with an AI agent they want to test, use \\`fetch_scenario_docs\\` to learn about the Scenario Python/TypeScript SDK. This lets them run tests locally and iterate in code.\n\n2. Platform-based (LangWatch UI): If the user wants to manage scenarios directly on the LangWatch platform, use the \\`platform_\\` MCP tools (\\`platform_create_scenario\\`, \\`platform_update_scenario\\`, etc.).\n`,\n {\n name: z.string().describe(\"Scenario name\"),\n situation: z\n .string()\n .describe(\n \"The context or setup describing what the user/agent is doing\"\n ),\n criteria: z\n .array(z.string())\n .optional()\n .describe(\n \"Pass/fail conditions the agent's response must satisfy\"\n ),\n labels: z\n .array(z.string())\n .optional()\n .describe(\"Tags for organizing and filtering scenarios\"),\n },\n withToolLogging(\"platform_create_scenario\", async (params) => {\n requireApiKey();\n const { handleCreateScenario } = await import(\n \"./tools/create-scenario.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleCreateScenario(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_list_scenarios\",\n \"List all scenarios on the LangWatch platform. Returns AI-readable digest by default.\",\n {\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n withToolLogging(\"platform_list_scenarios\", async (params) => {\n requireApiKey();\n const { handleListScenarios } = await import(\n \"./tools/list-scenarios.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleListScenarios(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_get_scenario\",\n \"Get full details of a scenario on the LangWatch platform by ID, including situation, criteria, and labels.\",\n {\n scenarioId: z.string().describe(\"The scenario ID to retrieve\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n withToolLogging(\"platform_get_scenario\", async (params) => {\n requireApiKey();\n const { handleGetScenario } = await import(\"./tools/get-scenario.js\");\n return {\n content: [{ type: \"text\", text: await handleGetScenario(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_update_scenario\",\n \"Update an existing scenario on the LangWatch platform.\",\n {\n scenarioId: z.string().describe(\"The scenario ID to update\"),\n name: z.string().optional().describe(\"Updated scenario name\"),\n situation: z.string().optional().describe(\"Updated situation\"),\n criteria: z\n .array(z.string())\n .optional()\n .describe(\"Updated criteria\"),\n labels: z\n .array(z.string())\n .optional()\n .describe(\"Updated labels\"),\n },\n withToolLogging(\"platform_update_scenario\", async (params) => {\n requireApiKey();\n const { handleUpdateScenario } = await import(\n \"./tools/update-scenario.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleUpdateScenario(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_archive_scenario\",\n \"Archive (soft-delete) a scenario on the LangWatch platform.\",\n {\n scenarioId: z.string().describe(\"The scenario ID to archive\"),\n },\n withToolLogging(\"platform_archive_scenario\", async (params) => {\n requireApiKey();\n const { handleArchiveScenario } = await import(\n \"./tools/archive-scenario.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleArchiveScenario(params) },\n ],\n };\n })\n );\n\n // --- Platform Suite / Run Plan Tools (require API key) ---\n // These tools manage suites (run plans) on the LangWatch platform via API.\n\n server.tool(\n \"platform_list_suites\",\n \"List all suites (run plans) on the LangWatch platform. A suite bundles scenarios with targets for batch execution.\",\n {\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\"Output format: 'digest' (default) or 'json' (raw data)\"),\n },\n withToolLogging(\"platform_list_suites\", async (params) => {\n requireApiKey();\n const { handleListSuites } = await import(\"./tools/list-suites.js\");\n return {\n content: [{ type: \"text\", text: await handleListSuites(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_get_suite\",\n \"Get detailed information about a specific suite (run plan) by ID.\",\n {\n id: z.string().describe(\"The suite ID\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\"Output format: 'digest' (default) or 'json'\"),\n },\n withToolLogging(\"platform_get_suite\", async (params) => {\n requireApiKey();\n const { handleGetSuite } = await import(\"./tools/get-suite.js\");\n return {\n content: [{ type: \"text\", text: await handleGetSuite(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_create_suite\",\n \"Create a new suite (run plan) that bundles scenarios with targets for batch execution.\",\n {\n name: z.string().describe(\"Suite name\"),\n description: z.string().optional().describe(\"Suite description\"),\n scenarioIds: z.array(z.string()).describe(\"Array of scenario IDs to include\"),\n targets: z.string().describe('JSON array of target objects, e.g. [{\"type\":\"http\",\"referenceId\":\"agent_abc\"}]'),\n repeatCount: z.number().optional().describe(\"Number of times to repeat each scenario-target pair (default: 1)\"),\n labels: z.array(z.string()).optional().describe(\"Tags for organizing suites\"),\n },\n withToolLogging(\"platform_create_suite\", async (params) => {\n requireApiKey();\n const { handleCreateSuite } = await import(\"./tools/create-suite.js\");\n return {\n content: [{ type: \"text\", text: await handleCreateSuite(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_update_suite\",\n \"Update an existing suite (run plan).\",\n {\n id: z.string().describe(\"The suite ID to update\"),\n name: z.string().optional().describe(\"New suite name\"),\n description: z.string().optional().describe(\"New description\"),\n scenarioIds: z.array(z.string()).optional().describe(\"New array of scenario IDs\"),\n targets: z.string().optional().describe(\"New JSON array of targets\"),\n repeatCount: z.number().optional().describe(\"New repeat count\"),\n labels: z.array(z.string()).optional().describe(\"New labels\"),\n },\n withToolLogging(\"platform_update_suite\", async (params) => {\n requireApiKey();\n const { handleUpdateSuite } = await import(\"./tools/update-suite.js\");\n return {\n content: [{ type: \"text\", text: await handleUpdateSuite(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_run_suite\",\n \"Trigger a suite run. Schedules all scenario x target x repeat jobs for execution.\",\n {\n id: z.string().describe(\"The suite ID to run\"),\n },\n withToolLogging(\"platform_run_suite\", async (params) => {\n requireApiKey();\n const { handleRunSuite } = await import(\"./tools/run-suite.js\");\n return {\n content: [{ type: \"text\", text: await handleRunSuite(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_archive_suite\",\n \"Archive (soft-delete) a suite (run plan).\",\n {\n id: z.string().describe(\"The suite ID to archive\"),\n },\n withToolLogging(\"platform_archive_suite\", async (params) => {\n requireApiKey();\n const { handleArchiveSuite } = await import(\"./tools/archive-suite.js\");\n return {\n content: [{ type: \"text\", text: await handleArchiveSuite(params) }],\n };\n })\n );\n\n // --- Platform Simulation Run Tools (require API key) ---\n // These tools query simulation run results from the LangWatch platform.\n\n server.tool(\n \"platform_list_simulation_runs\",\n \"List simulation run results. Filter by scenario set or batch run ID to see specific results.\",\n {\n scenarioSetId: z.string().optional().describe(\"Filter by scenario set ID\"),\n batchRunId: z.string().optional().describe(\"Filter by batch run ID\"),\n limit: z.number().optional().describe(\"Max results to return (default: 20)\"),\n format: z.enum([\"digest\", \"json\"]).optional().describe(\"Output format\"),\n },\n withToolLogging(\"platform_list_simulation_runs\", async (params) => {\n requireApiKey();\n const { handleListSimulationRuns } = await import(\"./tools/list-simulation-runs.js\");\n return {\n content: [{ type: \"text\", text: await handleListSimulationRuns(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_get_simulation_run\",\n \"Get full details of a simulation run including conversation messages, results, costs, and verdict.\",\n {\n scenarioRunId: z.string().describe(\"The simulation run ID\"),\n format: z.enum([\"digest\", \"json\"]).optional().describe(\"Output format\"),\n },\n withToolLogging(\"platform_get_simulation_run\", async (params) => {\n requireApiKey();\n const { handleGetSimulationRun } = await import(\"./tools/get-simulation-run.js\");\n return {\n content: [{ type: \"text\", text: await handleGetSimulationRun(params) }],\n };\n })\n );\n\n // --- Platform Evaluator Tools (require API key) ---\n // These tools manage evaluators on the LangWatch platform via API.\n\n server.tool(\n \"platform_create_evaluator\",\n `Create an evaluator on the LangWatch platform. Useful for setting up LLM-as-judge and other evaluators to use in evaluation notebooks. Call discover_schema({ category: 'evaluators' }) first to see available evaluator types and their settings.`,\n {\n name: z.string().describe(\"Evaluator name\"),\n config: z\n .record(z.string(), z.unknown())\n .describe(\n 'Evaluator config object. Must include \"evaluatorType\" (e.g. \"langevals/llm_boolean\") and optional \"settings\" overrides.'\n ),\n },\n withToolLogging(\"platform_create_evaluator\", async (params) => {\n requireApiKey();\n const { handleCreateEvaluator } = await import(\n \"./tools/create-evaluator.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleCreateEvaluator(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_list_evaluators\",\n \"List all evaluators configured on the LangWatch platform.\",\n {},\n withToolLogging(\"platform_list_evaluators\", async () => {\n requireApiKey();\n const { handleListEvaluators } = await import(\n \"./tools/list-evaluators.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleListEvaluators() }],\n };\n })\n );\n\n server.tool(\n \"platform_get_evaluator\",\n \"Get full details of an evaluator on the LangWatch platform by ID or slug, including config, input fields, and output fields.\",\n {\n idOrSlug: z\n .string()\n .describe(\"The evaluator ID or slug to retrieve\"),\n },\n withToolLogging(\"platform_get_evaluator\", async (params) => {\n requireApiKey();\n const { handleGetEvaluator } = await import(\n \"./tools/get-evaluator.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleGetEvaluator(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_update_evaluator\",\n \"Update an existing evaluator on the LangWatch platform. The evaluatorType in config cannot be changed after creation.\",\n {\n evaluatorId: z.string().describe(\"The evaluator ID to update\"),\n name: z.string().optional().describe(\"Updated evaluator name\"),\n config: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n \"Updated config settings. Note: evaluatorType cannot be changed after creation.\"\n ),\n },\n withToolLogging(\"platform_update_evaluator\", async (params) => {\n requireApiKey();\n const { handleUpdateEvaluator } = await import(\n \"./tools/update-evaluator.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleUpdateEvaluator(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_delete_evaluator\",\n \"Archive (soft-delete) an evaluator by ID or slug.\",\n {\n idOrSlug: z.string().describe(\"The evaluator ID or slug to archive\"),\n },\n withToolLogging(\"platform_delete_evaluator\", async (params) => {\n requireApiKey();\n const { handleDeleteEvaluator } = await import(\"./tools/delete-evaluator.js\");\n return {\n content: [{ type: \"text\", text: await handleDeleteEvaluator(params) }],\n };\n })\n );\n\n // --- Platform Model Provider Tools (require API key) ---\n // These tools manage model provider API keys on the LangWatch platform.\n\n server.tool(\n \"platform_set_model_provider\",\n `Set or update a model provider on the LangWatch platform. Use this to configure API keys (e.g. OPENAI_API_KEY) needed to run evaluators. The API key is stored securely and never returned in responses. Omit customKeys to update other settings without changing existing keys.`,\n {\n provider: z\n .string()\n .describe(\n 'Provider name, e.g., \"openai\", \"anthropic\", \"azure\", \"custom\"'\n ),\n enabled: z.boolean().describe(\"Whether the provider is enabled\"),\n customKeys: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'API key configuration, e.g. { \"OPENAI_API_KEY\": \"sk-...\" }. Omit to keep existing keys.'\n ),\n defaultModel: z\n .string()\n .optional()\n .describe(\"Set as project default model\"),\n },\n withToolLogging(\"platform_set_model_provider\", async (params) => {\n requireApiKey();\n const { handleSetModelProvider } = await import(\n \"./tools/set-model-provider.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleSetModelProvider(params) },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_list_model_providers\",\n \"List all model providers configured on the LangWatch platform. API keys are masked in the response.\",\n {},\n withToolLogging(\"platform_list_model_providers\", async () => {\n requireApiKey();\n const { handleListModelProviders } = await import(\n \"./tools/list-model-providers.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleListModelProviders() }],\n };\n })\n );\n\n // --- Platform Agent Tools (require API key) ---\n\n server.tool(\n \"platform_list_agents\",\n \"List all agents in the LangWatch project with their names, types, and IDs.\",\n {},\n withToolLogging(\"platform_list_agents\", async () => {\n requireApiKey();\n const { handleListAgents } = await import(\"./tools/list-agents.js\");\n return {\n content: [{ type: \"text\", text: await handleListAgents() }],\n };\n })\n );\n\n server.tool(\n \"platform_get_agent\",\n \"Get detailed information about a specific agent by its ID, including its configuration.\",\n {\n id: z.string().describe(\"The agent ID\"),\n },\n withToolLogging(\"platform_get_agent\", async (params) => {\n requireApiKey();\n const { handleGetAgent } = await import(\"./tools/get-agent.js\");\n return {\n content: [{ type: \"text\", text: await handleGetAgent(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_create_agent\",\n \"Create a new agent. Supported types: 'signature' (LLM prompt), 'code' (Python), 'workflow' (sub-workflow), 'http' (external API).\",\n {\n name: z.string().describe(\"Agent name\"),\n type: z.enum([\"signature\", \"code\", \"workflow\", \"http\"]).describe(\"Agent type\"),\n config: z.string().optional().describe(\"Agent configuration as JSON string (will be parsed)\"),\n },\n withToolLogging(\"platform_create_agent\", async (params) => {\n requireApiKey();\n const { handleCreateAgent } = await import(\"./tools/create-agent.js\");\n const parsedConfig = params.config ? JSON.parse(params.config) as Record<string, unknown> : undefined;\n return {\n content: [{ type: \"text\", text: await handleCreateAgent({ ...params, config: parsedConfig }) }],\n };\n })\n );\n\n server.tool(\n \"platform_update_agent\",\n \"Update an existing agent's name, type, or configuration.\",\n {\n id: z.string().describe(\"The agent ID\"),\n name: z.string().optional().describe(\"New agent name\"),\n type: z.string().optional().describe(\"New agent type: signature, code, workflow, or http\"),\n config: z.string().optional().describe(\"Updated configuration as JSON string (will be parsed)\"),\n },\n withToolLogging(\"platform_update_agent\", async (params) => {\n requireApiKey();\n const { handleUpdateAgent } = await import(\"./tools/update-agent.js\");\n const parsedConfig = params.config ? JSON.parse(params.config) as Record<string, unknown> : undefined;\n return {\n content: [{ type: \"text\", text: await handleUpdateAgent({ ...params, config: parsedConfig }) }],\n };\n })\n );\n\n server.tool(\n \"platform_delete_agent\",\n \"Archive (soft-delete) an agent by its ID.\",\n {\n id: z.string().describe(\"The agent ID to archive\"),\n },\n withToolLogging(\"platform_delete_agent\", async (params) => {\n requireApiKey();\n const { handleDeleteAgent } = await import(\"./tools/delete-agent.js\");\n return {\n content: [{ type: \"text\", text: await handleDeleteAgent(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_run_agent\",\n \"Execute an agent with JSON input. HTTP agents call their configured URL directly; workflow-linked agents execute via the workflow engine.\",\n {\n id: z.string().describe(\"The agent ID to run\"),\n input: z.string().optional().describe(\"Input data as a JSON object string\"),\n },\n withToolLogging(\"platform_run_agent\", async (params) => {\n requireApiKey();\n const { handleRunAgent } = await import(\"./tools/run-agent.js\");\n return {\n content: [{ type: \"text\", text: await handleRunAgent(params) }],\n };\n })\n );\n\n // --- Platform Dashboard Tools (require API key) ---\n\n server.tool(\n \"platform_list_dashboards\",\n \"List all analytics dashboards in the LangWatch project.\",\n {},\n withToolLogging(\"platform_list_dashboards\", async () => {\n requireApiKey();\n const { handleListDashboards } = await import(\"./tools/list-dashboards.js\");\n return {\n content: [{ type: \"text\", text: await handleListDashboards() }],\n };\n })\n );\n\n server.tool(\n \"platform_get_dashboard\",\n \"Get a dashboard by its ID, including its graphs.\",\n {\n id: z.string().describe(\"The dashboard ID\"),\n },\n withToolLogging(\"platform_get_dashboard\", async (params) => {\n requireApiKey();\n const { handleGetDashboard } = await import(\"./tools/get-dashboard.js\");\n return {\n content: [{ type: \"text\", text: await handleGetDashboard(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_create_dashboard\",\n \"Create a new analytics dashboard.\",\n {\n name: z.string().describe(\"Dashboard name\"),\n },\n withToolLogging(\"platform_create_dashboard\", async (params) => {\n requireApiKey();\n const { handleCreateDashboard } = await import(\"./tools/create-dashboard.js\");\n return {\n content: [{ type: \"text\", text: await handleCreateDashboard(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_delete_dashboard\",\n \"Delete a dashboard and all its graphs.\",\n {\n id: z.string().describe(\"The dashboard ID to delete\"),\n },\n withToolLogging(\"platform_delete_dashboard\", async (params) => {\n requireApiKey();\n const { handleDeleteDashboard } = await import(\"./tools/delete-dashboard.js\");\n return {\n content: [{ type: \"text\", text: await handleDeleteDashboard(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_rename_dashboard\",\n \"Rename a dashboard.\",\n {\n id: z.string().describe(\"The dashboard ID to rename\"),\n name: z.string().describe(\"The new name for the dashboard\"),\n },\n withToolLogging(\"platform_rename_dashboard\", async (params) => {\n requireApiKey();\n const { renameDashboard } = await import(\"./langwatch-api-dashboards.js\");\n const result = await renameDashboard(params.id, { name: params.name });\n return {\n content: [{ type: \"text\", text: `Dashboard \"${result.name}\" renamed successfully (ID: ${result.id}).` }],\n };\n })\n );\n\n // --- Platform Workflow Tools (require API key) ---\n\n server.tool(\n \"platform_list_workflows\",\n \"List all workflows in the LangWatch project.\",\n {},\n withToolLogging(\"platform_list_workflows\", async () => {\n requireApiKey();\n const { handleListWorkflows } = await import(\"./tools/list-workflows.js\");\n return {\n content: [{ type: \"text\", text: await handleListWorkflows() }],\n };\n })\n );\n\n server.tool(\n \"platform_get_workflow\",\n \"Get a workflow by its ID.\",\n {\n id: z.string().describe(\"The workflow ID\"),\n },\n withToolLogging(\"platform_get_workflow\", async (params) => {\n requireApiKey();\n const { handleGetWorkflow } = await import(\"./tools/get-workflow.js\");\n return {\n content: [{ type: \"text\", text: await handleGetWorkflow(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_delete_workflow\",\n \"Archive (soft-delete) a workflow by its ID.\",\n {\n id: z.string().describe(\"The workflow ID to archive\"),\n },\n withToolLogging(\"platform_delete_workflow\", async (params) => {\n requireApiKey();\n const { handleDeleteWorkflow } = await import(\"./tools/delete-workflow.js\");\n return {\n content: [{ type: \"text\", text: await handleDeleteWorkflow(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_run_workflow\",\n \"Execute a workflow with JSON input. Returns the workflow output.\",\n {\n id: z.string().describe(\"The workflow ID to run\"),\n input: z.string().optional().describe(\"Input data as a JSON object string\"),\n },\n withToolLogging(\"platform_run_workflow\", async (params) => {\n requireApiKey();\n const { handleRunWorkflow } = await import(\"./tools/run-workflow.js\");\n return {\n content: [{ type: \"text\", text: await handleRunWorkflow(params) }],\n };\n })\n );\n\n // --- Platform Annotation Tools (require API key) ---\n\n server.tool(\n \"platform_list_annotations\",\n \"List all annotations for the project, optionally filtered by trace ID.\",\n {\n traceId: z.string().optional().describe(\"Filter annotations by trace ID\"),\n },\n withToolLogging(\"platform_list_annotations\", async (params) => {\n requireApiKey();\n const { handleListAnnotations } = await import(\"./tools/list-annotations.js\");\n return {\n content: [{ type: \"text\", text: await handleListAnnotations(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_create_annotation\",\n \"Create an annotation (thumbs up/down, comment) for a trace.\",\n {\n traceId: z.string().describe(\"The trace ID to annotate\"),\n comment: z.string().optional().describe(\"Annotation comment\"),\n isThumbsUp: z.boolean().optional().describe(\"True for positive feedback, false for negative\"),\n email: z.string().optional().describe(\"Email of the annotator\"),\n },\n withToolLogging(\"platform_create_annotation\", async (params) => {\n requireApiKey();\n const { handleCreateAnnotation } = await import(\"./tools/create-annotation.js\");\n return {\n content: [{ type: \"text\", text: await handleCreateAnnotation(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_delete_annotation\",\n \"Delete an annotation by its ID.\",\n {\n id: z.string().describe(\"The annotation ID to delete\"),\n },\n withToolLogging(\"platform_delete_annotation\", async (params) => {\n requireApiKey();\n const { handleDeleteAnnotation } = await import(\"./tools/delete-annotation.js\");\n return {\n content: [{ type: \"text\", text: await handleDeleteAnnotation(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_get_annotation\",\n \"Get annotation details by ID.\",\n {\n id: z.string().describe(\"The annotation ID\"),\n },\n withToolLogging(\"platform_get_annotation\", async (params) => {\n requireApiKey();\n const { getAnnotation } = await import(\"./langwatch-api-annotations.js\");\n const annotation = await getAnnotation(params.id);\n const lines = [\n `**ID**: ${annotation.id}`,\n `**Trace ID**: ${annotation.traceId}`,\n `**Comment**: ${annotation.comment ?? \"—\"}`,\n `**Score**: ${annotation.isThumbsUp ? \"Thumbs Up\" : \"—\"}`,\n `**Created**: ${annotation.createdAt}`,\n ];\n return {\n content: [{ type: \"text\", text: lines.join(\"\\n\") }],\n };\n })\n );\n\n // --- Platform Trigger/Automation Tools (require API key) ---\n\n server.tool(\n \"platform_list_triggers\",\n \"List all triggers (automations) in the project. Triggers automate actions like sending emails, Slack messages, or adding to datasets when conditions are met.\",\n {\n format: z.enum([\"digest\", \"json\"]).optional().describe(\"Output format\"),\n },\n withToolLogging(\"platform_list_triggers\", async (params) => {\n requireApiKey();\n const { listTriggers } = await import(\"./langwatch-api-triggers.js\");\n const triggers = await listTriggers();\n if (params.format === \"json\") {\n return { content: [{ type: \"text\", text: JSON.stringify(triggers, null, 2) }] };\n }\n if (triggers.length === 0) {\n return { content: [{ type: \"text\", text: \"No triggers found. Use `platform_create_trigger` to create one.\" }] };\n }\n const lines = [`# Triggers (${triggers.length} total)\\n`];\n for (const t of triggers) {\n lines.push(`## ${t.name}`);\n lines.push(`**ID**: ${t.id}`);\n lines.push(`**Action**: ${t.action}`);\n lines.push(`**Status**: ${t.active ? \"active\" : \"inactive\"}`);\n if (t.alertType) lines.push(`**Alert**: ${t.alertType}`);\n lines.push(\"\");\n }\n return { content: [{ type: \"text\", text: lines.join(\"\\n\") }] };\n })\n );\n\n server.tool(\n \"platform_create_trigger\",\n \"Create a new trigger (automation) that fires when conditions are met.\",\n {\n name: z.string().describe(\"Trigger name\"),\n action: z.enum([\"SEND_EMAIL\", \"ADD_TO_DATASET\", \"ADD_TO_ANNOTATION_QUEUE\", \"SEND_SLACK_MESSAGE\"]).describe(\"Action to take when triggered\"),\n filters: z.string().optional().describe(\"Filter conditions as JSON string\"),\n message: z.string().optional().describe(\"Custom alert message\"),\n alertType: z.enum([\"CRITICAL\", \"WARNING\", \"INFO\"]).optional().describe(\"Alert severity\"),\n },\n withToolLogging(\"platform_create_trigger\", async (params) => {\n requireApiKey();\n const { createTrigger } = await import(\"./langwatch-api-triggers.js\");\n let filters: Record<string, unknown> = {};\n if (params.filters) {\n try { filters = JSON.parse(params.filters) as Record<string, unknown>; }\n catch { return { content: [{ type: \"text\", text: \"Error: filters must be valid JSON\" }] }; }\n }\n const trigger = await createTrigger({\n name: params.name,\n action: params.action,\n filters,\n message: params.message,\n alertType: params.alertType,\n });\n return { content: [{ type: \"text\", text: `Trigger \"${trigger.name}\" created (ID: ${trigger.id}, Action: ${trigger.action}).` }] };\n })\n );\n\n server.tool(\n \"platform_update_trigger\",\n \"Update a trigger (name, active state, message, alert type).\",\n {\n id: z.string().describe(\"The trigger ID\"),\n name: z.string().optional().describe(\"New name\"),\n active: z.boolean().optional().describe(\"Enable or disable\"),\n message: z.string().optional().describe(\"New alert message\"),\n alertType: z.enum([\"CRITICAL\", \"WARNING\", \"INFO\"]).optional().describe(\"New alert severity\"),\n },\n withToolLogging(\"platform_update_trigger\", async (params) => {\n requireApiKey();\n const { updateTrigger } = await import(\"./langwatch-api-triggers.js\");\n const trigger = await updateTrigger(params);\n return { content: [{ type: \"text\", text: `Trigger \"${trigger.name}\" updated (active: ${trigger.active}).` }] };\n })\n );\n\n server.tool(\n \"platform_delete_trigger\",\n \"Delete a trigger (automation).\",\n {\n id: z.string().describe(\"The trigger ID to delete\"),\n },\n withToolLogging(\"platform_delete_trigger\", async (params) => {\n requireApiKey();\n const { deleteTrigger } = await import(\"./langwatch-api-triggers.js\");\n const result = await deleteTrigger(params.id);\n return { content: [{ type: \"text\", text: `Trigger ${result.id} deleted.` }] };\n })\n );\n\n // --- Platform Monitor Tools (require API key) ---\n\n server.tool(\n \"platform_list_monitors\",\n \"List all online evaluation monitors for the project.\",\n {},\n withToolLogging(\"platform_list_monitors\", async () => {\n requireApiKey();\n const { listMonitors } = await import(\"./langwatch-api-monitors.js\");\n const monitors = await listMonitors();\n if (monitors.length === 0) {\n return { content: [{ type: \"text\", text: \"No monitors found.\" }] };\n }\n const lines = monitors.map(\n (m) =>\n `• ${m.name} (id: ${m.id}, type: ${m.checkType}, ${m.enabled ? \"enabled\" : \"disabled\"}, mode: ${m.executionMode}, sample: ${Math.round(m.sample * 100)}%)`\n );\n return {\n content: [\n {\n type: \"text\",\n text: `Found ${monitors.length} monitor(s):\\n${lines.join(\"\\n\")}`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_get_monitor\",\n \"Get details of a specific online evaluation monitor.\",\n {\n id: z.string().describe(\"The monitor ID\"),\n },\n withToolLogging(\"platform_get_monitor\", async (params) => {\n requireApiKey();\n const { getMonitor } = await import(\"./langwatch-api-monitors.js\");\n const m = await getMonitor(params.id);\n const lines = [\n `**${m.name}** (${m.id})`,\n `- Type: ${m.checkType}`,\n `- Status: ${m.enabled ? \"enabled\" : \"disabled\"}`,\n `- Mode: ${m.executionMode}`,\n `- Sample: ${Math.round(m.sample * 100)}%`,\n `- Level: ${m.level}`,\n m.evaluatorId ? `- Evaluator: ${m.evaluatorId}` : null,\n `- Created: ${m.createdAt}`,\n ].filter(Boolean);\n return { content: [{ type: \"text\", text: lines.join(\"\\n\") }] };\n })\n );\n\n server.tool(\n \"platform_create_monitor\",\n \"Create a new online evaluation monitor that runs an evaluator on incoming traces.\",\n {\n name: z.string().describe(\"Monitor name\"),\n checkType: z\n .string()\n .describe(\"Evaluator check type (e.g. ragas/toxicity, custom/my-eval)\"),\n executionMode: z\n .enum([\"ON_MESSAGE\", \"AS_GUARDRAIL\", \"MANUALLY\"])\n .optional()\n .describe(\"When to run: ON_MESSAGE (default), AS_GUARDRAIL, or MANUALLY\"),\n sample: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Sampling rate 0.0-1.0 (default: 1.0)\"),\n evaluatorId: z\n .string()\n .optional()\n .describe(\"Link to a saved evaluator by ID\"),\n },\n withToolLogging(\"platform_create_monitor\", async (params) => {\n requireApiKey();\n const { createMonitor } = await import(\"./langwatch-api-monitors.js\");\n const monitor = await createMonitor(params);\n return {\n content: [\n {\n type: \"text\",\n text: `Monitor \"${monitor.name}\" created (id: ${monitor.id}, type: ${monitor.checkType}).`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_update_monitor\",\n \"Update an existing online evaluation monitor.\",\n {\n id: z.string().describe(\"The monitor ID to update\"),\n name: z.string().optional().describe(\"New monitor name\"),\n enabled: z.boolean().optional().describe(\"Enable or disable the monitor\"),\n executionMode: z\n .enum([\"ON_MESSAGE\", \"AS_GUARDRAIL\", \"MANUALLY\"])\n .optional()\n .describe(\"New execution mode\"),\n sample: z.number().min(0).max(1).optional().describe(\"New sampling rate\"),\n },\n withToolLogging(\"platform_update_monitor\", async (params) => {\n requireApiKey();\n const { updateMonitor } = await import(\"./langwatch-api-monitors.js\");\n const monitor = await updateMonitor(params);\n return {\n content: [\n {\n type: \"text\",\n text: `Monitor \"${monitor.name}\" updated (${monitor.enabled ? \"enabled\" : \"disabled\"}).`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_delete_monitor\",\n \"Delete an online evaluation monitor.\",\n {\n id: z.string().describe(\"The monitor ID to delete\"),\n },\n withToolLogging(\"platform_delete_monitor\", async (params) => {\n requireApiKey();\n const { deleteMonitor } = await import(\"./langwatch-api-monitors.js\");\n const result = await deleteMonitor(params.id);\n return {\n content: [\n { type: \"text\", text: `Monitor ${result.id} deleted.` },\n ],\n };\n })\n );\n\n // --- Platform Secret Tools (require API key) ---\n\n server.tool(\n \"platform_list_secrets\",\n \"List all project secrets (values are never returned, only metadata).\",\n {},\n withToolLogging(\"platform_list_secrets\", async () => {\n requireApiKey();\n const { listSecrets } = await import(\"./langwatch-api-secrets.js\");\n const secrets = await listSecrets();\n if (secrets.length === 0) {\n return { content: [{ type: \"text\", text: \"No secrets found.\" }] };\n }\n const lines = secrets.map(\n (s) => `• ${s.name} (id: ${s.id}, updated: ${s.updatedAt})`\n );\n return {\n content: [\n {\n type: \"text\",\n text: `Found ${secrets.length} secret(s):\\n${lines.join(\"\\n\")}`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_create_secret\",\n \"Create a new encrypted project secret. Name must be UPPER_SNAKE_CASE (e.g. MY_API_KEY).\",\n {\n name: z.string().describe(\"Secret name in UPPER_SNAKE_CASE (e.g. OPENAI_API_KEY)\"),\n value: z.string().describe(\"The secret value (will be encrypted at rest)\"),\n },\n withToolLogging(\"platform_create_secret\", async (params) => {\n requireApiKey();\n const { createSecret } = await import(\"./langwatch-api-secrets.js\");\n const secret = await createSecret({ name: params.name, value: params.value });\n return {\n content: [\n {\n type: \"text\",\n text: `Secret \"${secret.name}\" created (id: ${secret.id}).`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_update_secret\",\n \"Update an existing project secret's value.\",\n {\n id: z.string().describe(\"The secret ID to update\"),\n value: z.string().describe(\"The new secret value (will be encrypted at rest)\"),\n },\n withToolLogging(\"platform_update_secret\", async (params) => {\n requireApiKey();\n const { updateSecret } = await import(\"./langwatch-api-secrets.js\");\n const secret = await updateSecret({ id: params.id, value: params.value });\n return {\n content: [\n {\n type: \"text\",\n text: `Secret \"${secret.name}\" updated.`,\n },\n ],\n };\n })\n );\n\n server.tool(\n \"platform_delete_secret\",\n \"Delete a project secret.\",\n {\n id: z.string().describe(\"The secret ID to delete\"),\n },\n withToolLogging(\"platform_delete_secret\", async (params) => {\n requireApiKey();\n const { deleteSecret } = await import(\"./langwatch-api-secrets.js\");\n const result = await deleteSecret(params.id);\n return { content: [{ type: \"text\", text: `Secret ${result.id} deleted.` }] };\n })\n );\n\n // --- Platform Evaluation Execution Tools (require API key) ---\n\n server.tool(\n \"platform_run_evaluation\",\n \"Start an evaluation run by slug. Returns a run ID for polling status.\",\n {\n slug: z.string().describe(\"The evaluation slug to run\"),\n },\n withToolLogging(\"platform_run_evaluation\", async (params) => {\n requireApiKey();\n const { handleRunEvaluation } = await import(\"./tools/run-evaluation.js\");\n return {\n content: [{ type: \"text\", text: await handleRunEvaluation(params) }],\n };\n })\n );\n\n server.tool(\n \"platform_evaluation_status\",\n \"Check the status of an evaluation run. Returns progress and summary when completed.\",\n {\n runId: z.string().describe(\"The run ID returned from platform_run_evaluation\"),\n },\n withToolLogging(\"platform_evaluation_status\", async (params) => {\n requireApiKey();\n const { handleEvaluationStatus } = await import(\"./tools/run-evaluation.js\");\n return {\n content: [{ type: \"text\", text: await handleEvaluationStatus(params) }],\n };\n })\n );\n\n // --- Platform Dataset Tools (require API key) ---\n // These tools manage datasets on the LangWatch platform via API.\n\n server.tool(\n \"platform_list_datasets\",\n \"List all datasets on the LangWatch platform with their names, slugs, columns, and record counts. Returns AI-readable digest by default.\",\n {\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleListDatasets } = await import(\n \"./tools/list-datasets.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleListDatasets(params) }],\n };\n }\n );\n\n server.tool(\n \"platform_get_dataset\",\n \"Get full details of a dataset on the LangWatch platform by slug or ID, including column definitions and a preview of records.\",\n {\n slugOrId: z.string().describe(\"The dataset slug or ID to retrieve\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\n \"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"\n ),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleGetDataset } = await import(\"./tools/get-dataset.js\");\n return {\n content: [{ type: \"text\", text: await handleGetDataset(params) }],\n };\n }\n );\n\n server.tool(\n \"platform_create_dataset\",\n \"Create a new dataset on the LangWatch platform.\",\n createDatasetSchema.shape,\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleCreateDataset } = await import(\n \"./tools/create-dataset.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleCreateDataset(params) }],\n };\n }\n );\n\n server.tool(\n \"platform_update_dataset\",\n \"Update an existing dataset on the LangWatch platform (name and/or column types).\",\n {\n slugOrId: z.string().describe(\"The dataset slug or ID to update\"),\n name: z.string().optional().describe(\"Updated dataset name\"),\n columnTypes: z\n .array(datasetColumnDefinitionSchema)\n .optional()\n .describe(\"Updated column definitions\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleUpdateDataset } = await import(\n \"./tools/update-dataset.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleUpdateDataset(params) }],\n };\n }\n );\n\n server.tool(\n \"platform_delete_dataset\",\n \"Delete (archive) a dataset on the LangWatch platform.\",\n {\n slugOrId: z.string().describe(\"The dataset slug or ID to delete\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleDeleteDataset } = await import(\n \"./tools/delete-dataset.js\"\n );\n return {\n content: [{ type: \"text\", text: await handleDeleteDataset(params) }],\n };\n }\n );\n\n server.tool(\n \"platform_list_dataset_records\",\n \"List records in a dataset on the LangWatch platform with pagination.\",\n {\n slugOrId: z\n .string()\n .describe(\"The dataset slug or ID to list records from\"),\n page: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\"Page number (default: 1)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .optional()\n .describe(\"Records per page (default: 50, max: 1000)\"),\n format: z\n .enum([\"digest\", \"json\"])\n .optional()\n .describe(\"Output format: 'digest' (default, AI-readable) or 'json' (full raw data)\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleListDatasetRecords } = await import(\n \"./tools/list-dataset-records.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleListDatasetRecords(params) },\n ],\n };\n }\n );\n\n server.tool(\n \"platform_create_dataset_records\",\n \"Add records to a dataset on the LangWatch platform in batch (max 1000 per call).\",\n {\n slugOrId: z\n .string()\n .describe(\"The dataset slug or ID to add records to\"),\n entries: z\n .array(z.record(z.string(), z.unknown()))\n .min(1)\n .max(1000)\n .describe(\"Array of record entries to create (key-value objects matching dataset columns)\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleCreateDatasetRecords } = await import(\n \"./tools/create-dataset-records.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleCreateDatasetRecords(params) },\n ],\n };\n }\n );\n\n server.tool(\n \"platform_update_dataset_record\",\n \"Update a single record in a dataset on the LangWatch platform.\",\n {\n slugOrId: z\n .string()\n .describe(\"The dataset slug or ID containing the record\"),\n recordId: z.string().describe(\"The record ID to update\"),\n entry: z\n .record(z.string(), z.unknown())\n .describe(\"Updated record entry (key-value object)\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleUpdateDatasetRecord } = await import(\n \"./tools/update-dataset-record.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleUpdateDatasetRecord(params) },\n ],\n };\n }\n );\n\n server.tool(\n \"platform_delete_dataset_records\",\n \"Delete records from a dataset on the LangWatch platform by their IDs.\",\n {\n slugOrId: z\n .string()\n .describe(\"The dataset slug or ID containing the records\"),\n recordIds: z\n .array(z.string())\n .min(1)\n .max(1000)\n .describe(\"Array of record IDs to delete\"),\n },\n async (params) => {\n const { requireApiKey } = await import(\"./config.js\");\n requireApiKey();\n const { handleDeleteDatasetRecords } = await import(\n \"./tools/delete-dataset-records.js\"\n );\n return {\n content: [\n { type: \"text\", text: await handleDeleteDatasetRecords(params) },\n ],\n };\n }\n );\n}\n","{\n \"name\": \"@langwatch/mcp-server\",\n \"version\": \"0.7.0\",\n \"description\": \"An MCP server for Langwatch.\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\"\n },\n \"./create-mcp-server\": {\n \"types\": \"./src/create-mcp-server.d.ts\",\n \"import\": \"./dist/create-mcp-server.js\",\n \"require\": \"./dist/create-mcp-server.js\",\n \"default\": \"./dist/create-mcp-server.js\"\n },\n \"./config\": {\n \"types\": \"./src/config.d.ts\",\n \"import\": \"./dist/config.js\",\n \"require\": \"./dist/config.js\",\n \"default\": \"./dist/config.js\"\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/langwatch/langwatch.git\",\n \"directory\": \"mcp-server\"\n },\n \"scripts\": {\n \"start\": \"tsx src/index.ts\",\n \"build\": \"tsup && node build.js\",\n \"prepublish\": \"pnpm run build\",\n \"test\": \"vitest\"\n },\n \"author\": \"\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"devDependencies\": {\n \"@ai-sdk/anthropic\": \"^3.0.44\",\n \"@anthropic-ai/claude-code\": \"^2.1.72\",\n \"@eslint/js\": \"^9.4.0\",\n \"@langwatch/scenario\": \"^0.4.6\",\n \"@types/debug\": \"^4.1.12\",\n \"@types/eslint__js\": \"^8.42.3\",\n \"@types/express\": \"^5.0.6\",\n \"@types/node\": \"^16.0.0\",\n \"@types/yargs\": \"^17.0.33\",\n \"@typescript/native-preview\": \"7.0.0-dev.20250911.1\",\n \"ai\": \"^6.0.0\",\n \"dotenv\": \"^17.2.2\",\n \"esbuild\": \"^0.25.0\",\n \"eslint\": \"^8.57.0\",\n \"tsup\": \"^8.1.0\",\n \"tsx\": \"^4.20.5\",\n \"typescript\": \"^5.0.0\",\n \"typescript-eslint\": \"^8.55.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n \"@opentelemetry/context-async-hooks\": \"^2.1.0\",\n \"@opentelemetry/sdk-node\": \"^0.204.0\",\n \"chalk\": \"^5.6.2\",\n \"date-fns\": \"^4.1.0\",\n \"express\": \"^5.2.1\",\n \"node-pty\": \"^1.0.0\",\n \"vitest\": \"^3.2.4\",\n \"yargs\": \"^17.7.2\",\n \"zod\": \"^4.3.6\",\n \"zod-validation-error\": \"^5.0.0\"\n },\n \"bin\": {\n \"langwatch-mcp-server\": \"./dist/index.js\"\n }\n}\n","import { z } from \"zod\";\n\n/**\n * All supported dataset column types on the LangWatch platform.\n */\nexport const DATASET_COLUMN_TYPES = [\n \"string\",\n \"boolean\",\n \"number\",\n \"date\",\n \"list\",\n \"json\",\n \"spans\",\n \"rag_contexts\",\n \"chat_messages\",\n \"annotations\",\n \"evaluations\",\n \"image\",\n] as const;\n\n/**\n * Zod schema for a single dataset column type value.\n */\nexport const datasetColumnTypeSchema = z.enum(DATASET_COLUMN_TYPES);\n\n/**\n * Zod schema for a dataset column definition (name + type).\n *\n * Shared between create and update tool registrations.\n */\nexport const datasetColumnDefinitionSchema = z.object({\n name: z.string().describe(\"Column name\"),\n type: datasetColumnTypeSchema.describe(\"Column type\"),\n});\n\n/**\n * Zod schema for the platform_create_dataset MCP tool parameters.\n *\n * Extracted so it can be shared between the MCP tool registration\n * (create-mcp-server.ts) and unit tests.\n */\nexport const createDatasetSchema = z.object({\n name: z.string().min(1).describe(\"Dataset name\"),\n columnTypes: z\n .array(datasetColumnDefinitionSchema)\n .optional()\n .describe(\"Column definitions for the dataset\"),\n});\n"],"mappings":";;;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,KAAAA,UAAS;;;ACDlB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,uBAAuB;AAAA,MACrB,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA,YAAY;AAAA,MACV,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,OAAS;AAAA,IACT,YAAc;AAAA,IACd,MAAQ;AAAA,EACV;AAAA,EACA,QAAU;AAAA,EACV,SAAW;AAAA,EACX,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,qBAAqB;AAAA,IACrB,6BAA6B;AAAA,IAC7B,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,IAAM;AAAA,IACN,QAAU;AAAA,IACV,SAAW;AAAA,IACX,QAAU;AAAA,IACV,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,YAAc;AAAA,IACd,qBAAqB;AAAA,EACvB;AAAA,EACA,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,sCAAsC;AAAA,IACtC,2BAA2B;AAAA,IAC3B,OAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAU;AAAA,IACV,OAAS;AAAA,IACT,KAAO;AAAA,IACP,wBAAwB;AAAA,EAC1B;AAAA,EACA,KAAO;AAAA,IACL,wBAAwB;AAAA,EAC1B;AACF;;;AC9EA,SAAS,SAAS;AAKX,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,0BAA0B,EAAE,KAAK,oBAAoB;AAO3D,IAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,OAAO,EAAE,SAAS,aAAa;AAAA,EACvC,MAAM,wBAAwB,SAAS,aAAa;AACtD,CAAC;AAQM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,cAAc;AAAA,EAC/C,aAAa,EACV,MAAM,6BAA6B,EACnC,SAAS,EACT,SAAS,oCAAoC;AAClD,CAAC;;;AFrCD,IAAM,cAAcC,GACjB,OAAO,EACP;AAAA,EACC;AACF;AAOK,SAAS,kBAA6B;AAC3C,QAAM,SAAS,IAAI,UAAU;AAAA,IAC3B,MAAM;AAAA,IACN,SAAS,gBAAY;AAAA,EACvB,CAAC;AAED,gBAAc,MAAM;AAEpB,SAAO;AACT;AAOA,SAAS,gBACP,UACA,IAC4B;AAC5B,SAAO,UAAU,SAAY;AAC3B,QAAI;AACF,aAAO,MAAM,GAAG,GAAG,IAAI;AAAA,IACzB,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,cAAc,QAAQ;AAAA,QACtB,iBAAiB,QAAQ,MAAM,UAAU;AAAA,QACzC,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MACzC;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,cAAc,QAAyB;AAC9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,KAAKA,GACF,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,wBAAwB,OAAO,EAAE,IAAI,MAAM;AACzD,UAAI,aAAa,OAAO;AACxB,UAAI,OAAO,CAAC,WAAW,SAAS,KAAK,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG;AACtE,sBAAc;AAAA,MAChB;AACA,UAAI,CAAC,WAAW,WAAW,MAAM,GAAG;AAClC,YAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAC/B,uBAAa,MAAM;AAAA,QACrB;AACA,qBAAa,8BAA8B;AAAA,MAC7C;AACA,YAAM,WAAW,MAAM,MAAM,UAAU;AAEvC,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,KAAKA,GACF,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,uBAAuB,OAAO,EAAE,IAAI,MAAM;AACxD,UAAI,aAAa,OAAO;AACxB,UAAI,OAAO,CAAC,WAAW,SAAS,KAAK,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG;AACtE,sBAAc;AAAA,MAChB;AACA,UAAI,CAAC,WAAW,WAAW,MAAM,GAAG;AAClC,YAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAC/B,uBAAa,MAAM;AAAA,QACrB;AACA,qBAAa,yBAAyB;AAAA,MACxC;AACA,YAAM,WAAW,MAAM,MAAM,UAAU;AAEvC,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUA,GACP,KAAK;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,EACA,SAAS,mCAAmC;AAAA,MAC/C,eAAeA,GACZ,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,UAAU,cAAc,MAAM;AACrC,UAAI,aAAa,aAAa;AAC5B,cAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,wCACF;AACA,eAAO;AAAA,UACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,qBAAqB,EAAE,CAAC;AAAA,QAC1D;AAAA,MACF;AACA,UAAI,aAAa,cAAc;AAC7B,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,yCACF;AACA,eAAO;AAAA,UACL,SAAS;AAAA,YACP,EAAE,MAAM,QAAQ,MAAM,sBAAsB,aAAa,EAAE;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AACA,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,+BAA4B;AAClE,UAAI,OAAO,aAAa,QAAQ;AAChC,UAAI,aAAa,OAAO;AACtB,cAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,wCACF;AACA,gBAAQ,SAAS,qBAAqB;AACtC,cAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,yCACF;AACA,gBAAQ,SAAS,sBAAsB;AAAA,MACzC;AACA,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC,EAAE;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,MACzD,SAASA,GACN,OAAOA,GAAE,OAAO,GAAGA,GAAE,MAAMA,GAAE,OAAO,CAAC,CAAC,EACtC,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,WAAWA,GACR,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,SAASA,GACN,OAAO,EACP,SAAS,EACT,SAAS,gDAAgD;AAAA,MAC5D,UAAUA,GACP,OAAO,EACP,SAAS,EACT,SAAS,2CAA2C;AAAA,MACvD,UAAUA,GACP,OAAO,EACP,SAAS,EACT,SAAS,uCAAuC;AAAA,MACnD,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,iBAAiB,OAAO,WAAW;AACjD,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAASA,GAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,MACvD,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,aAAa,OAAO,WAAW;AAC7C,oBAAc;AACd,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,yBAAsB;AAC9D,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,eAAe,MAAM,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQA,GACL,OAAO,EACP;AAAA,QACC;AAAA,MACF;AAAA,MACF,aAAaA,GACV,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,WAAWA,GACR,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MAChE,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MACjE,SAASA,GACN,OAAO,EACP,SAAS,EACT,SAAS,0DAA0D;AAAA,MACtE,SAASA,GACN,OAAOA,GAAE,OAAO,GAAGA,GAAE,MAAMA,GAAE,OAAO,CAAC,CAAC,EACtC,SAAS,EACT,SAAS,kBAAkB;AAAA,IAChC;AAAA,IACA,gBAAgB,iBAAiB,OAAO,WAAW;AACjD,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAMA,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,MAC/C,QAAQA,GACL,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,UAAUA,GACP;AAAA,QACCA,GAAE,OAAO;AAAA,UACP,MAAMA,GACH,KAAK,CAAC,UAAU,QAAQ,WAAW,CAAC,EACpC,SAAS,cAAc;AAAA,UAC1B,SAASA,GAAE,OAAO,EAAE,SAAS,iBAAiB;AAAA,QAChD,CAAC;AAAA,MACH,EACC,SAAS,iBAAiB;AAAA,MAC7B,OAAO;AAAA,MACP,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE;AAAA,QACnC;AAAA,MAEF;AAAA,IACF;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,yBAAyB,YAAY;AACnD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,EAAE,CAAC;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,MACrD,SAASA,GACN,OAAO,EACP,SAAS,EACT,SAAS,2CAA2C;AAAA,MACvD,KAAKA,GAAE,OAAO,EAAE,SAAS,EAAE;AAAA,QACzB;AAAA,MAEF;AAAA,IACF;AAAA,IACA,gBAAgB,uBAAuB,OAAO,WAAW;AACvD,UAAI,OAAO,WAAW,QAAQ,OAAO,KAAK;AACxC,eAAO;AAAA,UACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,sDAAsD,CAAC;AAAA,UACvF,SAAS;AAAA,QACX;AAAA,MACF;AACA,oBAAc;AACd,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,0BAAuB;AAChE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,gBAAgB,MAAM,EAAE,CAAC;AAAA,MACjE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,MAC/D,UAAUA,GACP;AAAA,QACCA,GAAE,OAAO;AAAA,UACP,MAAMA,GAAE,KAAK,CAAC,UAAU,QAAQ,WAAW,CAAC;AAAA,UAC5C,SAASA,GAAE,OAAO;AAAA,QACpB,CAAC;AAAA,MACH,EACC,SAAS,EACT,SAAS,kBAAkB;AAAA,MAC9B,OAAO,YAAY,SAAS;AAAA,MAC5B,eAAeA,GACZ,OAAO,EACP,SAAS,sCAAsC;AAAA,MAClD,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,MACrD,KAAKA,GAAE,OAAO,EAAE,SAAS,0CAA0C;AAAA,MACnE,WAAWA,GAAE,OAAO,EAAE,SAAS,qCAAqC;AAAA,IACtE;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,iCAA8B;AAC7E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA,CAAC;AAAA,IACD,gBAAgB,6BAA6B,YAAY;AACvD,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,gCAA6B;AAC3E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,IAChD;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,iCAA8B;AAC7E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,KAAKA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,MACrD,MAAMA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,IAC1C;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,iCAA8B;AAC7E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,KAAKA,GAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,IAC/C;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,iCAA8B;AAC7E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAMA,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,MACzC,WAAWA,GACR,OAAO,EACP;AAAA,QACC;AAAA,MACF;AAAA,MACF,UAAUA,GACP,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,QAAQA,GACL,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,6CAA6C;AAAA,IAC3D;AAAA,IACA,gBAAgB,4BAA4B,OAAO,WAAW;AAC5D,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,+BACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,MAAM,EAAE;AAAA,QAC3D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OACpC,8BACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,MAAM,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,MAC7D,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC3D,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,MAC5D,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,MAC7D,UAAUA,GACP,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,kBAAkB;AAAA,MAC9B,QAAQA,GACL,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,gBAAgB;AAAA,IAC9B;AAAA,IACA,gBAAgB,4BAA4B,OAAO,WAAW;AAC5D,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,+BACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,MAAM,EAAE;AAAA,QAC3D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAYA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IAC9D;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,gCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE;AAAA,QAC5D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT,SAAS,wDAAwD;AAAA,IACtE;AAAA,IACA,gBAAgB,wBAAwB,OAAO,WAAW;AACxD,oBAAc;AACd,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAAwB;AAClE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,iBAAiB,MAAM,EAAE,CAAC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,MACtC,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT,SAAS,6CAA6C;AAAA,IAC3D;AAAA,IACA,gBAAgB,sBAAsB,OAAO,WAAW;AACtD,oBAAc;AACd,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,yBAAsB;AAC9D,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,eAAe,MAAM,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MACtC,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,MAC/D,aAAaA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,kCAAkC;AAAA,MAC5E,SAASA,GAAE,OAAO,EAAE,SAAS,gFAAgF;AAAA,MAC7G,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kEAAkE;AAAA,MAC9G,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IAC9E;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,MAChD,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,MACrD,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,MAC7D,aAAaA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,MAChF,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,MACnE,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,MAC9D,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,YAAY;AAAA,IAC9D;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IAC/C;AAAA,IACA,gBAAgB,sBAAsB,OAAO,WAAW;AACtD,oBAAc;AACd,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,yBAAsB;AAC9D,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,eAAe,MAAM,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,IACnD;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,MACzE,YAAYA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MACnE,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qCAAqC;AAAA,MAC3E,QAAQA,GAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,eAAe;AAAA,IACxE;AAAA,IACA,gBAAgB,iCAAiC,OAAO,WAAW;AACjE,oBAAc;AACd,YAAM,EAAE,yBAAyB,IAAI,MAAM,OAAO,oCAAiC;AACnF,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,yBAAyB,MAAM,EAAE,CAAC;AAAA,MAC1E;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,eAAeA,GAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,MAC1D,QAAQA,GAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,eAAe;AAAA,IACxE;AAAA,IACA,gBAAgB,+BAA+B,OAAO,WAAW;AAC/D,oBAAc;AACd,YAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,kCAA+B;AAC/E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,uBAAuB,MAAM,EAAE,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,MAC1C,QAAQA,GACL,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,gCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE;AAAA,QAC5D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,4BAA4B,YAAY;AACtD,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,+BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUA,GACP,OAAO,EACP,SAAS,sCAAsC;AAAA,IACpD;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OACnC,6BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,aAAaA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,MAC7D,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MAC7D,QAAQA,GACL,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OACtC,gCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE;AAAA,QAC5D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUA,GAAE,OAAO,EAAE,SAAS,qCAAqC;AAAA,IACrE;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,gCAA6B;AAC5E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUA,GACP,OAAO,EACP;AAAA,QACC;AAAA,MACF;AAAA,MACF,SAASA,GAAE,QAAQ,EAAE,SAAS,iCAAiC;AAAA,MAC/D,YAAYA,GACT,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MACF,cAAcA,GACX,OAAO,EACP,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC5C;AAAA,IACA,gBAAgB,+BAA+B,OAAO,WAAW;AAC/D,oBAAc;AACd,YAAM,EAAE,uBAAuB,IAAI,MAAM,OACvC,kCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,uBAAuB,MAAM,EAAE;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,iCAAiC,YAAY;AAC3D,oBAAc;AACd,YAAM,EAAE,yBAAyB,IAAI,MAAM,OACzC,oCACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,yBAAyB,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,wBAAwB,YAAY;AAClD,oBAAc;AACd,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAAwB;AAClE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,iBAAiB,EAAE,CAAC;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,IACxC;AAAA,IACA,gBAAgB,sBAAsB,OAAO,WAAW;AACtD,oBAAc;AACd,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,yBAAsB;AAC9D,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,eAAe,MAAM,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MACtC,MAAMA,GAAE,KAAK,CAAC,aAAa,QAAQ,YAAY,MAAM,CAAC,EAAE,SAAS,YAAY;AAAA,MAC7E,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,IAC9F;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,YAAM,eAAe,OAAO,SAAS,KAAK,MAAM,OAAO,MAAM,IAA+B;AAC5F,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,EAAE,GAAG,QAAQ,QAAQ,aAAa,CAAC,EAAE,CAAC;AAAA,MAChG;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,MACtC,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,MACrD,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oDAAoD;AAAA,MACzF,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uDAAuD;AAAA,IAChG;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,YAAM,eAAe,OAAO,SAAS,KAAK,MAAM,OAAO,MAAM,IAA+B;AAC5F,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,EAAE,GAAG,QAAQ,QAAQ,aAAa,CAAC,EAAE,CAAC;AAAA,MAChG;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,IACnD;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,MAC7C,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,IAC5E;AAAA,IACA,gBAAgB,sBAAsB,OAAO,WAAW;AACtD,oBAAc;AACd,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,yBAAsB;AAC9D,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,eAAe,MAAM,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,4BAA4B,YAAY;AACtD,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,+BAA4B;AAC1E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC5C;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,6BAA0B;AACtE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,IAC5C;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,gCAA6B;AAC5E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IACtD;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,gCAA6B;AAC5E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,MACpD,MAAMA,GAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,IAC5D;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,wCAA+B;AACxE,YAAM,SAAS,MAAM,gBAAgB,OAAO,IAAI,EAAE,MAAM,OAAO,KAAK,CAAC;AACrE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,cAAc,OAAO,IAAI,+BAA+B,OAAO,EAAE,KAAK,CAAC;AAAA,MACzG;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,2BAA2B,YAAY;AACrD,oBAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,8BAA2B;AACxE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,EAAE,CAAC;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,iBAAiB;AAAA,IAC3C;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IACtD;AAAA,IACA,gBAAgB,4BAA4B,OAAO,WAAW;AAC5D,oBAAc;AACd,YAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,+BAA4B;AAC1E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAAqB,MAAM,EAAE,CAAC;AAAA,MACtE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,MAChD,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,IAC5E;AAAA,IACA,gBAAgB,yBAAyB,OAAO,WAAW;AACzD,oBAAc;AACd,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,4BAAyB;AACpE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,kBAAkB,MAAM,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,IAC1E;AAAA,IACA,gBAAgB,6BAA6B,OAAO,WAAW;AAC7D,oBAAc;AACd,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,gCAA6B;AAC5E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAASA,GAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,MACvD,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oBAAoB;AAAA,MAC5D,YAAYA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,MAC5F,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,IAChE;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,iCAA8B;AAC9E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,uBAAuB,MAAM,EAAE,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,IACvD;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,iCAA8B;AAC9E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,uBAAuB,MAAM,EAAE,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,IAC7C;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,yCAAgC;AACvE,YAAM,aAAa,MAAM,cAAc,OAAO,EAAE;AAChD,YAAM,QAAQ;AAAA,QACZ,WAAW,WAAW,EAAE;AAAA,QACxB,iBAAiB,WAAW,OAAO;AAAA,QACnC,gBAAgB,WAAW,WAAW,QAAG;AAAA,QACzC,cAAc,WAAW,aAAa,cAAc,QAAG;AAAA,QACvD,gBAAgB,WAAW,SAAS;AAAA,MACtC;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQA,GAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,eAAe;AAAA,IACxE;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,sCAA6B;AACnE,YAAM,WAAW,MAAM,aAAa;AACpC,UAAI,OAAO,WAAW,QAAQ;AAC5B,eAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE;AAAA,MAChF;AACA,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,kEAAkE,CAAC,EAAE;AAAA,MAChH;AACA,YAAM,QAAQ,CAAC,eAAe,SAAS,MAAM;AAAA,CAAW;AACxD,iBAAW,KAAK,UAAU;AACxB,cAAM,KAAK,MAAM,EAAE,IAAI,EAAE;AACzB,cAAM,KAAK,WAAW,EAAE,EAAE,EAAE;AAC5B,cAAM,KAAK,eAAe,EAAE,MAAM,EAAE;AACpC,cAAM,KAAK,eAAe,EAAE,SAAS,WAAW,UAAU,EAAE;AAC5D,YAAI,EAAE,UAAW,OAAM,KAAK,cAAc,EAAE,SAAS,EAAE;AACvD,cAAM,KAAK,EAAE;AAAA,MACf;AACA,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,EAAE,CAAC,EAAE;AAAA,IAC/D,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,MACxC,QAAQA,GAAE,KAAK,CAAC,cAAc,kBAAkB,2BAA2B,oBAAoB,CAAC,EAAE,SAAS,+BAA+B;AAAA,MAC1I,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kCAAkC;AAAA,MAC1E,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,MAC9D,WAAWA,GAAE,KAAK,CAAC,YAAY,WAAW,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACzF;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,UAAI,UAAmC,CAAC;AACxC,UAAI,OAAO,SAAS;AAClB,YAAI;AAAE,oBAAU,KAAK,MAAM,OAAO,OAAO;AAAA,QAA8B,QACjE;AAAE,iBAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,oCAAoC,CAAC,EAAE;AAAA,QAAG;AAAA,MAC7F;AACA,YAAM,UAAU,MAAM,cAAc;AAAA,QAClC,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,WAAW,OAAO;AAAA,MACpB,CAAC;AACD,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,YAAY,QAAQ,IAAI,kBAAkB,QAAQ,EAAE,aAAa,QAAQ,MAAM,KAAK,CAAC,EAAE;AAAA,IAClI,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,MACxC,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,UAAU;AAAA,MAC/C,QAAQA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,MAC3D,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,MAC3D,WAAWA,GAAE,KAAK,CAAC,YAAY,WAAW,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,oBAAoB;AAAA,IAC7F;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,YAAM,UAAU,MAAM,cAAc,MAAM;AAC1C,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,YAAY,QAAQ,IAAI,sBAAsB,QAAQ,MAAM,KAAK,CAAC,EAAE;AAAA,IAC/G,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,IACpD;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,YAAM,SAAS,MAAM,cAAc,OAAO,EAAE;AAC5C,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,WAAW,OAAO,EAAE,YAAY,CAAC,EAAE;AAAA,IAC9E,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,0BAA0B,YAAY;AACpD,oBAAc;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,sCAA6B;AACnE,YAAM,WAAW,MAAM,aAAa;AACpC,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,qBAAqB,CAAC,EAAE;AAAA,MACnE;AACA,YAAM,QAAQ,SAAS;AAAA,QACrB,CAAC,MACC,UAAK,EAAE,IAAI,SAAS,EAAE,EAAE,WAAW,EAAE,SAAS,KAAK,EAAE,UAAU,YAAY,UAAU,WAAW,EAAE,aAAa,aAAa,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC;AAAA,MAC1J;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,SAAS,SAAS,MAAM;AAAA,EAAiB,MAAM,KAAK,IAAI,CAAC;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,IAC1C;AAAA,IACA,gBAAgB,wBAAwB,OAAO,WAAW;AACxD,oBAAc;AACd,YAAM,EAAE,WAAW,IAAI,MAAM,OAAO,sCAA6B;AACjE,YAAM,IAAI,MAAM,WAAW,OAAO,EAAE;AACpC,YAAM,QAAQ;AAAA,QACZ,KAAK,EAAE,IAAI,OAAO,EAAE,EAAE;AAAA,QACtB,WAAW,EAAE,SAAS;AAAA,QACtB,aAAa,EAAE,UAAU,YAAY,UAAU;AAAA,QAC/C,WAAW,EAAE,aAAa;AAAA,QAC1B,aAAa,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC;AAAA,QACvC,YAAY,EAAE,KAAK;AAAA,QACnB,EAAE,cAAc,gBAAgB,EAAE,WAAW,KAAK;AAAA,QAClD,cAAc,EAAE,SAAS;AAAA,MAC3B,EAAE,OAAO,OAAO;AAChB,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,EAAE,CAAC,EAAE;AAAA,IAC/D,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,MACxC,WAAWA,GACR,OAAO,EACP,SAAS,4DAA4D;AAAA,MACxE,eAAeA,GACZ,KAAK,CAAC,cAAc,gBAAgB,UAAU,CAAC,EAC/C,SAAS,EACT,SAAS,8DAA8D;AAAA,MAC1E,QAAQA,GACL,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,sCAAsC;AAAA,MAClD,aAAaA,GACV,OAAO,EACP,SAAS,EACT,SAAS,iCAAiC;AAAA,IAC/C;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,YAAM,UAAU,MAAM,cAAc,MAAM;AAC1C,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,YAAY,QAAQ,IAAI,kBAAkB,QAAQ,EAAE,WAAW,QAAQ,SAAS;AAAA,UACxF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,MAClD,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,MACvD,SAASA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,MACxE,eAAeA,GACZ,KAAK,CAAC,cAAc,gBAAgB,UAAU,CAAC,EAC/C,SAAS,EACT,SAAS,oBAAoB;AAAA,MAChC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC1E;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,YAAM,UAAU,MAAM,cAAc,MAAM;AAC1C,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,YAAY,QAAQ,IAAI,cAAc,QAAQ,UAAU,YAAY,UAAU;AAAA,UACtF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,0BAA0B;AAAA,IACpD;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sCAA6B;AACpE,YAAM,SAAS,MAAM,cAAc,OAAO,EAAE;AAC5C,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,WAAW,OAAO,EAAE,YAAY;AAAA,QACxD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,gBAAgB,yBAAyB,YAAY;AACnD,oBAAc;AACd,YAAM,EAAE,YAAY,IAAI,MAAM,OAAO,qCAA4B;AACjE,YAAM,UAAU,MAAM,YAAY;AAClC,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,oBAAoB,CAAC,EAAE;AAAA,MAClE;AACA,YAAM,QAAQ,QAAQ;AAAA,QACpB,CAAC,MAAM,UAAK,EAAE,IAAI,SAAS,EAAE,EAAE,cAAc,EAAE,SAAS;AAAA,MAC1D;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,SAAS,QAAQ,MAAM;AAAA,EAAgB,MAAM,KAAK,IAAI,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,uDAAuD;AAAA,MACjF,OAAOA,GAAE,OAAO,EAAE,SAAS,8CAA8C;AAAA,IAC3E;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qCAA4B;AAClE,YAAM,SAAS,MAAM,aAAa,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,CAAC;AAC5E,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,WAAW,OAAO,IAAI,kBAAkB,OAAO,EAAE;AAAA,UACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,MACjD,OAAOA,GAAE,OAAO,EAAE,SAAS,kDAAkD;AAAA,IAC/E;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qCAA4B;AAClE,YAAM,SAAS,MAAM,aAAa,EAAE,IAAI,OAAO,IAAI,OAAO,OAAO,MAAM,CAAC;AACxE,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,WAAW,OAAO,IAAI;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,IAAIA,GAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,IACnD;AAAA,IACA,gBAAgB,0BAA0B,OAAO,WAAW;AAC1D,oBAAc;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qCAA4B;AAClE,YAAM,SAAS,MAAM,aAAa,OAAO,EAAE;AAC3C,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,OAAO,EAAE,YAAY,CAAC,EAAE;AAAA,IAC7E,CAAC;AAAA,EACH;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAMA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IACxD;AAAA,IACA,gBAAgB,2BAA2B,OAAO,WAAW;AAC3D,oBAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,8BAA2B;AACxE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,MAAM,EAAE,CAAC;AAAA,MACrE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,OAAOA,GAAE,OAAO,EAAE,SAAS,kDAAkD;AAAA,IAC/E;AAAA,IACA,gBAAgB,8BAA8B,OAAO,WAAW;AAC9D,oBAAc;AACd,YAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,8BAA2B;AAC3E,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,uBAAuB,MAAM,EAAE,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,mBAAmB,IAAI,MAAM,OACnC,6BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,mBAAmB,MAAM,EAAE,CAAC;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,MAClE,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAAwB;AAClE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,iBAAiB,MAAM,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAA,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OACpC,8BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,MAAM,EAAE,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,MAChE,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,MAC3D,aAAaA,GACV,MAAM,6BAA6B,EACnC,SAAS,EACT,SAAS,4BAA4B;AAAA,IAC1C;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OACpC,8BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,MAAM,EAAE,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,IAClE;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,oBAAoB,IAAI,MAAM,OACpC,8BACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,oBAAoB,MAAM,EAAE,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GACP,OAAO,EACP,SAAS,6CAA6C;AAAA,MACzD,MAAMA,GACH,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,SAAS,EACT,SAAS,0BAA0B;AAAA,MACtC,OAAOA,GACJ,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,IAAI,GAAI,EACR,SAAS,EACT,SAAS,2CAA2C;AAAA,MACvD,QAAQA,GACL,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,EACT,SAAS,0EAA0E;AAAA,IACxF;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,yBAAyB,IAAI,MAAM,OACzC,oCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,yBAAyB,MAAM,EAAE;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GACP,OAAO,EACP,SAAS,0CAA0C;AAAA,MACtD,SAASA,GACN,MAAMA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,EACvC,IAAI,CAAC,EACL,IAAI,GAAI,EACR,SAAS,gFAAgF;AAAA,IAC9F;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,2BAA2B,IAAI,MAAM,OAC3C,sCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,2BAA2B,MAAM,EAAE;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GACP,OAAO,EACP,SAAS,8CAA8C;AAAA,MAC1D,UAAUA,GAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,MACvD,OAAOA,GACJ,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,yCAAyC;AAAA,IACvD;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,0BAA0B,IAAI,MAAM,OAC1C,qCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,0BAA0B,MAAM,EAAE;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAUD,GACP,OAAO,EACP,SAAS,+CAA+C;AAAA,MAC3D,WAAWA,GACR,MAAMA,GAAE,OAAO,CAAC,EAChB,IAAI,CAAC,EACL,IAAI,GAAI,EACR,SAAS,+BAA+B;AAAA,IAC7C;AAAA,IACA,OAAO,WAAW;AAChB,YAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,aAAa;AACpD,MAAAA,eAAc;AACd,YAAM,EAAE,2BAA2B,IAAI,MAAM,OAC3C,sCACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,MAAM,MAAM,2BAA2B,MAAM,EAAE;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["z","z","requireApiKey"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-simulation-runs.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\nexport interface SimulationRunSummary {\n scenarioRunId: string;\n scenarioId: string;\n batchRunId: string;\n name: string | null;\n status: string;\n durationInMs: number;\n totalCost?: number;\n results?: {\n verdict?: string | null;\n reasoning?: string | null;\n metCriteria?: string[];\n unmetCriteria?: string[];\n error?: string | null;\n } | null;\n messages?: Array<{ role: string; content: string }>;\n timestamp: number;\n updatedAt: number;\n}\n\nexport interface SimulationRunListResponse {\n runs: SimulationRunSummary[];\n hasMore?: boolean;\n nextCursor?: string;\n}\n\n/** Lists simulation runs, optionally filtered by scenario set or batch. */\nexport async function listSimulationRuns(params?: {\n scenarioSetId?: string;\n batchRunId?: string;\n limit?: number;\n}): Promise<SimulationRunListResponse> {\n const query = new URLSearchParams();\n if (params?.scenarioSetId) query.set(\"scenarioSetId\", params.scenarioSetId);\n if (params?.batchRunId) query.set(\"batchRunId\", params.batchRunId);\n if (params?.limit) query.set(\"limit\", String(params.limit));\n const qs = query.toString() ? `?${query}` : \"\";\n return makeRequest(\"GET\", `/api/simulation-runs${qs}`) as Promise<SimulationRunListResponse>;\n}\n\n/** Gets a single simulation run by its ID. */\nexport async function getSimulationRun(\n scenarioRunId: string,\n): Promise<SimulationRunSummary> {\n return makeRequest(\n \"GET\",\n `/api/simulation-runs/${encodeURIComponent(scenarioRunId)}`,\n ) as Promise<SimulationRunSummary>;\n}\n"],"mappings":";;;;;AA6BA,eAAsB,mBAAmB,QAIF;AACrC,QAAM,QAAQ,IAAI,gBAAgB;AAClC,MAAI,QAAQ,cAAe,OAAM,IAAI,iBAAiB,OAAO,aAAa;AAC1E,MAAI,QAAQ,WAAY,OAAM,IAAI,cAAc,OAAO,UAAU;AACjE,MAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAM,KAAK,MAAM,SAAS,IAAI,IAAI,KAAK,KAAK;AAC5C,SAAO,YAAY,OAAO,uBAAuB,EAAE,EAAE;AACvD;AAGA,eAAsB,iBACpB,eAC+B;AAC/B,SAAO;AAAA,IACL;AAAA,IACA,wBAAwB,mBAAmB,aAAa,CAAC;AAAA,EAC3D;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-dashboards.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\nexport interface DashboardSummary {\n id: string;\n name: string;\n order: number;\n graphCount: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface DashboardDetail extends DashboardSummary {\n graphs: unknown[];\n}\n\nexport interface DashboardListResponse {\n data: DashboardSummary[];\n}\n\nexport async function listDashboards(): Promise<DashboardListResponse> {\n return makeRequest(\"GET\", \"/api/dashboards\") as Promise<DashboardListResponse>;\n}\n\nexport async function getDashboard(id: string): Promise<DashboardDetail> {\n return makeRequest(\n \"GET\",\n `/api/dashboards/${encodeURIComponent(id)}`,\n ) as Promise<DashboardDetail>;\n}\n\nexport async function createDashboard(data: { name: string }): Promise<DashboardDetail> {\n return makeRequest(\"POST\", \"/api/dashboards\", data) as Promise<DashboardDetail>;\n}\n\nexport async function renameDashboard(id: string, data: { name: string }): Promise<DashboardDetail> {\n return makeRequest(\n \"PATCH\",\n `/api/dashboards/${encodeURIComponent(id)}`,\n data,\n ) as Promise<DashboardDetail>;\n}\n\nexport async function deleteDashboard(id: string): Promise<{ id: string; name: string }> {\n return makeRequest(\n \"DELETE\",\n `/api/dashboards/${encodeURIComponent(id)}`,\n ) as Promise<{ id: string; name: string }>;\n}\n"],"mappings":";;;;;AAmBA,eAAsB,iBAAiD;AACrE,SAAO,YAAY,OAAO,iBAAiB;AAC7C;AAEA,eAAsB,aAAa,IAAsC;AACvE,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,EAAE,CAAC;AAAA,EAC3C;AACF;AAEA,eAAsB,gBAAgB,MAAkD;AACtF,SAAO,YAAY,QAAQ,mBAAmB,IAAI;AACpD;AAEA,eAAsB,gBAAgB,IAAY,MAAkD;AAClG,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,EAAE,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAEA,eAAsB,gBAAgB,IAAmD;AACvF,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,EAAE,CAAC;AAAA,EAC3C;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-evaluators.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\n// --- Evaluator types ---\n\nexport interface EvaluatorSummary {\n id: string;\n projectId: string;\n name: string;\n slug: string | null;\n type: string;\n config: Record<string, unknown> | null;\n workflowId: string | null;\n copiedFromEvaluatorId: string | null;\n createdAt: string;\n updatedAt: string;\n fields: Array<{ identifier: string; type: string; optional?: boolean }>;\n outputFields: Array<{ identifier: string; type: string; optional?: boolean }>;\n workflowName?: string;\n workflowIcon?: string;\n}\n\n// --- Helpers ---\n\n/**\n * Extracts the evaluatorType from an evaluator's config.\n * Centralises the cast so callers don't repeat it.\n */\nexport function getEvaluatorType(\n evaluator: Pick<EvaluatorSummary, \"config\">,\n): string | undefined {\n return (evaluator.config as Record<string, unknown> | null)\n ?.evaluatorType as string | undefined;\n}\n\n// --- Evaluator API functions ---\n\n/** Lists all evaluators in the project. */\nexport async function listEvaluators(): Promise<EvaluatorSummary[]> {\n return makeRequest(\"GET\", \"/api/evaluators\") as Promise<EvaluatorSummary[]>;\n}\n\n/** Retrieves a single evaluator by ID or slug. */\nexport async function getEvaluator(idOrSlug: string): Promise<EvaluatorSummary> {\n return makeRequest(\n \"GET\",\n `/api/evaluators/${encodeURIComponent(idOrSlug)}`,\n ) as Promise<EvaluatorSummary>;\n}\n\n/** Creates a new evaluator. */\nexport async function createEvaluator(data: {\n name: string;\n config: Record<string, unknown>;\n}): Promise<EvaluatorSummary> {\n return makeRequest(\"POST\", \"/api/evaluators\", data) as Promise<EvaluatorSummary>;\n}\n\n/** Updates an existing evaluator. */\nexport async function updateEvaluator(params: {\n id: string;\n name?: string;\n config?: Record<string, unknown>;\n}): Promise<EvaluatorSummary> {\n const { id, ...data } = params;\n return makeRequest(\n \"PUT\",\n `/api/evaluators/${encodeURIComponent(id)}`,\n data,\n ) as Promise<EvaluatorSummary>;\n}\n\n/** Archives (soft-deletes) an evaluator. */\nexport async function deleteEvaluator(\n idOrSlug: string,\n): Promise<{ id: string; archived: boolean }> {\n return makeRequest(\n \"DELETE\",\n `/api/evaluators/${encodeURIComponent(idOrSlug)}`,\n ) as Promise<{ id: string; archived: boolean }>;\n}\n"],"mappings":";;;;;AA2BO,SAAS,iBACd,WACoB;AACpB,SAAQ,UAAU,QACd;AACN;AAKA,eAAsB,iBAA8C;AAClE,SAAO,YAAY,OAAO,iBAAiB;AAC7C;AAGA,eAAsB,aAAa,UAA6C;AAC9E,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,QAAQ,CAAC;AAAA,EACjD;AACF;AAGA,eAAsB,gBAAgB,MAGR;AAC5B,SAAO,YAAY,QAAQ,mBAAmB,IAAI;AACpD;AAGA,eAAsB,gBAAgB,QAIR;AAC5B,QAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,EAAE,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAGA,eAAsB,gBACpB,UAC4C;AAC5C,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB,mBAAmB,QAAQ,CAAC;AAAA,EACjD;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-annotations.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\nexport interface AnnotationResponse {\n id?: string;\n projectId?: string;\n traceId?: string;\n comment?: string;\n isThumbsUp?: boolean;\n userId?: string;\n email?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport async function listAnnotations(): Promise<AnnotationResponse[]> {\n return makeRequest(\"GET\", \"/api/annotations\") as Promise<AnnotationResponse[]>;\n}\n\nexport async function getAnnotation(id: string): Promise<AnnotationResponse> {\n return makeRequest(\n \"GET\",\n `/api/annotations/${encodeURIComponent(id)}`,\n ) as Promise<AnnotationResponse>;\n}\n\nexport async function getAnnotationsByTrace(traceId: string): Promise<AnnotationResponse[]> {\n return makeRequest(\n \"GET\",\n `/api/annotations/trace/${encodeURIComponent(traceId)}`,\n ) as Promise<AnnotationResponse[]>;\n}\n\nexport async function createAnnotation(\n traceId: string,\n data: { comment?: string; isThumbsUp?: boolean; email?: string },\n): Promise<AnnotationResponse> {\n return makeRequest(\n \"POST\",\n `/api/annotations/trace/${encodeURIComponent(traceId)}`,\n data,\n ) as Promise<AnnotationResponse>;\n}\n\nexport async function deleteAnnotation(id: string): Promise<{ status?: string; message?: string }> {\n return makeRequest(\n \"DELETE\",\n `/api/annotations/${encodeURIComponent(id)}`,\n ) as Promise<{ status?: string; message?: string }>;\n}\n"],"mappings":";;;;;AAcA,eAAsB,kBAAiD;AACrE,SAAO,YAAY,OAAO,kBAAkB;AAC9C;AAEA,eAAsB,cAAc,IAAyC;AAC3E,SAAO;AAAA,IACL;AAAA,IACA,oBAAoB,mBAAmB,EAAE,CAAC;AAAA,EAC5C;AACF;AAEA,eAAsB,sBAAsB,SAAgD;AAC1F,SAAO;AAAA,IACL;AAAA,IACA,0BAA0B,mBAAmB,OAAO,CAAC;AAAA,EACvD;AACF;AAEA,eAAsB,iBACpB,SACA,MAC6B;AAC7B,SAAO;AAAA,IACL;AAAA,IACA,0BAA0B,mBAAmB,OAAO,CAAC;AAAA,IACrD;AAAA,EACF;AACF;AAEA,eAAsB,iBAAiB,IAA4D;AACjG,SAAO;AAAA,IACL;AAAA,IACA,oBAAoB,mBAAmB,EAAE,CAAC;AAAA,EAC5C;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-suites.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\n// --- Suite types ---\n\nexport interface SuiteTarget {\n type: \"prompt\" | \"http\" | \"code\" | \"workflow\";\n referenceId: string;\n}\n\nexport interface SuiteSummary {\n id: string;\n name: string;\n slug: string;\n description: string | null;\n scenarioIds: string[];\n targets: SuiteTarget[];\n repeatCount: number;\n labels: string[];\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface SuiteRunResult {\n scheduled: boolean;\n batchRunId: string;\n setId: string;\n jobCount: number;\n skippedArchived: {\n scenarios: string[];\n targets: string[];\n };\n items: Array<{\n scenarioRunId: string;\n scenarioId: string;\n target: SuiteTarget;\n name: string | null;\n }>;\n}\n\nexport interface SuiteArchiveResponse {\n id: string;\n archived: boolean;\n}\n\n// --- Suite API functions ---\n\n/** Lists all suites (run plans) in the project. */\nexport async function listSuites(): Promise<SuiteSummary[]> {\n return makeRequest(\"GET\", \"/api/suites\") as Promise<SuiteSummary[]>;\n}\n\n/** Retrieves a single suite by ID. */\nexport async function getSuite(id: string): Promise<SuiteSummary> {\n return makeRequest(\n \"GET\",\n `/api/suites/${encodeURIComponent(id)}`\n ) as Promise<SuiteSummary>;\n}\n\n/** Creates a new suite. */\nexport async function createSuite(data: {\n name: string;\n description?: string;\n scenarioIds: string[];\n targets: SuiteTarget[];\n repeatCount?: number;\n labels?: string[];\n}): Promise<SuiteSummary> {\n return makeRequest(\"POST\", \"/api/suites\", data) as Promise<SuiteSummary>;\n}\n\n/** Updates an existing suite. */\nexport async function updateSuite(params: {\n id: string;\n name?: string;\n description?: string | null;\n scenarioIds?: string[];\n targets?: SuiteTarget[];\n repeatCount?: number;\n labels?: string[];\n}): Promise<SuiteSummary> {\n const { id, ...data } = params;\n return makeRequest(\n \"PATCH\",\n `/api/suites/${encodeURIComponent(id)}`,\n data\n ) as Promise<SuiteSummary>;\n}\n\n/** Duplicates a suite. */\nexport async function duplicateSuite(id: string): Promise<SuiteSummary> {\n return makeRequest(\n \"POST\",\n `/api/suites/${encodeURIComponent(id)}/duplicate`\n ) as Promise<SuiteSummary>;\n}\n\n/** Triggers a suite run. */\nexport async function runSuite(\n id: string,\n idempotencyKey?: string\n): Promise<SuiteRunResult> {\n return makeRequest(\n \"POST\",\n `/api/suites/${encodeURIComponent(id)}/run`,\n { idempotencyKey: idempotencyKey ?? `mcp-${Date.now()}-${Math.random().toString(36).slice(2)}` }\n ) as Promise<SuiteRunResult>;\n}\n\n/** Archives (soft-deletes) a suite. */\nexport async function archiveSuite(\n id: string\n): Promise<SuiteArchiveResponse> {\n return makeRequest(\n \"DELETE\",\n `/api/suites/${encodeURIComponent(id)}`\n ) as Promise<SuiteArchiveResponse>;\n}\n"],"mappings":";;;;;AA+CA,eAAsB,aAAsC;AAC1D,SAAO,YAAY,OAAO,aAAa;AACzC;AAGA,eAAsB,SAAS,IAAmC;AAChE,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,EACvC;AACF;AAGA,eAAsB,YAAY,MAOR;AACxB,SAAO,YAAY,QAAQ,eAAe,IAAI;AAChD;AAGA,eAAsB,YAAY,QAQR;AACxB,QAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,IACrC;AAAA,EACF;AACF;AAWA,eAAsB,SACpB,IACA,gBACyB;AACzB,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,IACrC,EAAE,gBAAgB,kBAAkB,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG;AAAA,EACjG;AACF;AAGA,eAAsB,aACpB,IAC+B;AAC/B,SAAO;AAAA,IACL;AAAA,IACA,eAAe,mBAAmB,EAAE,CAAC;AAAA,EACvC;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/escape-markdown.ts"],"sourcesContent":["/**\n * Escapes characters that would break markdown table formatting.\n *\n * Replaces pipe characters (`|`) with `\\|` and newlines with spaces\n * so that values can be safely embedded in markdown tables and headers.\n */\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\n/g, \" \");\n}\n"],"mappings":";AAMO,SAAS,eAAe,OAAuB;AACpD,SAAO,MACJ,QAAQ,OAAO,MAAM,EACrB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,GAAG;AACvB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-datasets.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\n// --- Dataset types ---\n\nexport interface DatasetColumnType {\n name: string;\n type: string;\n}\n\nexport interface DatasetSummary {\n id: string;\n name: string;\n slug: string;\n columnTypes: DatasetColumnType[];\n recordCount?: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface DatasetListResponse {\n data: DatasetSummary[];\n pagination: {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n };\n}\n\nexport interface DatasetRecord {\n id: string;\n entry: Record<string, unknown>;\n}\n\nexport interface DatasetDetailResponse {\n id: string;\n name: string;\n slug: string;\n columnTypes: DatasetColumnType[];\n createdAt: string;\n updatedAt: string;\n data: DatasetRecord[];\n}\n\nexport interface DatasetMutationResponse {\n id: string;\n name: string;\n slug: string;\n columnTypes: DatasetColumnType[];\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface DatasetArchiveResponse {\n id: string;\n archived: boolean;\n}\n\nexport interface BatchCreateRecordsResponse {\n data: DatasetRecord[];\n}\n\nexport interface DeleteRecordsResponse {\n deletedCount: number;\n}\n\nexport interface DatasetRecordListResponse {\n data: DatasetRecord[];\n pagination: {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n };\n}\n\n// --- Dataset API functions ---\n\n/** Lists all datasets in the project (paginated). */\nexport async function listDatasets(params?: {\n page?: number;\n limit?: number;\n}): Promise<DatasetListResponse> {\n const query = new URLSearchParams();\n if (params?.page != null) query.set(\"page\", String(params.page));\n if (params?.limit != null) query.set(\"limit\", String(params.limit));\n const qs = query.toString();\n const path = qs ? `/api/dataset?${qs}` : \"/api/dataset\";\n return makeRequest(\"GET\", path) as Promise<DatasetListResponse>;\n}\n\n/** Retrieves a single dataset by slug or ID, including records. */\nexport async function getDataset(\n slugOrId: string,\n): Promise<DatasetDetailResponse> {\n return makeRequest(\n \"GET\",\n `/api/dataset/${encodeURIComponent(slugOrId)}`,\n ) as Promise<DatasetDetailResponse>;\n}\n\n/** Creates a new dataset. */\nexport async function createDataset(data: {\n name: string;\n columnTypes?: DatasetColumnType[];\n}): Promise<DatasetMutationResponse> {\n return makeRequest(\n \"POST\",\n \"/api/dataset\",\n data,\n ) as Promise<DatasetMutationResponse>;\n}\n\n/** Updates an existing dataset by slug or ID. */\nexport async function updateDataset(params: {\n slugOrId: string;\n name?: string;\n columnTypes?: DatasetColumnType[];\n}): Promise<DatasetMutationResponse> {\n const { slugOrId, ...data } = params;\n return makeRequest(\n \"PATCH\",\n `/api/dataset/${encodeURIComponent(slugOrId)}`,\n data,\n ) as Promise<DatasetMutationResponse>;\n}\n\n/** Archives (soft-deletes) a dataset by slug or ID. */\nexport async function deleteDataset(\n slugOrId: string,\n): Promise<DatasetArchiveResponse> {\n return makeRequest(\n \"DELETE\",\n `/api/dataset/${encodeURIComponent(slugOrId)}`,\n ) as Promise<DatasetArchiveResponse>;\n}\n\n/** Creates records in a dataset in batch. */\nexport async function createDatasetRecords(params: {\n slugOrId: string;\n entries: Record<string, unknown>[];\n}): Promise<BatchCreateRecordsResponse> {\n const { slugOrId, entries } = params;\n return makeRequest(\n \"POST\",\n `/api/dataset/${encodeURIComponent(slugOrId)}/records`,\n { entries },\n ) as Promise<BatchCreateRecordsResponse>;\n}\n\n/** Updates or creates a single record in a dataset. */\nexport async function updateDatasetRecord(params: {\n slugOrId: string;\n recordId: string;\n entry: Record<string, unknown>;\n}): Promise<DatasetRecord> {\n const { slugOrId, recordId, entry } = params;\n return makeRequest(\n \"PATCH\",\n `/api/dataset/${encodeURIComponent(slugOrId)}/records/${encodeURIComponent(recordId)}`,\n { entry },\n ) as Promise<DatasetRecord>;\n}\n\n/** Deletes records from a dataset by IDs. */\nexport async function deleteDatasetRecords(params: {\n slugOrId: string;\n recordIds: string[];\n}): Promise<DeleteRecordsResponse> {\n const { slugOrId, recordIds } = params;\n return makeRequest(\n \"DELETE\",\n `/api/dataset/${encodeURIComponent(slugOrId)}/records`,\n { recordIds },\n ) as Promise<DeleteRecordsResponse>;\n}\n\n/** Lists records in a dataset (paginated). */\nexport async function listDatasetRecords(params: {\n slugOrId: string;\n page?: number;\n limit?: number;\n}): Promise<DatasetRecordListResponse> {\n const { slugOrId } = params;\n const query = new URLSearchParams();\n if (params.page != null) query.set(\"page\", String(params.page));\n if (params.limit != null) query.set(\"limit\", String(params.limit));\n const qs = query.toString();\n const path = `/api/dataset/${encodeURIComponent(slugOrId)}/records${qs ? `?${qs}` : \"\"}`;\n return makeRequest(\"GET\", path) as Promise<DatasetRecordListResponse>;\n}\n"],"mappings":";;;;;AA+EA,eAAsB,aAAa,QAGF;AAC/B,QAAM,QAAQ,IAAI,gBAAgB;AAClC,MAAI,QAAQ,QAAQ,KAAM,OAAM,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AAC/D,MAAI,QAAQ,SAAS,KAAM,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAClE,QAAM,KAAK,MAAM,SAAS;AAC1B,QAAM,OAAO,KAAK,gBAAgB,EAAE,KAAK;AACzC,SAAO,YAAY,OAAO,IAAI;AAChC;AAGA,eAAsB,WACpB,UACgC;AAChC,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,EAC9C;AACF;AAGA,eAAsB,cAAc,MAGC;AACnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGA,eAAsB,cAAc,QAIC;AACnC,QAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;AAGA,eAAsB,cACpB,UACiC;AACjC,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,EAC9C;AACF;AAGA,eAAsB,qBAAqB,QAGH;AACtC,QAAM,EAAE,UAAU,QAAQ,IAAI;AAC9B,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,IAC5C,EAAE,QAAQ;AAAA,EACZ;AACF;AAGA,eAAsB,oBAAoB,QAIf;AACzB,QAAM,EAAE,UAAU,UAAU,MAAM,IAAI;AACtC,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,IACpF,EAAE,MAAM;AAAA,EACV;AACF;AAGA,eAAsB,qBAAqB,QAGR;AACjC,QAAM,EAAE,UAAU,UAAU,IAAI;AAChC,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,IAC5C,EAAE,UAAU;AAAA,EACd;AACF;AAGA,eAAsB,mBAAmB,QAIF;AACrC,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,QAAQ,IAAI,gBAAgB;AAClC,MAAI,OAAO,QAAQ,KAAM,OAAM,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AAC9D,MAAI,OAAO,SAAS,KAAM,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACjE,QAAM,KAAK,MAAM,SAAS;AAC1B,QAAM,OAAO,gBAAgB,mBAAmB,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE,KAAK,EAAE;AACtF,SAAO,YAAY,OAAO,IAAI;AAChC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/format-dataset-mutation.ts"],"sourcesContent":["import type { DatasetMutationResponse } from \"../langwatch-api-datasets.js\";\nimport { escapeMarkdown } from \"../utils/escape-markdown.js\";\n\n/**\n * Formats the common detail lines for a dataset mutation response\n * (name, slug, id, and column types).\n *\n * Used by both create-dataset and update-dataset handlers to avoid\n * duplicating the formatting logic.\n */\nexport function formatDatasetMutationDetails(\n result: DatasetMutationResponse,\n): string[] {\n const lines: string[] = [];\n lines.push(`**Name**: ${escapeMarkdown(result.name)}`);\n lines.push(`**Slug**: ${escapeMarkdown(result.slug)}`);\n lines.push(`**ID**: ${escapeMarkdown(result.id)}`);\n if (Array.isArray(result.columnTypes) && result.columnTypes.length > 0) {\n const colNames = result.columnTypes\n .map((c) => `${escapeMarkdown(c.name)} (${escapeMarkdown(c.type)})`)\n .join(\", \");\n lines.push(`**Columns**: ${colNames}`);\n }\n return lines;\n}\n"],"mappings":";;;;;AAUO,SAAS,6BACd,QACU;AACV,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,aAAa,eAAe,OAAO,IAAI,CAAC,EAAE;AACrD,QAAM,KAAK,aAAa,eAAe,OAAO,IAAI,CAAC,EAAE;AACrD,QAAM,KAAK,WAAW,eAAe,OAAO,EAAE,CAAC,EAAE;AACjD,MAAI,MAAM,QAAQ,OAAO,WAAW,KAAK,OAAO,YAAY,SAAS,GAAG;AACtE,UAAM,WAAW,OAAO,YACrB,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,IAAI,CAAC,KAAK,eAAe,EAAE,IAAI,CAAC,GAAG,EAClE,KAAK,IAAI;AACZ,UAAM,KAAK,gBAAgB,QAAQ,EAAE;AAAA,EACvC;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/langwatch-api-workflows.ts"],"sourcesContent":["import { makeRequest } from \"./langwatch-api.js\";\n\nexport interface WorkflowSummary {\n id: string;\n name: string;\n icon: string | null;\n description: string | null;\n isEvaluator: boolean;\n isComponent: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport async function listWorkflows(): Promise<WorkflowSummary[]> {\n return makeRequest(\"GET\", \"/api/workflows\") as Promise<WorkflowSummary[]>;\n}\n\nexport async function getWorkflow(id: string): Promise<WorkflowSummary> {\n return makeRequest(\n \"GET\",\n `/api/workflows/${encodeURIComponent(id)}`,\n ) as Promise<WorkflowSummary>;\n}\n\nexport async function runWorkflow(\n id: string,\n input?: Record<string, unknown>\n): Promise<Record<string, unknown>> {\n return makeRequest(\n \"POST\",\n `/api/workflows/${encodeURIComponent(id)}/run`,\n input ?? {},\n ) as Promise<Record<string, unknown>>;\n}\n\nexport async function deleteWorkflow(id: string): Promise<{ id: string; archived: boolean }> {\n return makeRequest(\n \"DELETE\",\n `/api/workflows/${encodeURIComponent(id)}`,\n ) as Promise<{ id: string; archived: boolean }>;\n}\n"],"mappings":";;;;;AAaA,eAAsB,gBAA4C;AAChE,SAAO,YAAY,OAAO,gBAAgB;AAC5C;AAEA,eAAsB,YAAY,IAAsC;AACtE,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,EAC1C;AACF;AAEA,eAAsB,YACpB,IACA,OACkC;AAClC,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,IACxC,SAAS,CAAC;AAAA,EACZ;AACF;AAEA,eAAsB,eAAe,IAAwD;AAC3F,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB,mBAAmB,EAAE,CAAC;AAAA,EAC1C;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/date-parsing.ts"],"sourcesContent":["const RELATIVE_UNITS: Record<string, number> = {\n h: 3600000,\n d: 86400000,\n w: 604800000,\n m: 2592000000,\n};\n\n/**\n * Parses a date string that can be either a relative duration (e.g. \"24h\", \"7d\")\n * or an ISO date string. Throws on invalid input rather than silently falling back.\n *\n * @returns epoch milliseconds\n * @throws Error if the input is not a valid relative duration or parseable date string\n */\nexport function parseRelativeDate(input: string): number {\n if (input === \"now\") return Date.now();\n\n const match = input.match(/^(\\d+)(h|d|w|m)$/);\n if (match) {\n const [, amount, unit] = match;\n return Date.now() - parseInt(amount!) * (RELATIVE_UNITS[unit!] ?? 86400000);\n }\n\n const parsed = Date.parse(input);\n if (Number.isNaN(parsed)) {\n throw new Error(\n `Invalid date: \"${input}\". Use a relative duration (e.g. \"24h\", \"7d\", \"4w\") or an ISO date string.`\n );\n }\n return parsed;\n}\n"],"mappings":";AAAA,IAAM,iBAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AASO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,UAAU,MAAO,QAAO,KAAK,IAAI;AAErC,QAAM,QAAQ,MAAM,MAAM,kBAAkB;AAC5C,MAAI,OAAO;AACT,UAAM,CAAC,EAAE,QAAQ,IAAI,IAAI;AACzB,WAAO,KAAK,IAAI,IAAI,SAAS,MAAO,KAAK,eAAe,IAAK,KAAK;AAAA,EACpE;AAEA,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,MAAI,OAAO,MAAM,MAAM,GAAG;AACxB,UAAM,IAAI;AAAA,MACR,kBAAkB,KAAK;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-agent.ts"],"sourcesContent":["import { createAgent as apiCreateAgent } from \"../langwatch-api-agents.js\";\n\nexport async function handleCreateAgent(params: {\n name: string;\n type: string;\n config?: Record<string, unknown>;\n}): Promise<string> {\n const agent = await apiCreateAgent({\n name: params.name,\n type: params.type,\n config: params.config ?? {},\n });\n\n return `Agent created successfully!\\n\\n**Name**: ${agent.name}\\n**ID**: ${agent.id}\\n**Type**: ${agent.type}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,kBAAkB,QAIpB;AAClB,QAAM,QAAQ,MAAM,YAAe;AAAA,IACjC,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO,UAAU,CAAC;AAAA,EAC5B,CAAC;AAED,SAAO;AAAA;AAAA,YAA4C,MAAM,IAAI;AAAA,UAAa,MAAM,EAAE;AAAA,YAAe,MAAM,IAAI;AAC7G;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-annotation.ts"],"sourcesContent":["import { createAnnotation as apiCreateAnnotation } from \"../langwatch-api-annotations.js\";\n\nexport async function handleCreateAnnotation(params: {\n traceId: string;\n comment?: string;\n isThumbsUp?: boolean;\n email?: string;\n}): Promise<string> {\n const annotation = await apiCreateAnnotation(params.traceId, {\n comment: params.comment,\n isThumbsUp: params.isThumbsUp,\n email: params.email,\n });\n\n const rating = params.isThumbsUp === true ? \" 👍\" : params.isThumbsUp === false ? \" 👎\" : \"\";\n\n return `Annotation created successfully!${rating}\\n\\n**ID**: ${annotation.id ?? \"—\"}\\n**Trace ID**: ${params.traceId}${params.comment ? `\\n**Comment**: ${params.comment}` : \"\"}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,uBAAuB,QAKzB;AAClB,QAAM,aAAa,MAAM,iBAAoB,OAAO,SAAS;AAAA,IAC3D,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,EAChB,CAAC;AAED,QAAM,SAAS,OAAO,eAAe,OAAO,eAAQ,OAAO,eAAe,QAAQ,eAAQ;AAE1F,SAAO,mCAAmC,MAAM;AAAA;AAAA,UAAe,WAAW,MAAM,QAAG;AAAA,gBAAmB,OAAO,OAAO,GAAG,OAAO,UAAU;AAAA,eAAkB,OAAO,OAAO,KAAK,EAAE;AACjL;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-dashboard.ts"],"sourcesContent":["import { createDashboard as apiCreateDashboard } from \"../langwatch-api-dashboards.js\";\n\nexport async function handleCreateDashboard(params: { name: string }): Promise<string> {\n const dashboard = await apiCreateDashboard({ name: params.name });\n\n return `Dashboard created successfully!\\n\\n**Name**: ${dashboard.name}\\n**ID**: ${dashboard.id}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,sBAAsB,QAA2C;AACrF,QAAM,YAAY,MAAM,gBAAmB,EAAE,MAAM,OAAO,KAAK,CAAC;AAEhE,SAAO;AAAA;AAAA,YAAgD,UAAU,IAAI;AAAA,UAAa,UAAU,EAAE;AAChG;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-dataset.ts"],"sourcesContent":["import { createDataset as apiCreateDataset } from \"../langwatch-api-datasets.js\";\nimport type { DatasetColumnType } from \"../langwatch-api-datasets.js\";\nimport { formatDatasetMutationDetails } from \"./format-dataset-mutation.js\";\n\n/**\n * Handles the platform_create_dataset MCP tool invocation.\n *\n * Creates a new dataset in the LangWatch project and returns a\n * confirmation with the created dataset's details.\n */\nexport async function handleCreateDataset(params: {\n name: string;\n columnTypes?: DatasetColumnType[];\n}): Promise<string> {\n const result = await apiCreateDataset(params);\n\n const lines: string[] = [];\n lines.push(\"Dataset created successfully!\\n\");\n lines.push(...formatDatasetMutationDetails(result));\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;;;AAUA,eAAsB,oBAAoB,QAGtB;AAClB,QAAM,SAAS,MAAM,cAAiB,MAAM;AAE5C,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,iCAAiC;AAC5C,QAAM,KAAK,GAAG,6BAA6B,MAAM,CAAC;AAElD,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-dataset-records.ts"],"sourcesContent":["import { createDatasetRecords as apiCreateDatasetRecords } from \"../langwatch-api-datasets.js\";\n\n/**\n * Handles the platform_create_dataset_records MCP tool invocation.\n *\n * Creates records in a dataset in batch and returns a confirmation\n * with the count of records created.\n */\nexport async function handleCreateDatasetRecords(params: {\n slugOrId: string;\n entries: Record<string, unknown>[];\n}): Promise<string> {\n const result = await apiCreateDatasetRecords(params);\n const count = Array.isArray(result.data) ? result.data.length : 0;\n\n const lines: string[] = [];\n lines.push(`${count} record(s) created successfully!\\n`);\n lines.push(\n \"> Use `platform_get_dataset` to see the updated dataset with all records.\",\n );\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAQA,eAAsB,2BAA2B,QAG7B;AAClB,QAAM,SAAS,MAAM,qBAAwB,MAAM;AACnD,QAAM,QAAQ,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,KAAK,SAAS;AAEhE,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,GAAG,KAAK;AAAA,CAAoC;AACvD,QAAM;AAAA,IACJ;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-evaluator.ts"],"sourcesContent":["import {\n createEvaluator as apiCreateEvaluator,\n getEvaluatorType,\n} from \"../langwatch-api-evaluators.js\";\n\n/**\n * Handles the platform_create_evaluator MCP tool invocation.\n *\n * Creates a new evaluator in the LangWatch project and returns a\n * confirmation with the created evaluator's details.\n */\nexport async function handleCreateEvaluator(params: {\n name: string;\n config: Record<string, unknown>;\n}): Promise<string> {\n const result = await apiCreateEvaluator(params);\n\n const evaluatorType = getEvaluatorType(result);\n\n const lines: string[] = [];\n lines.push(\"Evaluator created successfully!\\n\");\n lines.push(`**ID**: ${result.id}`);\n if (result.slug) lines.push(`**Slug**: ${result.slug}`);\n lines.push(`**Name**: ${result.name}`);\n if (evaluatorType) lines.push(`**Evaluator Type**: ${evaluatorType}`);\n lines.push(`**Kind**: ${result.type}`);\n\n if (Array.isArray(result.fields) && result.fields.length > 0) {\n lines.push(`**Input Fields**: ${result.fields.map((f) => f.identifier).join(\", \")}`);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;AAWA,eAAsB,sBAAsB,QAGxB;AAClB,QAAM,SAAS,MAAM,gBAAmB,MAAM;AAE9C,QAAM,gBAAgB,iBAAiB,MAAM;AAE7C,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,mCAAmC;AAC9C,QAAM,KAAK,WAAW,OAAO,EAAE,EAAE;AACjC,MAAI,OAAO,KAAM,OAAM,KAAK,aAAa,OAAO,IAAI,EAAE;AACtD,QAAM,KAAK,aAAa,OAAO,IAAI,EAAE;AACrC,MAAI,cAAe,OAAM,KAAK,uBAAuB,aAAa,EAAE;AACpE,QAAM,KAAK,aAAa,OAAO,IAAI,EAAE;AAErC,MAAI,MAAM,QAAQ,OAAO,MAAM,KAAK,OAAO,OAAO,SAAS,GAAG;AAC5D,UAAM,KAAK,qBAAqB,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EACrF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-prompt.ts"],"sourcesContent":["import { createPrompt as apiCreatePrompt } from \"../langwatch-api.js\";\n\nconst HANDLE_PATTERN = /^[a-z0-9_-]+(?:\\/[a-z0-9_-]+)?$/;\n\n/**\n * Converts a human-readable name into a URL-friendly handle.\n *\n * Lowercases the input, replaces non-alphanumeric runs with hyphens,\n * and strips leading/trailing hyphens. May return an empty string\n * for inputs with no alphanumeric characters — callers must validate.\n */\nfunction toHandle(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\n/**\n * Handles the platform_create_prompt MCP tool invocation.\n *\n * Creates a new prompt in the LangWatch project and returns a\n * confirmation with the created prompt's details.\n */\nexport async function handleCreatePrompt(params: {\n name: string;\n handle?: string;\n messages: Array<{ role: string; content: string }>;\n model: string;\n tags?: string[];\n}): Promise<string> {\n const handle = params.handle?.trim() || toHandle(params.name);\n if (!handle || !HANDLE_PATTERN.test(handle)) {\n throw new Error(\n `Invalid prompt handle \"${handle || \"\"}\". Handle must match ${HANDLE_PATTERN}. Provide a valid \\`handle\\` explicitly.`\n );\n }\n\n const result = await apiCreatePrompt({\n handle,\n messages: params.messages,\n model: params.model,\n ...(params.tags ? { tags: params.tags } : {}),\n });\n\n const lines: string[] = [];\n lines.push(\"Prompt created successfully!\\n\");\n if (result.id) lines.push(`**ID**: ${result.id}`);\n if (result.handle) lines.push(`**Handle**: ${result.handle}`);\n lines.push(`**Name**: ${result.name || params.name}`);\n lines.push(`**Model**: ${params.model}`);\n if (result.latestVersionNumber != null)\n lines.push(`**Version**: v${result.latestVersionNumber}`);\n if (params.tags && params.tags.length > 0)\n lines.push(`**Tags**: ${params.tags.join(\", \")}`);\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;AAEA,IAAM,iBAAiB;AASvB,SAAS,SAAS,MAAsB;AACtC,SAAO,KACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE;AACzB;AAQA,eAAsB,mBAAmB,QAMrB;AAClB,QAAM,SAAS,OAAO,QAAQ,KAAK,KAAK,SAAS,OAAO,IAAI;AAC5D,MAAI,CAAC,UAAU,CAAC,eAAe,KAAK,MAAM,GAAG;AAC3C,UAAM,IAAI;AAAA,MACR,0BAA0B,UAAU,EAAE,wBAAwB,cAAc;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,aAAgB;AAAA,IACnC;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,GAAI,OAAO,OAAO,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,EAC7C,CAAC;AAED,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,gCAAgC;AAC3C,MAAI,OAAO,GAAI,OAAM,KAAK,WAAW,OAAO,EAAE,EAAE;AAChD,MAAI,OAAO,OAAQ,OAAM,KAAK,eAAe,OAAO,MAAM,EAAE;AAC5D,QAAM,KAAK,aAAa,OAAO,QAAQ,OAAO,IAAI,EAAE;AACpD,QAAM,KAAK,cAAc,OAAO,KAAK,EAAE;AACvC,MAAI,OAAO,uBAAuB;AAChC,UAAM,KAAK,iBAAiB,OAAO,mBAAmB,EAAE;AAC1D,MAAI,OAAO,QAAQ,OAAO,KAAK,SAAS;AACtC,UAAM,KAAK,aAAa,OAAO,KAAK,KAAK,IAAI,CAAC,EAAE;AAElD,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-prompt-tag.ts"],"sourcesContent":["import { createPromptTag as apiCreatePromptTag } from \"../langwatch-api.js\";\n\nexport async function handleCreatePromptTag(params: {\n name: string;\n}): Promise<string> {\n await apiCreatePromptTag(params.name);\n\n const lines: string[] = [];\n lines.push(\"Tag created successfully!\\n\");\n lines.push(`**Name**: ${params.name}`);\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;AAEA,eAAsB,sBAAsB,QAExB;AAClB,QAAM,gBAAmB,OAAO,IAAI;AAEpC,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,6BAA6B;AACxC,QAAM,KAAK,aAAa,OAAO,IAAI,EAAE;AACrC,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-scenario.ts"],"sourcesContent":["import { createScenario as apiCreateScenario } from \"../langwatch-api-scenarios.js\";\n\n/**\n * Handles the platform_create_scenario MCP tool invocation.\n *\n * Creates a new scenario in the LangWatch project and returns a\n * confirmation with the created scenario's details.\n */\nexport async function handleCreateScenario(params: {\n name: string;\n situation: string;\n criteria?: string[];\n labels?: string[];\n}): Promise<string> {\n const result = await apiCreateScenario(params);\n\n const lines: string[] = [];\n lines.push(\"Scenario created successfully!\\n\");\n lines.push(`**ID**: ${result.id}`);\n lines.push(`**Name**: ${result.name}`);\n lines.push(`**Situation**: ${result.situation}`);\n if (Array.isArray(result.criteria) && result.criteria.length > 0) {\n lines.push(`**Criteria**: ${result.criteria.length} criteria`);\n }\n if (Array.isArray(result.labels) && result.labels.length > 0) {\n lines.push(`**Labels**: ${result.labels.join(\", \")}`);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAQA,eAAsB,qBAAqB,QAKvB;AAClB,QAAM,SAAS,MAAM,eAAkB,MAAM;AAE7C,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,kCAAkC;AAC7C,QAAM,KAAK,WAAW,OAAO,EAAE,EAAE;AACjC,QAAM,KAAK,aAAa,OAAO,IAAI,EAAE;AACrC,QAAM,KAAK,kBAAkB,OAAO,SAAS,EAAE;AAC/C,MAAI,MAAM,QAAQ,OAAO,QAAQ,KAAK,OAAO,SAAS,SAAS,GAAG;AAChE,UAAM,KAAK,iBAAiB,OAAO,SAAS,MAAM,WAAW;AAAA,EAC/D;AACA,MAAI,MAAM,QAAQ,OAAO,MAAM,KAAK,OAAO,OAAO,SAAS,GAAG;AAC5D,UAAM,KAAK,eAAe,OAAO,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,EACtD;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/create-suite.ts"],"sourcesContent":["import { createSuite as apiCreateSuite } from \"../langwatch-api-suites.js\";\nimport type { SuiteTarget } from \"../langwatch-api-suites.js\";\n\n/**\n * Handles the platform_create_suite MCP tool invocation.\n */\nexport async function handleCreateSuite(params: {\n name: string;\n description?: string;\n scenarioIds: string[];\n targets: string;\n repeatCount?: number;\n labels?: string[];\n}): Promise<string> {\n let parsedTargets: SuiteTarget[];\n try {\n parsedTargets = JSON.parse(params.targets) as SuiteTarget[];\n } catch {\n return \"Error: `targets` must be a valid JSON array of objects with `type` and `referenceId` fields.\\n\\nExample: [{\\\"type\\\": \\\"http\\\", \\\"referenceId\\\": \\\"agent_abc123\\\"}]\";\n }\n\n const suite = await apiCreateSuite({\n name: params.name,\n description: params.description,\n scenarioIds: params.scenarioIds,\n targets: parsedTargets,\n repeatCount: params.repeatCount,\n labels: params.labels,\n });\n\n return [\n `Suite \"${suite.name}\" created successfully.`,\n \"\",\n `**ID**: ${suite.id}`,\n `**Slug**: ${suite.slug}`,\n `**Scenarios**: ${suite.scenarioIds.length}`,\n `**Targets**: ${suite.targets.length}`,\n `**Repeat**: ${suite.repeatCount}x`,\n \"\",\n `> Use \\`platform_run_suite\\` with ID \\`${suite.id}\\` to trigger execution.`,\n ].join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAMA,eAAsB,kBAAkB,QAOpB;AAClB,MAAI;AACJ,MAAI;AACF,oBAAgB,KAAK,MAAM,OAAO,OAAO;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAM,YAAe;AAAA,IACjC,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,SAAS;AAAA,IACT,aAAa,OAAO;AAAA,IACpB,QAAQ,OAAO;AAAA,EACjB,CAAC;AAED,SAAO;AAAA,IACL,UAAU,MAAM,IAAI;AAAA,IACpB;AAAA,IACA,WAAW,MAAM,EAAE;AAAA,IACnB,aAAa,MAAM,IAAI;AAAA,IACvB,kBAAkB,MAAM,YAAY,MAAM;AAAA,IAC1C,gBAAgB,MAAM,QAAQ,MAAM;AAAA,IACpC,eAAe,MAAM,WAAW;AAAA,IAChC;AAAA,IACA,0CAA0C,MAAM,EAAE;AAAA,EACpD,EAAE,KAAK,IAAI;AACb;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/delete-agent.ts"],"sourcesContent":["import { deleteAgent as apiDeleteAgent } from \"../langwatch-api-agents.js\";\n\nexport async function handleDeleteAgent(params: { id: string }): Promise<string> {\n const result = await apiDeleteAgent(params.id);\n\n return `Agent archived successfully!\\n\\n**Name**: ${result.name}\\n**ID**: ${result.id}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,kBAAkB,QAAyC;AAC/E,QAAM,SAAS,MAAM,YAAe,OAAO,EAAE;AAE7C,SAAO;AAAA;AAAA,YAA6C,OAAO,IAAI;AAAA,UAAa,OAAO,EAAE;AACvF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/delete-annotation.ts"],"sourcesContent":["import { deleteAnnotation as apiDeleteAnnotation } from \"../langwatch-api-annotations.js\";\n\nexport async function handleDeleteAnnotation(params: { id: string }): Promise<string> {\n await apiDeleteAnnotation(params.id);\n\n return `Annotation deleted successfully!\\n\\n**ID**: ${params.id}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,uBAAuB,QAAyC;AACpF,QAAM,iBAAoB,OAAO,EAAE;AAEnC,SAAO;AAAA;AAAA,UAA+C,OAAO,EAAE;AACjE;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/delete-dashboard.ts"],"sourcesContent":["import { deleteDashboard as apiDeleteDashboard } from \"../langwatch-api-dashboards.js\";\n\nexport async function handleDeleteDashboard(params: { id: string }): Promise<string> {\n const result = await apiDeleteDashboard(params.id);\n\n return `Dashboard deleted successfully!\\n\\n**Name**: ${result.name}\\n**ID**: ${result.id}`;\n}\n"],"mappings":";;;;;;;AAEA,eAAsB,sBAAsB,QAAyC;AACnF,QAAM,SAAS,MAAM,gBAAmB,OAAO,EAAE;AAEjD,SAAO;AAAA;AAAA,YAAgD,OAAO,IAAI;AAAA,UAAa,OAAO,EAAE;AAC1F;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/delete-dataset.ts"],"sourcesContent":["import { deleteDataset as apiDeleteDataset } from \"../langwatch-api-datasets.js\";\n\n/**\n * Handles the platform_delete_dataset MCP tool invocation.\n *\n * Archives (soft-deletes) a dataset and returns confirmation.\n */\nexport async function handleDeleteDataset(params: {\n slugOrId: string;\n}): Promise<string> {\n await apiDeleteDataset(params.slugOrId);\n\n const lines: string[] = [];\n lines.push(\"Dataset deleted successfully!\\n\");\n lines.push(\n \"> The dataset has been archived and will no longer appear in listings.\",\n );\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAOA,eAAsB,oBAAoB,QAEtB;AAClB,QAAM,cAAiB,OAAO,QAAQ;AAEtC,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,iCAAiC;AAC5C,QAAM;AAAA,IACJ;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/delete-dataset-records.ts"],"sourcesContent":["import { deleteDatasetRecords as apiDeleteDatasetRecords } from \"../langwatch-api-datasets.js\";\n\n/**\n * Handles the platform_delete_dataset_records MCP tool invocation.\n *\n * Deletes records from a dataset by IDs and returns confirmation\n * with the count of records deleted.\n */\nexport async function handleDeleteDatasetRecords(params: {\n slugOrId: string;\n recordIds: string[];\n}): Promise<string> {\n const result = await apiDeleteDatasetRecords(params);\n\n const lines: string[] = [];\n lines.push(`${result.deletedCount} record(s) deleted successfully!\\n`);\n lines.push(\n \"> Use `platform_get_dataset` to see the updated dataset.\",\n );\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAQA,eAAsB,2BAA2B,QAG7B;AAClB,QAAM,SAAS,MAAM,qBAAwB,MAAM;AAEnD,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,GAAG,OAAO,YAAY;AAAA,CAAoC;AACrE,QAAM;AAAA,IACJ;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|