@langwatch/mcp-server 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/.python-version +1 -0
  2. package/CHANGELOG.md +110 -0
  3. package/CONTRIBUTING.md +1 -1
  4. package/README.md +86 -4
  5. package/dist/{archive-project-MK3673A7.js → archive-project-W3IKI7UL.js} +5 -5
  6. package/dist/archive-run-plan-474OKHHU.js +16 -0
  7. package/dist/{archive-scenario-KATSXRIN.js → archive-scenario-V5UNYK26.js} +5 -5
  8. package/dist/archive-test-suite-O7FLDMXK.js +16 -0
  9. package/dist/{assign-prompt-tag-E3C5W6PI.js → assign-prompt-tag-Q46WRB6P.js} +4 -4
  10. package/dist/chunk-56OGTS24.js +44 -0
  11. package/dist/chunk-6DJDEXET.js +63 -0
  12. package/dist/chunk-7E4FZIYJ.js +15 -0
  13. package/dist/{chunk-J45SVWPR.js → chunk-AN4OUA4D.js} +2 -2
  14. package/dist/chunk-CKNAH5TG.js +74 -0
  15. package/dist/{chunk-CE6QMZOP.js → chunk-EYXMLE5X.js} +86 -11
  16. package/dist/{chunk-XY4STOBE.js → chunk-G4ZAZTZW.js} +2 -2
  17. package/dist/{chunk-5UWY24RP.js → chunk-GELJ2MQR.js} +12 -3
  18. package/dist/chunk-HV4DWKBI.js +46 -0
  19. package/dist/chunk-JR6DJZOU.js +49 -0
  20. package/dist/{chunk-DAIQKS27.js → chunk-JTQJRNFJ.js} +2 -2
  21. package/dist/{chunk-WWMDHZZV.js → chunk-K37ZNPXK.js} +2 -2
  22. package/dist/{chunk-EU22L52K.js → chunk-OJLYYJWI.js} +2 -2
  23. package/dist/{chunk-Y3HDZ6OW.js → chunk-QAMP3CGR.js} +2 -2
  24. package/dist/{chunk-VYPSKRPN.js → chunk-QRO35SOM.js} +347 -146
  25. package/dist/{chunk-O3LWVN67.js → chunk-RVAE2MEA.js} +2 -2
  26. package/dist/{chunk-UXXA4D6K.js → chunk-S4GVX36W.js} +2 -2
  27. package/dist/{chunk-BJ7B4R26.js → chunk-SAS5OB7F.js} +18 -2
  28. package/dist/{chunk-RYRB2YVJ.js → chunk-SR6QPRIE.js} +2 -2
  29. package/dist/chunk-UF6XIGYR.js +58 -0
  30. package/dist/{chunk-T7WJVS2N.js → chunk-UFOYFYI7.js} +2 -2
  31. package/dist/chunk-UJPXFA26.js +267 -0
  32. package/dist/{chunk-KOO5733S.js → chunk-WT4PO4A3.js} +8 -2
  33. package/dist/config.js +2 -2
  34. package/dist/{create-agent-7W57J7MT.js → create-agent-JFJ2K6X3.js} +5 -5
  35. package/dist/{create-annotation-W2XELBCQ.js → create-annotation-EUXXQ6NS.js} +5 -5
  36. package/dist/{create-api-key-MKRXKFJM.js → create-api-key-BGBB76JX.js} +5 -5
  37. package/dist/{create-dashboard-QGL7IODC.js → create-dashboard-Z76AIPLS.js} +5 -5
  38. package/dist/{create-dataset-3PH7A4HG.js → create-dataset-FD5VAXU4.js} +5 -5
  39. package/dist/{create-dataset-records-4DZS3VRL.js → create-dataset-records-WQUXXOHI.js} +5 -5
  40. package/dist/{create-evaluator-YWH6NC4M.js → create-evaluator-6NV33Z52.js} +5 -5
  41. package/dist/create-mcp-server.js +9 -4
  42. package/dist/{create-project-BOBQ32C5.js → create-project-ZQ7TFIO2.js} +5 -5
  43. package/dist/{create-prompt-FLCFGITE.js → create-prompt-BS6QRCUU.js} +4 -4
  44. package/dist/{create-prompt-tag-EMPNIKEA.js → create-prompt-tag-FCQ5ELSQ.js} +4 -4
  45. package/dist/{create-scenario-BSBIHUL6.js → create-scenario-DRPTPXU3.js} +12 -5
  46. package/dist/create-test-suite-ZIZCCFJ4.js +37 -0
  47. package/dist/{delete-agent-7MSYNY5E.js → delete-agent-SA4JMUZF.js} +5 -5
  48. package/dist/{delete-annotation-ZT5IGN24.js → delete-annotation-X3KKK7QY.js} +5 -5
  49. package/dist/{delete-dashboard-BTIY5S3L.js → delete-dashboard-LYMRPF27.js} +5 -5
  50. package/dist/{delete-dataset-U45HQHPR.js → delete-dataset-W6EZ44HY.js} +5 -5
  51. package/dist/{delete-dataset-records-R43IMAWB.js → delete-dataset-records-7CNOTALB.js} +5 -5
  52. package/dist/{delete-evaluator-U6JMQ6C7.js → delete-evaluator-RKYC4TNB.js} +5 -5
  53. package/dist/{delete-prompt-tag-4EV4TDHB.js → delete-prompt-tag-QB3OCZUV.js} +4 -4
  54. package/dist/{delete-workflow-5QYALXEL.js → delete-workflow-NG2VXYYM.js} +5 -5
  55. package/dist/{discover-evaluator-schema-MRGHVNTT.js → discover-evaluator-schema-ESSHQGPY.js} +58 -321
  56. package/dist/{discover-scenario-schema-UPBTCWPG.js → discover-scenario-schema-W7KBXA4J.js} +54 -2
  57. package/dist/{discover-schema-ICGXPHUW.js → discover-schema-L6QDPON3.js} +2 -2
  58. package/dist/get-agent-7THF7HCU.js +66 -0
  59. package/dist/{get-analytics-PVERWOA5.js → get-analytics-R6AZD3AW.js} +4 -4
  60. package/dist/{get-dashboard-ZZPC3WMD.js → get-dashboard-P4WWVHFU.js} +5 -5
  61. package/dist/{get-dataset-25TB2LQH.js → get-dataset-AKTYSQDI.js} +5 -5
  62. package/dist/{get-evaluator-3FTRQKEC.js → get-evaluator-RZ44UIN6.js} +5 -5
  63. package/dist/{get-project-5OAXYC57.js → get-project-QSQEAB33.js} +5 -5
  64. package/dist/get-prompt-GVKXF5NL.js +100 -0
  65. package/dist/get-run-plan-NY7J5GRE.js +61 -0
  66. package/dist/{get-scenario-DSSTR6FI.js → get-scenario-Q3LLQE4T.js} +9 -5
  67. package/dist/{get-simulation-run-RQPMS2MC.js → get-simulation-run-WINEYDMK.js} +14 -5
  68. package/dist/get-test-suite-4HKA7OKS.js +49 -0
  69. package/dist/{get-trace-O5VT3NAC.js → get-trace-RCUV7N4O.js} +4 -4
  70. package/dist/{get-workflow-3EZDOEIF.js → get-workflow-EEOC7Y45.js} +5 -5
  71. package/dist/http-security-EU3CHTY7.js +26 -0
  72. package/dist/{http-server-2ACJ3CXW.js → http-server-WCDUARTH.js} +1038 -693
  73. package/dist/index.js +6437 -4020
  74. package/dist/{langwatch-api-annotations-E65MI3WZ.js → langwatch-api-annotations-6DHVZWUK.js} +5 -5
  75. package/dist/{langwatch-api-dashboards-QCDECRCY.js → langwatch-api-dashboards-2KJL2M42.js} +5 -5
  76. package/dist/{langwatch-api-monitors-UIO2KTDV.js → langwatch-api-monitors-6ISFJ7WX.js} +4 -4
  77. package/dist/{langwatch-api-secrets-4T2EKSJ7.js → langwatch-api-secrets-OEBD6GBU.js} +4 -4
  78. package/dist/{langwatch-api-triggers-MPOEKPUY.js → langwatch-api-triggers-5E6DDGX6.js} +4 -4
  79. package/dist/langwatch-api-workflows-6UJL5U4Z.js +16 -0
  80. package/dist/list-agents-AMVDQPQL.js +43 -0
  81. package/dist/{list-annotations-CGX5BT7E.js → list-annotations-6PR5NLIC.js} +5 -5
  82. package/dist/{list-api-keys-JLWJPFRX.js → list-api-keys-GVPNBIHQ.js} +5 -5
  83. package/dist/{list-dashboards-RNIWX3TX.js → list-dashboards-Z3BZKDGF.js} +5 -5
  84. package/dist/{list-dataset-records-B5MHZR66.js → list-dataset-records-O67HZ35Y.js} +5 -5
  85. package/dist/{list-datasets-BVCAMQCP.js → list-datasets-WXZL6UMP.js} +5 -5
  86. package/dist/{list-evaluators-65FBTL2U.js → list-evaluators-PAX72WCN.js} +5 -5
  87. package/dist/{list-model-providers-GRK3I3VV.js → list-model-providers-VVLZMLCX.js} +5 -5
  88. package/dist/{list-projects-JLMBFMW3.js → list-projects-AQVI6SUK.js} +5 -5
  89. package/dist/{list-prompt-tags-UHNWDGQI.js → list-prompt-tags-WZFBJOHG.js} +4 -4
  90. package/dist/{list-prompts-7254B3U7.js → list-prompts-BQOHRHYT.js} +4 -4
  91. package/dist/list-run-plans-UBAU2DGH.js +46 -0
  92. package/dist/{list-scenarios-46YNICKM.js → list-scenarios-MS4IUIVM.js} +10 -7
  93. package/dist/{list-simulation-runs-LGNEFNPN.js → list-simulation-runs-D6YF4ZOU.js} +13 -7
  94. package/dist/list-test-suites-L7R2O6DR.js +35 -0
  95. package/dist/{list-workflows-MLQDM6CP.js → list-workflows-6MV4XJHF.js} +5 -5
  96. package/dist/{rename-prompt-tag-RHQMNEQL.js → rename-prompt-tag-K5LQ4CY6.js} +4 -4
  97. package/dist/rename-test-suite-NTYHAO5X.js +21 -0
  98. package/dist/report-issue-RHZZ33IS.js +885 -0
  99. package/dist/rerun-run-plan-MUDWJBE4.js +22 -0
  100. package/dist/{revoke-api-key-3Y35EMBT.js → revoke-api-key-6LAZ3QZZ.js} +5 -5
  101. package/dist/run-agent-CAGWGTYT.js +72 -0
  102. package/dist/run-plan-T4ZYOZGA.js +39 -0
  103. package/dist/run-test-suite-L4MZ7G4D.js +26 -0
  104. package/dist/{run-workflow-5LVBZYLS.js → run-workflow-DFIS23AP.js} +5 -5
  105. package/dist/{search-traces-U4HLOCZ2.js → search-traces-4XTJYXIK.js} +4 -4
  106. package/dist/{set-model-provider-V3M5CDIY.js → set-model-provider-XRNMFOVR.js} +5 -5
  107. package/dist/{update-agent-47RZIHS7.js → update-agent-DUWNYBNA.js} +5 -5
  108. package/dist/{update-dataset-G6QJJGS5.js → update-dataset-YSOMDCOB.js} +5 -5
  109. package/dist/{update-dataset-record-RMWLSWCS.js → update-dataset-record-DEA2ITYR.js} +5 -5
  110. package/dist/{update-evaluator-SFRRI5Q3.js → update-evaluator-NH7Q5GWV.js} +5 -5
  111. package/dist/{update-project-PI5DWBVK.js → update-project-Q26FBSYH.js} +5 -5
  112. package/dist/update-prompt-ZQQ2C3KU.js +143 -0
  113. package/dist/{update-scenario-G3IU2UIB.js → update-scenario-WUX34JAR.js} +12 -5
  114. package/package.json +8 -9
  115. package/pyproject.toml +5 -5
  116. package/src/__tests__/agent-tools.unit.test.ts +257 -0
  117. package/src/__tests__/all-tools.integration.test.ts +321 -75
  118. package/src/__tests__/config.unit.test.ts +33 -0
  119. package/src/__tests__/docker.integration.test.ts +91 -7
  120. package/src/__tests__/documentation-fetch-security.integration.test.ts +8 -2
  121. package/src/__tests__/feature-map-tool-drift.unit.test.ts +93 -0
  122. package/src/__tests__/http-security-origin.unit.test.ts +97 -0
  123. package/src/__tests__/http-security-sessions.unit.test.ts +209 -0
  124. package/src/__tests__/http-security-verifier.unit.test.ts +248 -0
  125. package/src/__tests__/http-server-allocation.integration.test.ts +279 -0
  126. package/src/__tests__/http-server-origin.integration.test.ts +169 -0
  127. package/src/__tests__/http-server-session-auth.integration.test.ts +341 -0
  128. package/src/__tests__/http-transport.integration.test.ts +85 -87
  129. package/src/__tests__/integration.integration.test.ts +7 -11
  130. package/src/__tests__/prompt-response-types.unit.test.ts +51 -0
  131. package/src/__tests__/prompts.integration.test.ts +736 -0
  132. package/src/__tests__/run-plan-tools.unit.test.ts +565 -0
  133. package/src/__tests__/scenario-tools.unit.test.ts +19 -0
  134. package/src/__tests__/simulation-run-tools.unit.test.ts +116 -0
  135. package/src/__tests__/support/http-server-harness.ts +138 -0
  136. package/src/__tests__/test-suite-tools.unit.test.ts +615 -0
  137. package/src/__tests__/{tools.unit.test.ts → tools.integration.test.ts} +31 -59
  138. package/src/config.ts +17 -2
  139. package/src/create-mcp-server.ts +334 -55
  140. package/src/http-security.ts +492 -0
  141. package/src/http-server.ts +536 -152
  142. package/src/index.ts +49 -2
  143. package/src/langwatch-api-agents.ts +196 -12
  144. package/src/langwatch-api-run-plans.ts +157 -0
  145. package/src/langwatch-api-scenarios.ts +9 -0
  146. package/src/langwatch-api-simulation-runs.ts +5 -0
  147. package/src/langwatch-api-test-suites.ts +135 -0
  148. package/src/langwatch-api.ts +62 -12
  149. package/src/schemas/index.ts +5 -0
  150. package/src/schemas/run-plan.ts +92 -0
  151. package/src/schemas/suite-fields.ts +149 -0
  152. package/src/tools/archive-run-plan.ts +12 -0
  153. package/src/tools/archive-test-suite.ts +12 -0
  154. package/src/tools/create-scenario.ts +8 -0
  155. package/src/tools/create-test-suite.ts +43 -0
  156. package/src/tools/discover-evaluator-schema.ts +2 -2
  157. package/src/tools/discover-scenario-schema.ts +54 -0
  158. package/src/tools/format-run-plan.ts +68 -0
  159. package/src/tools/format-scenario.ts +14 -0
  160. package/src/tools/format-suite-details.ts +96 -0
  161. package/src/tools/get-agent.ts +45 -3
  162. package/src/tools/get-prompt.ts +108 -24
  163. package/src/tools/get-run-plan.ts +62 -0
  164. package/src/tools/get-scenario.ts +3 -0
  165. package/src/tools/get-simulation-run.ts +9 -0
  166. package/src/tools/get-test-suite.ts +49 -0
  167. package/src/tools/list-agents.ts +20 -3
  168. package/src/tools/list-run-plans.ts +47 -0
  169. package/src/tools/list-scenarios.ts +12 -2
  170. package/src/tools/list-simulation-runs.ts +6 -2
  171. package/src/tools/list-test-suites.ts +35 -0
  172. package/src/tools/rename-test-suite.ts +18 -0
  173. package/src/tools/rerun-run-plan.ts +21 -0
  174. package/src/tools/run-agent.ts +54 -6
  175. package/src/tools/run-plan.ts +49 -0
  176. package/src/tools/run-test-suite.ts +30 -0
  177. package/src/tools/test-agent.ts +18 -0
  178. package/src/tools/update-prompt.ts +195 -10
  179. package/src/tools/update-scenario.ts +8 -0
  180. package/src/tools/update-test-suite.ts +45 -0
  181. package/tsconfig.json +7 -2
  182. package/uv.lock +418 -298
  183. package/dist/archive-suite-C3KX6IIZ.js +0 -16
  184. package/dist/chunk-WDH5P5RF.js +0 -48
  185. package/dist/create-suite-TWF6BBR4.js +0 -39
  186. package/dist/get-agent-7QJVPH72.js +0 -29
  187. package/dist/get-prompt-I753LZKZ.js +0 -46
  188. package/dist/get-suite-GTOCY5PL.js +0 -45
  189. package/dist/langwatch-api-workflows-5HRZ7HR4.js +0 -16
  190. package/dist/list-agents-TIJTP566.js +0 -33
  191. package/dist/list-suites-5VK4HXEK.js +0 -43
  192. package/dist/report-issue-DXJ6TPTC.js +0 -412
  193. package/dist/run-agent-RBSIFKRT.js +0 -37
  194. package/dist/run-suite-K3DNQ3SE.js +0 -30
  195. package/dist/update-prompt-RQFTEO7Y.js +0 -25
  196. package/dist/update-suite-TRGGLNR7.js +0 -40
  197. package/pnpm-workspace.yaml +0 -34
  198. package/src/langwatch-api-suites.ts +0 -118
  199. package/src/tools/archive-suite.ts +0 -12
  200. package/src/tools/create-suite.ts +0 -42
  201. package/src/tools/get-suite.ts +0 -47
  202. package/src/tools/list-suites.ts +0 -43
  203. package/src/tools/run-suite.ts +0 -28
  204. package/src/tools/update-suite.ts +0 -44
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
+
5
+ // src/langwatch-api-agents.ts
6
+ import { z } from "zod";
4
7
 
5
8
  // src/public-http-request.ts
6
9
  import { lookup as dnsLookup } from "dns/promises";
@@ -8,7 +11,7 @@ import { request as httpRequest } from "http";
8
11
  import { request as httpsRequest } from "https";
9
12
  import { isIP } from "net";
10
13
 
11
- // ../langwatch/packages/ssrf/src/index.ts
14
+ // ../../packages/ssrf/src/index.ts
12
15
  function ipv4ToBytes(input) {
13
16
  const parts = input.split(".");
14
17
  if (parts.length !== 4) return null;
@@ -365,33 +368,104 @@ async function requestPublicJson(input, options = {}, redirectCount = 0) {
365
368
  }
366
369
 
367
370
  // src/langwatch-api-agents.ts
371
+ var agentCallParamsSchema = z.record(
372
+ z.string(),
373
+ z.union([z.string(), z.number(), z.boolean()])
374
+ );
368
375
  async function listAgents(params) {
369
376
  const query = new URLSearchParams();
370
377
  if (params?.page) query.set("page", String(params.page));
371
378
  if (params?.limit) query.set("limit", String(params.limit));
372
379
  const qs = query.toString() ? `?${query}` : "";
373
- return makeRequest("GET", `/api/agents${qs}`);
380
+ return makeRequest("GET", `/api/v1/agents${qs}`);
374
381
  }
375
382
  async function getAgent(id) {
376
383
  return makeRequest(
377
384
  "GET",
378
- `/api/agents/${encodeURIComponent(id)}`
385
+ `/api/v1/agents/${encodeURIComponent(id)}`
379
386
  );
380
387
  }
381
388
  async function createAgent(data) {
382
- return makeRequest("POST", "/api/agents", data);
389
+ return makeRequest("POST", "/api/v1/agents", data);
383
390
  }
384
391
  async function updateAgent(params) {
385
392
  const { id, ...data } = params;
386
393
  return makeRequest(
387
394
  "PATCH",
388
- `/api/agents/${encodeURIComponent(id)}`,
395
+ `/api/v1/agents/${encodeURIComponent(id)}`,
389
396
  data
390
397
  );
391
398
  }
392
- async function runAgent(id, input) {
399
+ async function callAgent({
400
+ id,
401
+ body
402
+ }) {
403
+ return makeRequest(
404
+ "POST",
405
+ `/api/v1/agents/${encodeURIComponent(id)}/call`,
406
+ body
407
+ );
408
+ }
409
+ async function testAgent(id) {
410
+ return makeRequest(
411
+ "POST",
412
+ `/api/v1/agents/${encodeURIComponent(id)}/test`,
413
+ {}
414
+ );
415
+ }
416
+ var isMessageList = (value) => Array.isArray(value) && value.every(
417
+ (item) => typeof item === "object" && item !== null && typeof item.role === "string"
418
+ );
419
+ function buildRelayBody({
420
+ input,
421
+ message,
422
+ parameters,
423
+ threadId
424
+ }) {
425
+ let messages;
426
+ if (message !== void 0) {
427
+ messages = [{ role: "user", content: message }];
428
+ } else if (isMessageList(input.messages)) {
429
+ messages = input.messages;
430
+ } else {
431
+ return "a connected agent takes a conversation: give `message`, or `input` with a `messages` list.";
432
+ }
433
+ const body = { messages };
434
+ const thread = threadId ?? (typeof input.threadId === "string" ? input.threadId : void 0);
435
+ if (thread) body.threadId = thread;
436
+ if (isMessageList(input.newMessages)) body.newMessages = input.newMessages;
437
+ if (input.session !== void 0) body.session = input.session;
438
+ let inputParams;
439
+ if (input.params !== void 0) {
440
+ const parsed = agentCallParamsSchema.safeParse(input.params);
441
+ if (!parsed.success) {
442
+ return "`params` takes one flat object of string, number or boolean values. Nested objects and arrays are not run parameters.";
443
+ }
444
+ inputParams = parsed.data;
445
+ }
446
+ if (inputParams || parameters) body.params = { ...inputParams ?? {}, ...parameters ?? {} };
447
+ return body;
448
+ }
449
+ async function runAgent({
450
+ id,
451
+ input,
452
+ message,
453
+ parameters,
454
+ threadId
455
+ }) {
393
456
  const agent = await getAgent(id);
394
457
  const config = agent.config ?? {};
458
+ if (agent.type === "connected") {
459
+ const body = buildRelayBody({ input: input ?? {}, message, parameters, threadId });
460
+ if (typeof body === "string") throw new Error(body);
461
+ if (agent.status === "offline") {
462
+ throw new Error(
463
+ `Agent "${agent.name}" is offline. Start the process that calls connectAgent (or connect_agent) and try again.`
464
+ );
465
+ }
466
+ const result2 = await callAgent({ id: agent.id, body });
467
+ return { agentType: "connected", result: result2 };
468
+ }
395
469
  if (agent.type === "http") {
396
470
  const url = config.url;
397
471
  if (!url) {
@@ -407,17 +481,17 @@ async function runAgent(id, input) {
407
481
  const workflowId = config.workflowId;
408
482
  if (!workflowId) {
409
483
  throw new Error(
410
- `Agent "${agent.name}" (type: ${agent.type}) cannot be executed directly. Only HTTP agents and workflow-linked agents can be run.`
484
+ `Agent "${agent.name}" (type: ${agent.type}) cannot be executed directly. Only connected agents, HTTP agents and workflow-linked agents can be run.`
411
485
  );
412
486
  }
413
- const { runWorkflow } = await import("./langwatch-api-workflows-5HRZ7HR4.js");
487
+ const { runWorkflow } = await import("./langwatch-api-workflows-6UJL5U4Z.js");
414
488
  const result = await runWorkflow(workflowId, input);
415
489
  return { agentType: agent.type, result };
416
490
  }
417
491
  async function deleteAgent(id) {
418
492
  return makeRequest(
419
493
  "DELETE",
420
- `/api/agents/${encodeURIComponent(id)}`
494
+ `/api/v1/agents/${encodeURIComponent(id)}`
421
495
  );
422
496
  }
423
497
 
@@ -426,7 +500,8 @@ export {
426
500
  getAgent,
427
501
  createAgent,
428
502
  updateAgent,
503
+ testAgent,
429
504
  runAgent,
430
505
  deleteAgent
431
506
  };
432
- //# sourceMappingURL=chunk-CE6QMZOP.js.map
507
+ //# sourceMappingURL=chunk-EYXMLE5X.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
4
 
5
5
  // src/langwatch-api-projects.ts
6
6
  async function listProjects(params) {
@@ -41,4 +41,4 @@ export {
41
41
  updateProject,
42
42
  archiveProject
43
43
  };
44
- //# sourceMappingURL=chunk-XY4STOBE.js.map
44
+ //# sourceMappingURL=chunk-G4ZAZTZW.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getConfig,
3
3
  requireApiKey
4
- } from "./chunk-KOO5733S.js";
4
+ } from "./chunk-WT4PO4A3.js";
5
5
 
6
6
  // src/langwatch-api.ts
7
7
  var LangWatchApiError = class extends Error {
@@ -37,7 +37,9 @@ function parseErrorBody(responseBody) {
37
37
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
38
38
  return {};
39
39
  }
40
- const body = parsed;
40
+ const envelope = parsed;
41
+ const nested = typeof envelope.error === "object" && envelope.error !== null && !Array.isArray(envelope.error) ? envelope.error : null;
42
+ const body = nested ?? envelope;
41
43
  const code = typeof body.code === "string" ? body.code : typeof body.error === "string" ? body.error : void 0;
42
44
  const message = typeof body.message === "string" ? body.message : void 0;
43
45
  if (code === void 0 && message === void 0) {
@@ -150,6 +152,12 @@ async function getPrompt(idOrHandle, options) {
150
152
  `/api/prompts/${encodeURIComponent(idOrHandle)}${query}`
151
153
  );
152
154
  }
155
+ async function getPromptVersions(idOrHandle) {
156
+ return makeRequest(
157
+ "GET",
158
+ `/api/prompts/${encodeURIComponent(idOrHandle)}/versions`
159
+ );
160
+ }
153
161
  async function createPrompt(data) {
154
162
  return makeRequest(
155
163
  "POST",
@@ -206,6 +214,7 @@ export {
206
214
  getAnalyticsTimeseries,
207
215
  listPrompts,
208
216
  getPrompt,
217
+ getPromptVersions,
209
218
  createPrompt,
210
219
  updatePrompt,
211
220
  assignPromptTag,
@@ -214,4 +223,4 @@ export {
214
223
  renamePromptTag,
215
224
  deletePromptTag
216
225
  };
217
- //# sourceMappingURL=chunk-5UWY24RP.js.map
226
+ //# sourceMappingURL=chunk-GELJ2MQR.js.map
@@ -0,0 +1,46 @@
1
+ // src/schemas/run-plan.ts
2
+ import { z } from "zod";
3
+ var runPlanScopeSchema = z.discriminatedUnion("mode", [
4
+ z.object({ mode: z.literal("all") }).describe("Every non-archived scenario of the project"),
5
+ z.object({
6
+ mode: z.literal("test_suites"),
7
+ testSuiteIds: z.array(z.string()).describe("The test suite IDs whose scenarios to run")
8
+ }).describe("The non-archived scenarios filed in the given test suites"),
9
+ z.object({
10
+ mode: z.literal("labels"),
11
+ labels: z.array(z.string()).describe("The labels to select scenarios by")
12
+ }).describe(
13
+ "The non-archived scenarios carrying at least one of the given labels"
14
+ ),
15
+ z.object({ mode: z.literal("scenarios") }).describe("The scenarios named in scenarioIds, picked by hand")
16
+ ]);
17
+ var runParametersSchema = z.record(
18
+ z.string(),
19
+ z.union([z.string(), z.number(), z.boolean()])
20
+ );
21
+ var runPlanTargetSchema = z.object({
22
+ type: z.enum(["connected", "prompt", "http", "code", "workflow"]).describe(
23
+ "What kind of thing the target is. A connected agent is one that registered itself from code with connectAgent (TypeScript) or connect_agent (Python)."
24
+ ),
25
+ referenceId: z.string().describe(
26
+ "The ID of the prompt, agent or workflow to run against. A connected agent may also be named as <name>@<environment>, for example support-agent@production; the platform resolves it."
27
+ ),
28
+ parameters: runParametersSchema.optional().describe(
29
+ "Parameter values this target alone runs with, by name. They override the run-level parameters for this target. Name the same agent twice with different values here to compare it on two models."
30
+ )
31
+ });
32
+ function toWireTargets(targets) {
33
+ return targets.map((target) => ({
34
+ type: target.type,
35
+ referenceId: target.referenceId,
36
+ ...target.parameters ? { runParameters: target.parameters } : {}
37
+ }));
38
+ }
39
+
40
+ export {
41
+ runPlanScopeSchema,
42
+ runParametersSchema,
43
+ runPlanTargetSchema,
44
+ toWireTargets
45
+ };
46
+ //# sourceMappingURL=chunk-HV4DWKBI.js.map
@@ -0,0 +1,49 @@
1
+ // src/tools/format-run-plan.ts
2
+ function formatRunPlanRun(result) {
3
+ const lines = [];
4
+ lines.push(
5
+ result.created ? `Run plan "${result.planName}" created and started.` : `Run plan "${result.planName}" started with the configuration of this run.`
6
+ );
7
+ lines.push("");
8
+ lines.push(`**Plan**: ${result.planName} (${result.runPlanId})`);
9
+ lines.push(`**Batch Run ID**: ${result.batchRunId}`);
10
+ lines.push(`**Set ID**: ${result.setId}`);
11
+ lines.push(`**Jobs**: ${result.jobCount}`);
12
+ if (result.skippedArchived.scenarios.length > 0) {
13
+ lines.push(
14
+ `**Skipped archived scenarios**: ${result.skippedArchived.scenarios.join(", ")}`
15
+ );
16
+ }
17
+ if (result.skippedArchived.targets.length > 0) {
18
+ lines.push(
19
+ `**Skipped archived targets**: ${result.skippedArchived.targets.join(", ")}`
20
+ );
21
+ }
22
+ lines.push(`**View**: ${result.platformUrl}`);
23
+ lines.push("");
24
+ lines.push(
25
+ "> Use `platform_list_simulation_runs` with the batch run ID to read the results."
26
+ );
27
+ return lines.join("\n");
28
+ }
29
+ function describeRunPlanScope(scope, scenarioIds) {
30
+ if (scope === null) {
31
+ return `hand-picked scenarios (${scenarioIds.length})`;
32
+ }
33
+ switch (scope.mode) {
34
+ case "all":
35
+ return "every scenario in the project";
36
+ case "test_suites":
37
+ return `test suites: ${scope.testSuiteIds.join(", ")}`;
38
+ case "labels":
39
+ return `labels: ${scope.labels.join(", ")}`;
40
+ case "scenarios":
41
+ return `hand-picked scenarios (${scenarioIds.length})`;
42
+ }
43
+ }
44
+
45
+ export {
46
+ formatRunPlanRun,
47
+ describeRunPlanScope
48
+ };
49
+ //# sourceMappingURL=chunk-JR6DJZOU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
4
 
5
5
  // src/langwatch-api-model-providers.ts
6
6
  async function listModelProviders() {
@@ -19,4 +19,4 @@ export {
19
19
  listModelProviders,
20
20
  setModelProvider
21
21
  };
22
- //# sourceMappingURL=chunk-DAIQKS27.js.map
22
+ //# sourceMappingURL=chunk-JTQJRNFJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
4
 
5
5
  // src/langwatch-api-api-keys.ts
6
6
  async function listApiKeys() {
@@ -21,4 +21,4 @@ export {
21
21
  createApiKey,
22
22
  revokeApiKey
23
23
  };
24
- //# sourceMappingURL=chunk-WWMDHZZV.js.map
24
+ //# sourceMappingURL=chunk-K37ZNPXK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
4
 
5
5
  // src/langwatch-api-evaluators.ts
6
6
  function getEvaluatorType(evaluator) {
@@ -41,4 +41,4 @@ export {
41
41
  updateEvaluator,
42
42
  deleteEvaluator
43
43
  };
44
- //# sourceMappingURL=chunk-EU22L52K.js.map
44
+ //# sourceMappingURL=chunk-OJLYYJWI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeRequest
3
- } from "./chunk-5UWY24RP.js";
3
+ } from "./chunk-GELJ2MQR.js";
4
4
 
5
5
  // src/langwatch-api-simulation-runs.ts
6
6
  async function listSimulationRuns(params) {
@@ -22,4 +22,4 @@ export {
22
22
  listSimulationRuns,
23
23
  getSimulationRun
24
24
  };
25
- //# sourceMappingURL=chunk-Y3HDZ6OW.js.map
25
+ //# sourceMappingURL=chunk-QAMP3CGR.js.map