From 213f95094547dfd7faa37972484565ed8929c6ec Mon Sep 17 00:00:00 2001 From: Andrei Borza Date: Fri, 9 Oct 2026 14:33:35 +0200 Subject: [PATCH 1/2] test(cloudflare): Add LangChain TypeSafeClassifier integration test Co-Authored-By: Claude Opus 5.5 --- .../cloudflare-integration-tests/package.json | 6 +- .../langchain-typesafe-classifier/index.ts | 23 ++++ .../instrument.server.ts | 11 ++ .../langchain-typesafe-classifier/test.ts | 60 +++++++++ .../vite.config.mts | 7 + .../wrangler.jsonc | 7 + yarn.lock | 120 +++++++++++++++++- 7 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/index.ts create mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/instrument.server.ts create mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/test.ts create mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/vite.config.mts create mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/wrangler.jsonc diff --git a/dev-packages/cloudflare-integration-tests/package.json b/dev-packages/cloudflare-integration-tests/package.json index aa3fc77e2d9c..e23bcc9abcf6 100644 --- a/dev-packages/cloudflare-integration-tests/package.json +++ b/dev-packages/cloudflare-integration-tests/package.json @@ -17,15 +17,17 @@ "ai": "^6.0.0", "@anthropic-ai/sdk": "0.63.0", "@google/genai": "^1.20.0", - "@langchain/core": "^0.3.80", + "@langchain/core": "^1.2.17", "@langchain/langgraph": "^1.0.1", - "@langchain/openai": "^0.5.0", + "@langchain/openai": "^1.6.2", + "@langchain/typesafe": "^0.0.2", "@prisma/adapter-d1": "6.15.0", "@prisma/client": "6.15.0", "@sentry/cloudflare": "11.6.0", "@sentry/core": "11.6.0", "@sentry/hono": "11.6.0", "hono": "^4.13.7", + "langchain": "^1.5.16", "openai": "5.18.1" }, "devDependencies": { diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/index.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/index.ts new file mode 100644 index 000000000000..0fc778436064 --- /dev/null +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/index.ts @@ -0,0 +1,23 @@ +import { HumanMessage } from '@langchain/core/messages'; +import { TypeSafeClassifier } from '@langchain/typesafe'; + +const mockFetch: typeof fetch = async () => + Response.json({ + model: 'jev-1.13', + answers: { urgent: { type: 'noul', noul: 0.9 } }, + usage: { input_tokens: 30, output_tokens: 2 }, + }); + +export default { + async fetch() { + const classifier = new TypeSafeClassifier({ + apiKey: 'mock-api-key', + fetch: mockFetch, + questions: { urgent: { type: 'noul', instructions: 'Is this urgent?' } }, + }); + + const result = await classifier.invoke([new HumanMessage('My payouts have been failing.')]); + + return Response.json(result); + }, +} satisfies ExportedHandler; diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/instrument.server.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/instrument.server.ts new file mode 100644 index 000000000000..0982b0fc7bf8 --- /dev/null +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/instrument.server.ts @@ -0,0 +1,11 @@ +import { defineCloudflareOptions } from '@sentry/cloudflare'; + +interface Env { + SENTRY_DSN: string; +} + +export default defineCloudflareOptions((env: Env) => ({ + dsn: env.SENTRY_DSN, + tracesSampleRate: 1.0, + dataCollection: { genAI: { inputs: true, outputs: true } }, +})); diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/test.ts new file mode 100644 index 000000000000..b5681919fe82 --- /dev/null +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/test.ts @@ -0,0 +1,60 @@ +import { + GEN_AI_INPUT_MESSAGES, + GEN_AI_OPERATION_NAME, + GEN_AI_OUTPUT_MESSAGES, + GEN_AI_PROVIDER_NAME, + GEN_AI_REQUEST_MODEL, + GEN_AI_RESPONSE_MODEL, + GEN_AI_USAGE_INPUT_TOKENS, + GEN_AI_USAGE_OUTPUT_TOKENS, + SENTRY_OP, + SENTRY_ORIGIN, +} from '@sentry/conventions/attributes'; +import { GEN_AI_EVALUATE } from '@sentry/conventions/op'; +import { expect, it } from 'vitest'; +import { createRunner } from '../../../runner'; +import { getSpanOp, getSpansFromEnvelope } from '../../../spanUtils'; + +// The worker passes no callback handler, so the span only exists if the Vite plugin's build-time hook +// on `TypeSafeClassifier.invoke` adds it. The input `state` is the transcript the classifier sends to +// Jev, which only the hook records. + +it('traces a TypeSafeClassifier call through the Vite plugin instrumentation', async ({ signal }) => { + const runner = createRunner(__dirname) + .ignore('event') + .expect(envelope => { + const spans = getSpansFromEnvelope(envelope); + const segmentSpan = spans.find(span => span.is_segment); + const genAiSpans = spans.filter(span => getSpanOp(span)?.startsWith('gen_ai.')); + + expect(genAiSpans).toHaveLength(1); + + const evaluateSpan = genAiSpans[0]!; + expect(evaluateSpan.name).toBe('evaluate jev-latest'); + expect(evaluateSpan.parent_span_id).toBe(segmentSpan?.span_id); + expect(evaluateSpan.status).toBe('ok'); + expect(evaluateSpan.attributes).toMatchObject({ + [SENTRY_OP]: { value: GEN_AI_EVALUATE, type: 'string' }, + [SENTRY_ORIGIN]: { value: 'auto.ai.langchain', type: 'string' }, + [GEN_AI_OPERATION_NAME]: { value: 'evaluate', type: 'string' }, + [GEN_AI_PROVIDER_NAME]: { value: 'typesafe', type: 'string' }, + [GEN_AI_REQUEST_MODEL]: { value: 'jev-latest', type: 'string' }, + [GEN_AI_RESPONSE_MODEL]: { value: 'jev-1.13', type: 'string' }, + [GEN_AI_USAGE_INPUT_TOKENS]: { value: 30, type: 'integer' }, + [GEN_AI_USAGE_OUTPUT_TOKENS]: { value: 2, type: 'integer' }, + }); + expect(JSON.parse(evaluateSpan.attributes[GEN_AI_INPUT_MESSAGES]!.value as string)).toEqual([ + { + type: 'evaluation', + state: ['user: My payouts have been failing.'], + questions: { urgent: { type: 'noul', instructions: 'Is this urgent?' } }, + }, + ]); + expect(JSON.parse(evaluateSpan.attributes[GEN_AI_OUTPUT_MESSAGES]!.value as string)).toEqual([ + { type: 'evaluation', answers: { urgent: { type: 'noul', noul: 0.9 } } }, + ]); + }) + .start(signal); + await runner.makeRequest('get', '/'); + await runner.completed(); +}); diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/vite.config.mts b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/vite.config.mts new file mode 100644 index 000000000000..005f4448f6cb --- /dev/null +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/vite.config.mts @@ -0,0 +1,7 @@ +import { cloudflare } from '@cloudflare/vite-plugin'; +import { sentryCloudflareVitePlugin } from '@sentry/cloudflare/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [cloudflare(), sentryCloudflareVitePlugin()], +}); diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/wrangler.jsonc b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/wrangler.jsonc new file mode 100644 index 000000000000..94b87d968ac9 --- /dev/null +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/langchain-typesafe-classifier/wrangler.jsonc @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/wrangler/config-schema.json", + "name": "cloudflare-langchain-typesafe-classifier", + "main": "index.ts", + "compatibility_date": "2025-06-17", + "compatibility_flags": ["nodejs_compat"], +} diff --git a/yarn.lock b/yarn.lock index f4376646ccb5..d8b224ce3bff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5509,6 +5509,19 @@ zod "^3.25.32" zod-to-json-schema "^3.22.3" +"@langchain/core@^1.2.17": + version "1.2.17" + resolved "https://sfw.security.sentry.io/npm/@langchain/core/-/core-1.2.17.tgz#f889484a5eb8a32b493748a6f68ce26c70218445" + integrity sha512-aLQLSed6oLCMLtJHrINhnFmsu79G2UiDlRslbOx+TSN9NmU+WuDv1OtVxrLpYglhXNy53elSduMVk3XBPG9ulw== + dependencies: + "@cfworker/json-schema" "^4.0.2" + "@standard-schema/spec" "^1.1.0" + js-tiktoken "^1.0.12" + langsmith ">=0.5.0 <1.0.0" + mustache "^4.2.0" + p-queue "^6.6.2" + zod "^3.25.76 || ^4" + "@langchain/langgraph-checkpoint@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.0.0.tgz#ece2ede439d0d0b0b532c4be7817fd5029afe4f8" @@ -5516,6 +5529,11 @@ dependencies: uuid "^10.0.0" +"@langchain/langgraph-checkpoint@^1.1.5", "@langchain/langgraph-checkpoint@^1.1.6": + version "1.1.6" + resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.1.6.tgz#df833a5f3a4f42b969cc9f7682c193c274f481c5" + integrity sha512-CpDMGTY4Y6qzoGewMoL8MS9Ej35vyrrchbRpKCtUDWnHhrf4lbHp7wnu9dsHaavB3Z+M6aVRl+9GNQbIJVV1dg== + "@langchain/langgraph-checkpoint@~0.0.17": version "0.0.18" resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.18.tgz#2f7a9cdeda948ccc8d312ba9463810709d71d0b8" @@ -5542,6 +5560,16 @@ p-retry "4" uuid "^9.0.0" +"@langchain/langgraph-sdk@~1.12.3": + version "1.12.3" + resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph-sdk/-/langgraph-sdk-1.12.3.tgz#a30d94308f40971f2f31cf027f26d12ed7072afd" + integrity sha512-o5Qd1pepsJKHmHGIcWhOlZe2fvlPs2AEkVOxqzbL3R8IiMBPH2gNG8/kwK36czEnagiJtu4RUn02mKbGRwd5dQ== + dependencies: + "@langchain/protocol" "^0.0.19" + "@types/json-schema" "^7.0.15" + p-queue "^9.0.1" + p-retry "^7.1.1" + "@langchain/langgraph@^0.2.32": version "0.2.74" resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.2.74.tgz#37367a1e8bafda3548037a91449a69a84f285def" @@ -5561,6 +5589,16 @@ "@langchain/langgraph-sdk" "~1.0.0" uuid "^10.0.0" +"@langchain/langgraph@^1.4.18": + version "1.4.21" + resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph/-/langgraph-1.4.21.tgz#390a2c36901b403faa7f5dae2064d18942300d12" + integrity sha512-0LRyRw594IO98etnnBCM6nhckVjWGNnObpdaQij1e+u+GsUwGvn9P4/P42UAJG56WFF72A9n93WwCOW7Mq9yug== + dependencies: + "@langchain/langgraph-checkpoint" "^1.1.6" + "@langchain/langgraph-sdk" "~1.12.3" + "@langchain/protocol" "^0.0.19" + "@standard-schema/spec" "1.1.0" + "@langchain/openai@^0.5.0": version "0.5.18" resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.5.18.tgz#59ebbf48044d711ce9503d3b9854a3533cb54683" @@ -5570,6 +5608,27 @@ openai "^5.3.0" zod "^3.25.32" +"@langchain/openai@^1.6.2": + version "1.6.2" + resolved "https://sfw.security.sentry.io/npm/@langchain/openai/-/openai-1.6.2.tgz#1a70df67e11680e9d38c2bb4214c753ce13a1ed9" + integrity sha512-KaXc3zjdM2/E24FdBlsk5NTT2Dyxh46vzCS2by78ehN6G5zdx+4OfVnPvyLl8r2tv2TqQCHpEhImVXgnAZaOvg== + dependencies: + js-tiktoken "^1.0.12" + openai "^7.10.0" + zod "^3.25.76 || ^4" + +"@langchain/protocol@^0.0.19": + version "0.0.19" + resolved "https://sfw.security.sentry.io/npm/@langchain/protocol/-/protocol-0.0.19.tgz#7fe43fed115dc34b3b4c246e8d5283fbcbfab7b0" + integrity sha512-9hKcRrH7cBX6gfutdfXPoft1OCchHe4FEpALoDJMl5Qu+n/YG5ynZmyu8+8cxORlPwHBoKTxggvXz+76M1yX1Q== + +"@langchain/typesafe@^0.0.2": + version "0.0.2" + resolved "https://sfw.security.sentry.io/npm/@langchain/typesafe/-/typesafe-0.0.2.tgz#c4bef22fd8509d9650ef91d255df8f9925678f30" + integrity sha512-FwNQ5ZzKRvguO4zGhwRsOxumH7zNQjfGdlfdla7KUUGCGfXbGpqXtFmxw+4DRdTCVxgsJQ3NIpke9WICukWlnQ== + dependencies: + zod "^4" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -8693,7 +8752,7 @@ resolved "https://registry.yarnpkg.com/@speed-highlight/core/-/core-1.2.15.tgz#88c45609a2b5c2293a2e1935417c507f98f39d0b" integrity sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw== -"@standard-schema/spec@^1.0.0", "@standard-schema/spec@^1.1.0": +"@standard-schema/spec@1.1.0", "@standard-schema/spec@^1.0.0", "@standard-schema/spec@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== @@ -15394,6 +15453,11 @@ eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== +eventemitter3@^5.0.4: + version "5.0.4" + resolved "https://sfw.security.sentry.io/npm/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== + events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -17840,6 +17904,11 @@ is-negative-zero@^2.0.3: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== +is-network-error@^1.1.0: + version "1.3.2" + resolved "https://sfw.security.sentry.io/npm/is-network-error/-/is-network-error-1.3.2.tgz#9460bc30f8419a4bca77114f4de88a3ee5e0c519" + integrity sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA== + is-node-process@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" @@ -18663,6 +18732,23 @@ ky@1.7.5: resolved "https://registry.yarnpkg.com/ky/-/ky-1.7.5.tgz#69c9b70ff818fd6108fc04a89c1454412c11dfce" integrity sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA== +langchain@^1.5.16: + version "1.5.16" + resolved "https://sfw.security.sentry.io/npm/langchain/-/langchain-1.5.16.tgz#eb1549a885d67d2f7fe429ed2625bc89d1409d21" + integrity sha512-t5DvkNvySgkNAjWLJ5lIvg2R2WJJ/uF7hHtaSIwUEUUv/YzynzbtJLovwhIw0W1HdOnBbao6dkWOZthKjwBUPQ== + dependencies: + "@langchain/langgraph" "^1.4.18" + "@langchain/langgraph-checkpoint" "^1.1.5" + langsmith ">=0.5.0 <1.0.0" + zod "^3.25.76 || ^4" + +"langsmith@>=0.5.0 <1.0.0": + version "0.10.10" + resolved "https://sfw.security.sentry.io/npm/langsmith/-/langsmith-0.10.10.tgz#cc12ce1aa24e30b20770181cfe98eec2d52683e0" + integrity sha512-I83MmN/tqU662yHfv7DCMlJh8eFuRdY2Ri9rlvM61DGEsVdnVkOa0eyv9DpsstBM5dS877o5GDn+qHwZWfSgRg== + dependencies: + p-queue "6.6.2" + langsmith@^0.3.67: version "0.3.74" resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.74.tgz#014d31a9ff7530b54f0d797502abd512ce8fb6fb" @@ -21436,6 +21522,11 @@ openai@^5.3.0: resolved "https://registry.yarnpkg.com/openai/-/openai-5.23.2.tgz#f13e2dc2ef6b88aab6a9b97cdc68d41a1d083c68" integrity sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg== +openai@^7.10.0: + version "7.31.0" + resolved "https://sfw.security.sentry.io/npm/openai/-/openai-7.31.0.tgz#af4cc2326673ba1ec8b27ccc854e8171eaee7ea3" + integrity sha512-ZGAzauuYb0DdB53qVbIR+X8rdmNtWgiElrrMthbZCVreLcIsQJBwzAIWUbpB2FkQu2Cj6OJ9zJR1EKMUYn4/SQ== + optional-require@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7" @@ -21774,7 +21865,7 @@ p-map@^7.0.3: resolved "https://sfw.security.sentry.io/npm/p-map/-/p-map-7.0.7.tgz#a82175dd690468a930b9ae45c2b9829c5bf60fa3" integrity sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ== -p-queue@^6.6.2: +p-queue@6.6.2, p-queue@^6.6.2: version "6.6.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== @@ -21790,6 +21881,14 @@ p-queue@^8.0.1: eventemitter3 "^5.0.1" p-timeout "^6.1.2" +p-queue@^9.0.1: + version "9.3.3" + resolved "https://sfw.security.sentry.io/npm/p-queue/-/p-queue-9.3.3.tgz#c5e528c7eb361b7ba8eb5a9406902f7f2e75fc8f" + integrity sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA== + dependencies: + eventemitter3 "^5.0.4" + p-timeout "^7.0.0" + p-retry@4, p-retry@^4.5.0: version "4.6.2" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" @@ -21798,6 +21897,13 @@ p-retry@4, p-retry@^4.5.0: "@types/retry" "0.12.0" retry "^0.13.1" +p-retry@^7.1.1: + version "7.1.1" + resolved "https://sfw.security.sentry.io/npm/p-retry/-/p-retry-7.1.1.tgz#7470fdecb1152ba50f1334e48378c9e401330e24" + integrity sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w== + dependencies: + is-network-error "^1.1.0" + p-timeout@^3.0.0, p-timeout@^3.1.0, p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -21810,6 +21916,11 @@ p-timeout@^6.1.2: resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== +p-timeout@^7.0.0: + version "7.0.2" + resolved "https://sfw.security.sentry.io/npm/p-timeout/-/p-timeout-7.0.2.tgz#6b5c8c8eb99ea96fa775508fb1604e7ea094dd47" + integrity sha512-prbX4Z3YszrFNgH+MW5Zoeq3baXrMtP/MQnFeET90UB/GtGcGDQ5Usg9OCy6ETjTTntOw1SL2z9fMPUppN3Guw== + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -28586,6 +28697,11 @@ zod@^3.23.8, zod@^3.24.1, zod@^3.25.32: resolved "https://sfw.security.sentry.io/npm/zod/-/zod-4.5.4.tgz#e215c62420c528dd7951e31fb52c5438f1fd184a" integrity sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA== +"zod@^3.25.76 || ^4", zod@^4: + version "4.6.5" + resolved "https://sfw.security.sentry.io/npm/zod/-/zod-4.6.5.tgz#e3af3edbdc260239c52f73caad05dbbffe6e82cd" + integrity sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q== + zone.js@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.12.0.tgz#a4a6e5fab6d34bd37d89c77e89ac2e6f4a3d2c30" From 90fd9f62b9c9648d9bdb7fbb465089747c6aec6c Mon Sep 17 00:00:00 2001 From: Andrei Borza Date: Fri, 9 Oct 2026 15:17:22 +0200 Subject: [PATCH 2/2] Dedupe lockfile --- yarn.lock | 41 +++-------------------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/yarn.lock b/yarn.lock index d8b224ce3bff..d7ba446cb178 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5522,13 +5522,6 @@ p-queue "^6.6.2" zod "^3.25.76 || ^4" -"@langchain/langgraph-checkpoint@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.0.0.tgz#ece2ede439d0d0b0b532c4be7817fd5029afe4f8" - integrity sha512-xrclBGvNCXDmi0Nz28t3vjpxSH6UYx6w5XAXSiiB1WEdc2xD2iY/a913I3x3a31XpInUW/GGfXXfePfaghV54A== - dependencies: - uuid "^10.0.0" - "@langchain/langgraph-checkpoint@^1.1.5", "@langchain/langgraph-checkpoint@^1.1.6": version "1.1.6" resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.1.6.tgz#df833a5f3a4f42b969cc9f7682c193c274f481c5" @@ -5551,15 +5544,6 @@ p-retry "4" uuid "^9.0.0" -"@langchain/langgraph-sdk@~1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-1.0.0.tgz#16faca6cc426432dee9316428d0aecd94e5b7989" - integrity sha512-g25ti2W7Dl5wUPlNK+0uIGbeNFqf98imhHlbdVVKTTkDYLhi/pI1KTgsSSkzkeLuBIfvt2b0q6anQwCs7XBlbw== - dependencies: - p-queue "^6.6.2" - p-retry "4" - uuid "^9.0.0" - "@langchain/langgraph-sdk@~1.12.3": version "1.12.3" resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph-sdk/-/langgraph-sdk-1.12.3.tgz#a30d94308f40971f2f31cf027f26d12ed7072afd" @@ -5580,16 +5564,7 @@ uuid "^10.0.0" zod "^3.23.8" -"@langchain/langgraph@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-1.0.2.tgz#62de931edac0dd850daf708bd6f8f3835cf25a5e" - integrity sha512-syxzzWTnmpCL+RhUEvalUeOXFoZy/KkzHa2Da2gKf18zsf9Dkbh3rfnRDrTyUGS1XSTejq07s4rg1qntdEDs2A== - dependencies: - "@langchain/langgraph-checkpoint" "^1.0.0" - "@langchain/langgraph-sdk" "~1.0.0" - uuid "^10.0.0" - -"@langchain/langgraph@^1.4.18": +"@langchain/langgraph@^1.0.1", "@langchain/langgraph@^1.4.18": version "1.4.21" resolved "https://sfw.security.sentry.io/npm/@langchain/langgraph/-/langgraph-1.4.21.tgz#390a2c36901b403faa7f5dae2064d18942300d12" integrity sha512-0LRyRw594IO98etnnBCM6nhckVjWGNnObpdaQij1e+u+GsUwGvn9P4/P42UAJG56WFF72A9n93WwCOW7Mq9yug== @@ -15448,12 +15423,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -eventemitter3@^5.0.4: +eventemitter3@^5.0.1, eventemitter3@^5.0.4: version "5.0.4" resolved "https://sfw.security.sentry.io/npm/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== @@ -28692,12 +28662,7 @@ zod@^3.23.8, zod@^3.24.1, zod@^3.25.32: resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== -"zod@^3.25.0 || ^4.0.0", zod@^4.0.0, zod@^4.2.0: - version "4.5.4" - resolved "https://sfw.security.sentry.io/npm/zod/-/zod-4.5.4.tgz#e215c62420c528dd7951e31fb52c5438f1fd184a" - integrity sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA== - -"zod@^3.25.76 || ^4", zod@^4: +"zod@^3.25.0 || ^4.0.0", "zod@^3.25.76 || ^4", zod@^4, zod@^4.0.0, zod@^4.2.0: version "4.6.5" resolved "https://sfw.security.sentry.io/npm/zod/-/zod-4.6.5.tgz#e3af3edbdc260239c52f73caad05dbbffe6e82cd" integrity sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==