diff --git a/README.md b/README.md index 513832b..a69c2ca 100644 --- a/README.md +++ b/README.md @@ -446,6 +446,129 @@ const client = new Openlayer({ }); ``` +## Mastra + +Send Mastra agent, workflow, model, and tool traces to Openlayer. + +### Installation + +```sh +npm install openlayer @mastra/core @mastra/observability @mastra/otel-exporter @opentelemetry/exporter-trace-otlp-proto +``` + +`@mastra/observability` is required to configure any custom exporter, Openlayer included, but is +not a peer dependency of `openlayer` itself — it's a Mastra requirement, not an Openlayer one. +`@mastra/core`, `@mastra/otel-exporter`, and `@opentelemetry/exporter-trace-otlp-proto` are all +declared as **optional** peer dependencies of `openlayer`, so none of the three is pulled in for +consumers who do not use Mastra. + +### Configuration + +Set `OPENLAYER_API_KEY` and `OPENLAYER_INFERENCE_PIPELINE_ID`, then add the exporter. A third, +optional variable, `OPENLAYER_OTEL_ENDPOINT`, overrides the OTLP endpoint the exporter posts +to — it defaults to `https://api.openlayer.com/v1/otel/v1/traces` when unset: + +```ts +import { Mastra } from '@mastra/core'; +import { Observability } from '@mastra/observability'; +import { OpenlayerExporter } from 'openlayer/lib/integrations/mastra'; + +export const mastra = new Mastra({ + observability: new Observability({ + configs: { + openlayer: { + serviceName: 'my-service', + exporters: [new OpenlayerExporter()], + }, + }, + }), +}); +``` + +Every value can also be passed explicitly, which takes precedence over the environment: + +```ts +new OpenlayerExporter({ + apiKey: process.env.OPENLAYER_API_KEY, + inferencePipelineId: process.env.OPENLAYER_INFERENCE_PIPELINE_ID, + projectName: 'my-service', + endpoint: 'https://api.openlayer.com/v1/otel/v1/traces', + headers: { 'x-custom-header': 'value' }, + batchSize: 512, + timeout: 30000, + logLevel: 'debug', +}); +``` + +If credentials are missing the exporter disables itself and logs the reason — it never throws. + +### Session and user attribution + +Metadata named `sessionId` (or `threadId`) and `userId` is lifted onto the trace, so rows are +grouped by session and user in Openlayer: + +```ts +await agent.generate('What is the weather in Lisbon?', { + tracingOptions: { metadata: { sessionId: 'session-123', userId: 'user-456' } }, +}); +``` + +Any other metadata is preserved on the step as-is. + +### Composing with other exporters + +Mastra takes a list, so Openlayer sits alongside anything else: + +```ts +exporters: [new OpenlayerExporter(), new ArizeExporter()], +``` + +### Filtering spans + +There are two layers, and they do different jobs: + +- **`excludeSpanTypes`** on the Mastra config drops spans before _any_ exporter sees them. Use + this to filter for every exporter at once. +- **`dropSpanTypes`** on `OpenlayerExporter` changes only what Openlayer receives. It defaults + to `[SpanType.MODEL_CHUNK]`, because Mastra emits one span per streaming chunk and an + unfiltered streamed reply would become hundreds of steps. Pass `[]` to export everything. + + **`dropSpanTypes` never reparents children.** It is a public knob, and dropping a span type + that has descendants — `WORKFLOW_STEP`, for example — silently loses that entire subtree, not + just the dropped span itself. `MODEL_CHUNK`, the default, is safe from this precisely because + chunk spans are leaves with nothing under them to lose. + + `SpanType.MODEL_STEP` is the case that was actually measured: it was a large share of a + trace's steps (4 of 7 in a single one-tool-call turn) and was considered for the default drop + list, but a live run confirmed that dropping it silently lost the nested tool-call step rather + than hoisting it to the surviving `MODEL_GENERATION` ancestor. It is deliberately **not** in + the default list for that reason, and the same caution applies to any span type you add to + `dropSpanTypes` yourself: check what it parents before dropping it. + +### Troubleshooting + +**Nothing arrives at all.** The exporter disabled itself because credentials were missing. Look +for `[OpenlayerExporter] Missing required configuration` in the logs at startup. + +**Rows arrive with empty output.** Something stripped the `mastra.*.input` / `.output` span +attributes before the exporter ran — check any `customSpanFormatter` or span output processor +in your observability config. Openlayer builds a row's input and output from the root span, and +the exporter recovers them from those attributes. + +**Hundreds of steps in one trace.** `dropSpanTypes` was overridden and `MODEL_CHUNK` is no +longer filtered. Restore the default or add `SpanType.MODEL_CHUNK` back. + +**OpenInference attributes are not read.** Openlayer's OTLP ingest maps the GenAI semantic +conventions; OpenInference `input.value` / `output.value` produce empty rows. This exporter +targets gen_ai deliberately — no configuration will change that. + +**Running `mastraExporter.live.test.ts` live needs `--experimental-vm-modules`.** The suite +itself loads and skips cleanly under a plain `npx jest` run with no credentials — `@ai-sdk/openai` +is ESM-only, but the live test imports it lazily inside the test body, which `it.skip` never +executes. The flag is only required to actually run the live assertions once credentials are +set: `NODE_OPTIONS=--experimental-vm-modules npx jest tests/integrations/mastraExporter.live.test.ts` +— see that file's header comment for why. + ## Frequently Asked Questions ## Semantic versioning diff --git a/examples/mastra-tracing.ts b/examples/mastra-tracing.ts new file mode 100644 index 0000000..cf03012 --- /dev/null +++ b/examples/mastra-tracing.ts @@ -0,0 +1,98 @@ +/** + * Mastra → Openlayer tracing example. + * + * Exercises both root span types — an agent run and a workflow run — plus a + * tool call, session/user metadata, and an explicit shutdown so the batch is + * flushed before the process exits. + * + * Run with: + * OPENLAYER_API_KEY=... OPENLAYER_INFERENCE_PIPELINE_ID=... OPENAI_API_KEY=... \ + * npx tsx mastra-tracing.ts + */ +import { openai } from '@ai-sdk/openai'; +import { Agent } from '@mastra/core/agent'; +import { Mastra } from '@mastra/core'; +import { createTool } from '@mastra/core/tools'; +import { createStepFromAgent, createWorkflow } from '@mastra/core/workflows'; +import { Observability } from '@mastra/observability'; +import { OpenlayerExporter } from 'openlayer/lib/integrations/mastra'; +import { z } from 'zod'; + +const getWeather = createTool({ + id: 'get_weather', + description: 'Get the current weather for a city.', + inputSchema: z.object({ city: z.string() }), + outputSchema: z.object({ tempC: z.number(), sky: z.string() }), + execute: async ({ city }) => { + // A real tool would call a weather API here. + return { tempC: 24, sky: `sunny in ${city}` }; + }, +}); + +const weatherAgent = new Agent({ + id: 'weatherAgent', + name: 'WeatherAgent', + instructions: 'You are a concise weather assistant. Always use the get_weather tool.', + model: openai('gpt-4o-mini'), + tools: { getWeather }, +}); + +// createStepFromAgent wraps the agent as a step that runs *inside* the +// workflow's own trace, instead of a hand-written step that calls +// `agent.generate()` and would start an unrelated, sibling trace. The +// factory has a fixed contract, not an inferred one: its input type is +// always `{ prompt: string }` and its output always carries `text` — which is +// why the `.map()` step below exists (to produce that exact `{ prompt }` +// shape from the workflow's own `{ city }` input) and why the workflow's +// `outputSchema` declares `text`. +const weatherAgentStep = createStepFromAgent(weatherAgent); + +const weatherWorkflow = createWorkflow({ + id: 'weatherWorkflow', + inputSchema: z.object({ city: z.string() }), + outputSchema: z.object({ text: z.string() }), +}) + .map(async ({ inputData }) => ({ prompt: `What is the weather in ${inputData.city}?` })) + .then(weatherAgentStep) + .commit(); + +export const mastra = new Mastra({ + agents: { weatherAgent }, + workflows: { weatherWorkflow }, + observability: new Observability({ + configs: { + openlayer: { + serviceName: 'mastra-openlayer-example', + // Zero-config: reads OPENLAYER_API_KEY and OPENLAYER_INFERENCE_PIPELINE_ID. + exporters: [new OpenlayerExporter()], + }, + }, + }), +}); + +async function main(): Promise { + // 1. A bare agent run — the root span is AGENT_RUN. + const agentResult = await mastra.getAgent('weatherAgent').generate('What is the weather in Lisbon?', { + // Lifted by the exporter to session.id / user.id, which Openlayer reads. + tracingOptions: { metadata: { sessionId: 'demo-session-1', userId: 'demo-user-1' } }, + }); + console.log('agent:', agentResult.text); + + // 2. A workflow run — the root span is WORKFLOW_RUN. + const run = await mastra.getWorkflow('weatherWorkflow').createRun(); + const workflowResult = await run.start({ inputData: { city: 'Madrid' } }); + if (workflowResult.status === 'success') { + console.log('workflow:', JSON.stringify(workflowResult.result)); + } else { + console.log('workflow ended with status:', workflowResult.status); + } + + // 3. Flush before exit, or the last batch is lost. + await mastra.observability.shutdown(); + console.log('Traces flushed to Openlayer.'); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/examples/package.json b/examples/package.json index e681320..65e03b4 100755 --- a/examples/package.json +++ b/examples/package.json @@ -10,13 +10,19 @@ "author": "", "license": "ISC", "dependencies": { + "@ai-sdk/openai": "^4.0.50", "@google/genai": "^2.13.0", "@langchain/core": "^0.3.80", "@langchain/openai": "^0.6.17", + "@mastra/core": "^1.63.0", + "@mastra/observability": "^1.17.3", + "@mastra/otel-exporter": "^1.3.11", + "@opentelemetry/exporter-trace-otlp-proto": "^0.221.0", "form-data": "^4.0.4", "langchain": "^0.3.37", "openai": "^4.104.0", - "openlayer": "^0.22.2" + "openlayer": "file:..", + "zod": "^4.4.3" }, "devDependencies": { "tsx": "^4.21.0", diff --git a/examples/yarn.lock b/examples/yarn.lock index 5f5d8ef..40b096e 100644 --- a/examples/yarn.lock +++ b/examples/yarn.lock @@ -2,27 +2,116 @@ # yarn lockfile v1 -"@anthropic-ai/sdk@^0.27.3": - version "0.27.3" - resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.27.3.tgz" - integrity sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw== +"@a2a-js/sdk-v0_3@npm:@a2a-js/sdk@~0.3.14": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@a2a-js/sdk/-/sdk-0.3.14.tgz#e807b4e6516ea8c4af621ad9789d8dad6173058d" + integrity sha512-F6Ew1AtPzCLhTn8h9yiqTe7DiDf6XVrSnq9V1YqSl9eWqPm6anMveTiKdCSb/76cW0YiJc24rNaUrVezFFHbqQ== dependencies: - "@types/node" "^18.11.18" - "@types/node-fetch" "^2.6.4" - abort-controller "^3.0.0" - agentkeepalive "^4.2.1" - form-data-encoder "1.7.2" - formdata-node "^4.3.2" - node-fetch "^2.6.7" + uuid "^11.1.0" -"@aws-crypto/crc32@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== +"@a2a-js/sdk-v1@npm:@a2a-js/sdk@~1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@a2a-js/sdk/-/sdk-1.0.1.tgz#4a66be6a8cacc3276d6b71db9bf88ce6733f53f6" + integrity sha512-CJQdh3Wzwo8qIx5UUkSJ7+7BEI16PB+MXMHHNSmx8JQsQed2HlQgvx1ENOiKUfYA3PlcEvxIwv14dBblhDuPmw== + dependencies: + jose "^6.2.3" + uuid "^11.1.0" + +"@ai-sdk/openai@^4.0.50": + version "4.0.50" + resolved "https://registry.yarnpkg.com/@ai-sdk/openai/-/openai-4.0.50.tgz#e45dfb0ff6302024e35a1138b5a6f043b37f652c" + integrity sha512-e2Jepw5RbSwsCsPwyiNzdlmOHoCQefCziNp3k1UxfIv8QD0/p4SF6+cx7GuWX98jAVNiWLjRv1W3NVSmx3FuEQ== + dependencies: + "@ai-sdk/provider" "4.0.8" + "@ai-sdk/provider-utils" "5.0.32" + +"@ai-sdk/provider-utils-v5@npm:@ai-sdk/provider-utils@3.0.30": + version "3.0.30" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-3.0.30.tgz#c9e611246706c8f5b617ad8c75eefb16479f47e9" + integrity sha512-NCJ9JKow5ENAgEZxzvEvF20thwDiH+hutvzmrUDbloRX0azpJHNst8+7pZIVryYhLM9wgpT5/ShTSjPTFhkxEQ== + dependencies: + "@ai-sdk/provider" "2.0.3" + "@standard-schema/spec" "^1.0.0" + eventsource-parser "^3.0.6" + +"@ai-sdk/provider-utils-v6@npm:@ai-sdk/provider-utils@4.0.40": + version "4.0.40" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-4.0.40.tgz#5daa46e0cc8d876887994e335fca7f14eca53fd3" + integrity sha512-OL5IrpUm9Y8Dwy+w/vvFwPotS6m52O9W0op2oXgXdCROMJIBalBI0oro6OIBYkPxvm5Xg02GSkoQN25RlR0bnw== + dependencies: + "@ai-sdk/provider" "3.0.14" + "@standard-schema/spec" "^1.1.0" + eventsource-parser "^3.0.8" + +"@ai-sdk/provider-utils-v7@npm:@ai-sdk/provider-utils@5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-5.0.13.tgz#0baab013772b1611a0c743b951ddf4c67cc1cd5c" + integrity sha512-fScDJMDnTbx32kLDQqp0MvPjvwkgiwvlBxlmIg7XW5PbS91LG6JjH3PQG+34oMFglqfpQA355e24OdGj5PPoDw== + dependencies: + "@ai-sdk/provider" "4.0.4" + "@standard-schema/spec" "^1.1.0" + "@workflow/serde" "4.1.0" + eventsource-parser "^3.0.8" + +"@ai-sdk/provider-utils@5.0.32": + version "5.0.32" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-5.0.32.tgz#4d0fad3facecf79fce1ed411698aefdae058be22" + integrity sha512-MZUhlINn6FzKIWuX3T36h+yM9d7bG+yatH+kC99ZCe0DHxXfP73KwaoLiLcZDPQDamFyO3umPPBLJieZJyG4DQ== + dependencies: + "@ai-sdk/provider" "4.0.8" + "@standard-schema/spec" "^1.1.0" + "@workflow/serde" "4.1.0" + eventsource-parser "^3.0.8" + undici "^7.28.0" + +"@ai-sdk/provider-v5@npm:@ai-sdk/provider@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.3.tgz#8a3727d31947c6238e59dcbb72b7e1a871fd570c" + integrity sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww== dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" + json-schema "^0.4.0" + +"@ai-sdk/provider-v6@npm:@ai-sdk/provider@3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-3.0.14.tgz#5893a90e0b5355ec6a5c148f06bd7f08355c1a6f" + integrity sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider-v7@npm:@ai-sdk/provider@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.4.tgz#7b1a3616d3e1c731a06a90f0a0e26e4d767a5b25" + integrity sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.3.tgz#8a3727d31947c6238e59dcbb72b7e1a871fd570c" + integrity sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-3.0.14.tgz#5893a90e0b5355ec6a5c148f06bd7f08355c1a6f" + integrity sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.4.tgz#7b1a3616d3e1c731a06a90f0a0e26e4d767a5b25" + integrity sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.8.tgz#d3f6c72db71098363e18c2e384945fbc7a983c19" + integrity sha512-aWO7iwhFUGf347tCwNGggggfmZigaSu7TF739IZSrWWABUp7zkb4Cr3fMqvBe5EIS7ABJJu3Cadn0g/zs1G0QQ== + dependencies: + json-schema "^0.4.0" "@aws-crypto/crc32@5.2.0": version "5.2.0" @@ -46,7 +135,7 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-crypto/sha256-js@^5.0.0", "@aws-crypto/sha256-js@^5.2.0", "@aws-crypto/sha256-js@5.2.0": +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== @@ -62,15 +151,6 @@ dependencies: tslib "^2.6.2" -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - "@aws-crypto/util@^5.2.0": version "5.2.0" resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" @@ -80,7 +160,7 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-bedrock-agent-runtime@^3.749.0", "@aws-sdk/client-bedrock-agent-runtime@^3.862.0": +"@aws-sdk/client-bedrock-agent-runtime@^3.862.0": version "3.1035.0" resolved "https://registry.npmjs.org/@aws-sdk/client-bedrock-agent-runtime/-/client-bedrock-agent-runtime-3.1035.0.tgz" integrity sha512-CxHVjff+7ERivT4HiekvBmEyDDN7imH1kaKdHXPY1IllALeHvlTrdcVmNTiqnk3BPtckwBeCcbSNQO+03a706g== @@ -209,7 +289,7 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@^3.388.0", "@aws-sdk/credential-provider-node@^3.972.35": +"@aws-sdk/credential-provider-node@^3.972.35": version "3.972.35" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.35.tgz" integrity sha512-nVrY7AdGfzYgAa/jd9m06p3ES7QQDaB7zN9c+vXnVXxBRkAs9MjRDPB5AKogWuC6phddltfvHGFqLDJmyU9u/A== @@ -466,13 +546,6 @@ "@smithy/util-config-provider" "^4.2.2" tslib "^2.6.2" -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - "@aws-sdk/xml-builder@^3.972.18": version "3.972.18" resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.18.tgz" @@ -487,65 +560,155 @@ resolved "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz" integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== -"@borewit/text-codec@^0.2.1": - version "0.2.2" - resolved "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz" - integrity sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ== - -"@browserbasehq/sdk@*", "@browserbasehq/sdk@^2.0.0": - version "2.10.0" - resolved "https://registry.npmjs.org/@browserbasehq/sdk/-/sdk-2.10.0.tgz" - integrity sha512-pOL4yW8P8AI2+N5y6zEP6XXKqIXtYyKunr1JXppqQDOyKLxxvZEDqQCHJXWUzqgx3R1tGWpn7m9AjXN7MeYInA== - dependencies: - "@types/node" "^18.11.18" - "@types/node-fetch" "^2.6.4" - abort-controller "^3.0.0" - agentkeepalive "^4.2.1" - form-data-encoder "1.7.2" - formdata-node "^4.3.2" - node-fetch "^2.6.7" - -"@browserbasehq/stagehand@^1.0.0": - version "1.14.0" - resolved "https://registry.npmjs.org/@browserbasehq/stagehand/-/stagehand-1.14.0.tgz" - integrity sha512-Hi/EzgMFWz+FKyepxHTrqfTPjpsuBS4zRy3e9sbMpBgLPv+9c0R+YZEvS7Bw4mTS66QtvvURRT6zgDGFotthVQ== - dependencies: - "@anthropic-ai/sdk" "^0.27.3" - "@browserbasehq/sdk" "^2.0.0" - ws "^8.18.0" - zod-to-json-schema "^3.23.5" - "@cfworker/json-schema@^4.0.2": version "4.1.1" resolved "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz" integrity sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== -"@datastructures-js/deque@^1.0.8": - version "1.0.8" - resolved "https://registry.npmjs.org/@datastructures-js/deque/-/deque-1.0.8.tgz" - integrity sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg== +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== "@esbuild/darwin-arm64@0.27.2": version "0.27.2" resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz" integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== -"@graphql-typed-document-node/core@^3.2.0": - version "3.2.0" - resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== -"@grpc/grpc-js@^1.14.0": - version "1.14.3" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz" - integrity sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA== +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + +"@google/genai@^2.13.0": + version "2.19.0" + resolved "https://registry.yarnpkg.com/@google/genai/-/genai-2.19.0.tgz#81d2eb19fe6b2e268951550d10840f7bb1c83221" + integrity sha512-IM3u1FjpOLyOPsPh0smGA6Ntj2olUWCPbTs/WQj7cA/2AKCGw/652W7IaySx0XtwuscFnMYBoraebQusSZ0zSQ== + dependencies: + google-auth-library "^10.3.0" + p-retry "^4.6.2" + protobufjs "^7.5.4" + ws "^8.18.0" + +"@grpc/grpc-js@^1.14.3", "@grpc/grpc-js@^1.14.4": + version "1.14.4" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.4.tgz#e73ff57d97802f063999545f43ebb2b1eca65d9d" + integrity sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ== dependencies: "@grpc/proto-loader" "^0.8.0" "@js-sdsl/ordered-map" "^4.4.2" @@ -560,57 +723,17 @@ protobufjs "^7.5.3" yargs "^17.7.2" -"@ibm-cloud/watsonx-ai@*": - version "1.7.11" - resolved "https://registry.npmjs.org/@ibm-cloud/watsonx-ai/-/watsonx-ai-1.7.11.tgz" - integrity sha512-sBMj/YhV5qvJdBpvgutmX6vLUUnSwvhFaJk7r3hiMh5aB7BQWQ+5zyzvSPLywOwTWZbgy4v8jxTUhR6jb+kguw== - dependencies: - "@types/node" "^18.0.0" - extend "3.0.2" - form-data "^4.0.4" - ibm-cloud-sdk-core "^5.4.9" - ts-node "^10.9.2" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.5" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" - integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@isaacs/ttlcache@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-2.1.5.tgz#9972fc5e801698907feb0b112ea19d8ff7d7689d" + integrity sha512-VwGZqqjAWPICTmxUZnbpEfO60LhPWzquik+bmyXGY7pYRn6diEvCI5i6Ca+J6o2y4vS73HrpuMTo2dOvUevH8w== "@js-sdsl/ordered-map@^4.4.2": version "4.4.2" resolved "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz" integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== -"@langchain/community@^0.3.59": - version "0.3.59" - resolved "https://registry.npmjs.org/@langchain/community/-/community-0.3.59.tgz" - integrity sha512-lYoVFC9wArWMXaixDgIadTE22jk4ZYAvSHHmwaMRagkGr5f4kyqMeJ83UUeW76XPx2cBy2fRSO+acSgqSuWE6A== - dependencies: - "@langchain/openai" ">=0.2.0 <0.7.0" - "@langchain/weaviate" "^0.2.0" - binary-extensions "^2.2.0" - flat "^5.0.2" - js-yaml "^4.1.0" - langchain ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0" - langsmith "^0.3.67" - math-expression-evaluator "^2.0.0" - uuid "^10.0.0" - zod "^3.25.32" - -"@langchain/core@^0.3.80", "@langchain/core@>=0.2.21 <0.4.0", "@langchain/core@>=0.2.31 <0.4.0 || ^1.0.0-alpha", "@langchain/core@>=0.3.58 < 0.4.0", "@langchain/core@>=0.3.58 <0.4.0", "@langchain/core@>=0.3.68 <0.4.0": +"@langchain/core@^0.3.80": version "0.3.80" resolved "https://registry.npmjs.org/@langchain/core/-/core-0.3.80.tgz" integrity sha512-vcJDV2vk1AlCwSh3aBm/urQ1ZrlXFFBocv11bz/NBUfLWD5/UDNMzwPdaAd2dKvNmTWa9FM2lirLU3+JCf4cRA== @@ -628,34 +751,7 @@ zod "^3.25.32" zod-to-json-schema "^3.22.3" -"@langchain/langgraph-checkpoint@^0.1.1": - version "0.1.1" - resolved "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.1.1.tgz" - integrity sha512-h2bP0RUikQZu0Um1ZUPErQLXyhzroJqKRbRcxYRTAh49oNlsfeq4A3K4YEDRbGGuyPZI/Jiqwhks1wZwY73AZw== - dependencies: - uuid "^10.0.0" - -"@langchain/langgraph-sdk@~0.1.0": - version "0.1.4" - resolved "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-0.1.4.tgz" - integrity sha512-pITGjh6ayNLgtJ8Ant2lyFZ/o94ePlrH8zNgMLeiDqdRDjoqSehW5k3SZucpG4n9U12qR/WtPXDzbyHa93ISbA== - dependencies: - "@types/json-schema" "^7.0.15" - p-queue "^6.6.2" - p-retry "4" - uuid "^9.0.0" - -"@langchain/langgraph@^0.4.9": - version "0.4.9" - resolved "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.4.9.tgz" - integrity sha512-+rcdTGi4Ium4X/VtIX3Zw4RhxEkYWpwUyz806V6rffjHOAMamg6/WZDxpJbrP33RV/wJG1GH12Z29oX3Pqq3Aw== - dependencies: - "@langchain/langgraph-checkpoint" "^0.1.1" - "@langchain/langgraph-sdk" "~0.1.0" - uuid "^10.0.0" - zod "^3.25.32" - -"@langchain/openai@^0.6.17", "@langchain/openai@>=0.1.0 <0.7.0", "@langchain/openai@>=0.2.0 <0.7.0": +"@langchain/openai@>=0.1.0 <0.7.0", "@langchain/openai@^0.6.17": version "0.6.17" resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.6.17.tgz" integrity sha512-JVSzD+FL5v/2UQxKd+ikB1h4PQOtn0VlK8nqW2kPp0fshItCv4utrjBKXC/rubBnSXoRTyonBINe8QRZ6OojVQ== @@ -671,25 +767,303 @@ dependencies: js-tiktoken "^1.0.12" -"@langchain/weaviate@^0.2.0": - version "0.2.3" - resolved "https://registry.npmjs.org/@langchain/weaviate/-/weaviate-0.2.3.tgz" - integrity sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w== - dependencies: - uuid "^10.0.0" - weaviate-client "^3.5.2" +"@lukeed/csprng@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" + integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + +"@lukeed/uuid@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@lukeed/uuid/-/uuid-2.0.1.tgz#4f6c34259ee0982a455e1797d56ac27bb040fd74" + integrity sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w== + dependencies: + "@lukeed/csprng" "^1.1.0" + +"@mastra/core@^1.63.0": + version "1.63.0" + resolved "https://registry.yarnpkg.com/@mastra/core/-/core-1.63.0.tgz#9394e15c816cb8996046586334922c1e3da3cd4b" + integrity sha512-mo5rbXpXLY7lf0zFPAarjsYCTf5hGbLrd678tZZ14/1MkJMlaWJUajECl9rJLseiPv+1wyn4LnmT8W2YQ5khLQ== + dependencies: + "@a2a-js/sdk-v0_3" "npm:@a2a-js/sdk@~0.3.14" + "@a2a-js/sdk-v1" "npm:@a2a-js/sdk@~1.0.1" + "@ai-sdk/provider-utils-v5" "npm:@ai-sdk/provider-utils@3.0.30" + "@ai-sdk/provider-utils-v6" "npm:@ai-sdk/provider-utils@4.0.40" + "@ai-sdk/provider-utils-v7" "npm:@ai-sdk/provider-utils@5.0.13" + "@ai-sdk/provider-v5" "npm:@ai-sdk/provider@2.0.3" + "@ai-sdk/provider-v6" "npm:@ai-sdk/provider@3.0.14" + "@ai-sdk/provider-v7" "npm:@ai-sdk/provider@4.0.4" + "@isaacs/ttlcache" "^2.1.5" + "@lukeed/uuid" "^2.0.1" + "@mastra/schema-compat" "1.3.7" + "@modelcontextprotocol/server" "2.0.0" + "@sindresorhus/slugify" "^2.2.1" + "@standard-schema/spec" "^1.1.0" + ajv "^8.20.0" + chat "^4.34.0" + croner "^10.0.1" + dotenv "^17.3.1" + execa "^9.6.1" + fastq "^1.20.1" + gray-matter "^4.0.3" + ignore "^7.0.5" + jpeg-js "^0.4.4" + json-schema "^0.4.0" + lru-cache "^11.2.7" + p-map "^7.0.4" + p-retry "^7.1.1" + picomatch "^4.0.3" + posthog-node "^5.46.1" + tokenx "^1.3.0" + ws "^8.21.0" + xxhash-wasm "^1.1.0" + +"@mastra/observability@1.17.3", "@mastra/observability@^1.17.3": + version "1.17.3" + resolved "https://registry.yarnpkg.com/@mastra/observability/-/observability-1.17.3.tgz#cb9c939250b42bdd071f038ba5d63c9a07535989" + integrity sha512-s86/ufX2FmT0ptEBYEtrxxWgzmCd3p7W1U0wtqBSeg4+cDvxlEqG+76ZVjeQiH+DPd4p4pDQYNT6CPoXRfARHg== + +"@mastra/otel-exporter@^1.3.11": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@mastra/otel-exporter/-/otel-exporter-1.3.11.tgz#fab3585b72e34d0586317b655484b669d4fadf73" + integrity sha512-HqvRSgi64059RJgkmO9Kyz8VDVEwLBUhaSZSn08HDSVTwyeS5eEneh7snpZahAsFnz69eaP6ftGb+a3UPvfsxA== + dependencies: + "@mastra/observability" "1.17.3" + "@opentelemetry/api" "^1.9.1" + "@opentelemetry/api-logs" "^0.221.0" + "@opentelemetry/core" "^2.10.0" + "@opentelemetry/resources" "^2.10.0" + "@opentelemetry/sdk-logs" "^0.221.0" + "@opentelemetry/sdk-trace-base" "^2.10.0" + "@opentelemetry/sdk-trace-node" "^2.10.0" + "@opentelemetry/semantic-conventions" "^1.43.0" + optionalDependencies: + "@grpc/grpc-js" "^1.14.4" + "@opentelemetry/exporter-logs-otlp-grpc" "^0.221.0" + "@opentelemetry/exporter-logs-otlp-http" "^0.221.0" + "@opentelemetry/exporter-logs-otlp-proto" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-grpc" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-http" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-proto" "^0.221.0" + "@opentelemetry/exporter-zipkin" "^2.10.0" + +"@mastra/schema-compat@1.3.7": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@mastra/schema-compat/-/schema-compat-1.3.7.tgz#f5e5cc8769e7c113c0ec1a8e18ab95c828870457" + integrity sha512-06WfY+j9rulYnDp8CM7pL7JIyrntkMolqmyyb1VJNEzlYTQCIcJcY0SwQiubZv2tztmoYGikszDiRVyXp0E9gA== + dependencies: + json-schema-to-zod "^2.7.0" + zod-from-json-schema "^0.5.2" + +"@modelcontextprotocol/core@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/core/-/core-2.0.0.tgz#c918a4c6aef22a7c59dfb0aabc2a82c187cce157" + integrity sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA== + dependencies: + zod "^4.2.0" + +"@modelcontextprotocol/server@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/server/-/server-2.0.0.tgz#4fae5ccb8f7925ed9a6bf6595bb3b58617063ffd" + integrity sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw== + dependencies: + "@modelcontextprotocol/core" "2.0.0" + zod "^4.2.0" "@nodable/entities@^2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz" integrity sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA== -"@playwright/test@^1.42.1": - version "1.59.1" - resolved "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz" - integrity sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg== +"@opentelemetry/api-logs@0.221.0", "@opentelemetry/api-logs@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.221.0.tgz#66b8405b122ff1c76ee743b9bd2ca73800a2e2df" + integrity sha512-OlanaW1vv7ufTqQ3/fPLI4arGt5ZoM+P8abOMki6uEYnpRazepSWDwDnnw+la7kE26SHVC18//SMccrDvLKOXQ== + dependencies: + "@opentelemetry/api" "^1.3.0" + +"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.1.tgz#c1b0346de336ba55af2d5a7970882037baedec05" + integrity sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q== + +"@opentelemetry/context-async-hooks@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.10.0.tgz#7259acfd5936ae713be3f6d36249add7ae8aca5a" + integrity sha512-bvyMcgLEkozzSzpEEEo1OMoeQ97bxj6Qs2uN3mPrSdDvObMI1myffD/BPqcLlzZO9//d1SqQA/WPw7Cz2AiqhA== + +"@opentelemetry/core@2.10.0", "@opentelemetry/core@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.10.0.tgz#aa77f7138e74ba5399d5f3bb0deade0c168f00b2" + integrity sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ== + dependencies: + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/exporter-logs-otlp-grpc@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.221.0.tgz#3c35c21323280918b8ca060b1a7baf64bac2124a" + integrity sha512-txG1G0IrYSsKKMeiWZfj/i5cQmWB+h+hf3HzPpF3RqZVwp+iQQEIsv8Vtmzy6RWVdHdJZfygmVrBI39YTBvWcw== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-logs-otlp-http@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.221.0.tgz#bfc4bd8492e29efc68fea6c7c0cb6c3d18af8301" + integrity sha512-nKXkr4Tomi6fjYVOf+ytcW3dZAVr4v4Bv5gsT6dr2gvpUPJpKgHB4XbMufMsPotRE3g0XH2GwVVCkN2w6SON+Q== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-logs-otlp-proto@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.221.0.tgz#8a522b2ca58f4c46be00e6a6f55d1108a9b93e19" + integrity sha512-AH6EY+47gXFaWYgG3hfeOneGiE9xIZGtDBk+9g0sM8NZWzsQhhmqPbQQXJzS7pyCh5jRRr2nYNXVrkCmoojRvQ== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-trace-otlp-grpc@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.221.0.tgz#d92f044317420b841803da66bdb33f28d56b54e0" + integrity sha512-zXminlZedtq9LvOW64CnNkOqk15zV75k8JgtdTuWFge6+jk2m4GmAUm6L2eIiG1o2a2bZxXw2PDrszm+bps0IA== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-trace-otlp-http@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.221.0.tgz#b528a6076e03dcbe018a2b1c7e578533bf4df7ff" + integrity sha512-AySXiKoC+meiWm6zdVj5T2LnPDZuatveBby1cMOeQteIWsYXAUxs8Sru13G2pVSPrUXz6vF+og7QVBX6GdC/oQ== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-trace-otlp-proto@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.221.0.tgz#7aea8d78b957c44caa2502187f3f937718a2ea0f" + integrity sha512-Z9i2T7vgZbWe9rSLYxXVIbeW+XyzUq4rZanW3ZyVNwVDqCsh0EJKUgBWWQ0CZfeuUA+RQPzKgJQHMuWAUnKqXw== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-zipkin@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.10.0.tgz#5edf12c12a1a19255083f95083b1e0b8f8d9b9b7" + integrity sha512-7gsvgf0UDoJ4l9ObrwBmz5G/ZogiPk+lq+g5GpLp24YQF/vPM/BSsnOfcLnfinast5ASUgLo78uSC/ObjlnXgg== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/otlp-exporter-base@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.221.0.tgz#06ab00d9276292833848e9acc5cd225f23868467" + integrity sha512-UFPIq80OH3Ns/oPFHRj14d4DTOxUo+MUFU8hUiCq5jTqFhdeJnfVSANHT+xp92409cA+oxzvlZCe6NM1wvCuBA== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/otlp-transformer" "0.221.0" + +"@opentelemetry/otlp-grpc-exporter-base@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.221.0.tgz#6ce93b31e7017e4bbeb4453696d607355bd53528" + integrity sha512-rQDmNgyiGCTrescjnzH2ntVyUKVIq6I2UjuK8+stT/Xg0ZOT71FVJqwjFdspQl6Yol/Yqsut9bDo+ame8oTmDQ== + dependencies: + "@grpc/grpc-js" "^1.14.3" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + +"@opentelemetry/otlp-transformer@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.221.0.tgz#ebfc5a6595a1e37ce4f204c97115c8ed868dbfbb" + integrity sha512-lg6lkOU08Az23jVcn/0Els9HP+V8PnR4Km6p0KgpTggS0n/WuhnmY64rSh83Of9iR9nD+dpWr6adlcX8KzAwjg== + dependencies: + "@opentelemetry/api-logs" "0.221.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-logs" "0.221.0" + "@opentelemetry/sdk-metrics" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/resources@2.10.0", "@opentelemetry/resources@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.10.0.tgz#ce76c1c1baafce4c77bc29890965ba1f56671acc" + integrity sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-logs@0.221.0", "@opentelemetry/sdk-logs@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.221.0.tgz#9ec0e2cbfb572917b948101983e08868a690915e" + integrity sha512-FaDcazjyMp7TZZZAsqbo4IkovP0UegoCu0EBkiNt+qCqvUf7FPAsfcrZ3+ZEkKgXZ/jHafop+JoGPDk3A0SmLg== + dependencies: + "@opentelemetry/api-logs" "0.221.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-metrics@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.10.0.tgz#1a8f38d45164ba3efbb3505beb68caf4a3ecf2d9" + integrity sha512-t6r1VSvXNtSDnPXU1FbZeetJb7yyovHmgu0wRSoftxtE0g2rSNhQZQUy69sRUCL+iioJpX8SN/S6wq6ZtvLySQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + +"@opentelemetry/sdk-trace-base@2.10.0", "@opentelemetry/sdk-trace-base@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.10.0.tgz#3f9bf8a14c1dba8790619e28326f7c57f8b9e76f" + integrity sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-trace-node@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.10.0.tgz#6b2ec5f15cb99c9aac7476430801d1dc933ecf19" + integrity sha512-GZK/G6oZyBLGlH1pUgeDch7D91KoHd2uotUGIkWCPi9GI5T9X0p4L7nNAMDR1BQjkRYoDqo+ddfVx9t5Uhys+Q== + dependencies: + "@opentelemetry/context-async-hooks" "2.10.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/sdk-trace-base" "2.10.0" + +"@opentelemetry/sdk-trace@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz#76b0331092452b01a8b2f704480e2576641c7011" + integrity sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.43.0": + version "1.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz#f3f467e36c27332f0e735ec86cdcd78dd6f27865" + integrity sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg== + +"@posthog/core@^1.48.12": + version "1.49.0" + resolved "https://registry.yarnpkg.com/@posthog/core/-/core-1.49.0.tgz#e2bfe834b105ec3f0cf87a069e88cd530ed4a385" + integrity sha512-+Ejf6sZ2wI9F37rOrPxoI90mydOw5O/YKjAgWMkkuuQRHGwyfXugxsD/+CVI4Yymg8LujHr0C/KXJvWDJYgwWQ== dependencies: - playwright "1.59.1" + "@posthog/types" "^1.407.0" + +"@posthog/types@^1.407.0": + version "1.407.0" + resolved "https://registry.yarnpkg.com/@posthog/types/-/types-1.407.0.tgz#6917269f3c90eba5b5b75b63da3b18aa55925da0" + integrity sha512-7J/aFVi7JWFt/ekGVsMFvkTcADoE9MTNf1N9cpBSMUQ/SPLiBjbg386Fzk5OlgWG/u5OemBy4wlgD7YebqeppQ== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -744,6 +1118,31 @@ resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + +"@sindresorhus/slugify@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" + integrity sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw== + dependencies: + "@sindresorhus/transliterate" "^1.0.0" + escape-string-regexp "^5.0.0" + +"@sindresorhus/transliterate@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz#2309fff65a868047e6d2dd70dec747c5b36a8327" + integrity sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== + dependencies: + escape-string-regexp "^5.0.0" + "@smithy/config-resolver@^4.4.17": version "4.4.17" resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz" @@ -783,16 +1182,6 @@ "@smithy/url-parser" "^4.2.14" tslib "^2.6.2" -"@smithy/eventstream-codec@^2.0.5": - version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - "@smithy/eventstream-codec@^4.2.14": version "4.2.14" resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz" @@ -966,14 +1355,6 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" -"@smithy/protocol-http@^3.0.6": - version "3.3.0" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - "@smithy/protocol-http@^5.3.14": version "5.3.14" resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz" @@ -1014,19 +1395,6 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" -"@smithy/signature-v4@^2.0.10": - version "2.3.0" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - "@smithy/signature-v4@^5.3.14": version "5.3.14" resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz" @@ -1054,13 +1422,6 @@ "@smithy/util-stream" "^4.5.24" tslib "^2.6.2" -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - "@smithy/types@^4.14.1": version "4.14.1" resolved "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz" @@ -1155,13 +1516,6 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - "@smithy/util-hex-encoding@^4.2.2": version "4.2.2" resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz" @@ -1169,14 +1523,6 @@ dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - "@smithy/util-middleware@^4.2.14": version "4.2.14" resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz" @@ -1208,13 +1554,6 @@ "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - "@smithy/util-uri-escape@^4.2.2": version "4.2.2" resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz" @@ -1222,7 +1561,7 @@ dependencies: tslib "^2.6.2" -"@smithy/util-utf8@^2.0.0", "@smithy/util-utf8@^2.3.0": +"@smithy/util-utf8@^2.0.0": version "2.3.0" resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== @@ -1245,50 +1584,24 @@ dependencies: tslib "^2.6.2" -"@tokenizer/inflate@^0.4.1": - version "0.4.1" - resolved "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz" - integrity sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA== - dependencies: - debug "^4.4.3" - token-types "^6.1.1" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@tsconfig/node10@^1.0.7": - version "1.0.12" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz" - integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@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== -"@types/debug@^4.1.12": +"@types/debug@^4.0.0": version "4.1.13" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.13.tgz#22d1cc9d542d3593caea764f974306ab36286ee7" integrity sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw== dependencies: "@types/ms" "*" -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" "@types/ms@*": version "2.1.0" @@ -1303,7 +1616,7 @@ "@types/node" "*" form-data "^4.0.4" -"@types/node@*", "@types/node@^18.0.0", "@types/node@^18.11.18", "@types/node@^18.19.80", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^18.11.18": version "18.19.126" resolved "https://registry.npmjs.org/@types/node/-/node-18.19.126.tgz" integrity sha512-8AXQlBfrGmtYJEJUPs63F/uZQqVeFiN9o6NUjbDJYfxNxFnArlZufANPw4h6dGhYGKxcyw+TapXFvEsguzIQow== @@ -1315,20 +1628,25 @@ resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/tough-cookie@^4.0.0": - version "4.0.5" - resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== "@types/uuid@^10.0.0": version "10.0.0" resolved "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== -abort-controller-x@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.5.0.tgz" - integrity sha512-yTt9CI0x+nRfX6BFMenEGP8ooPvErGH6AbFz20C2IeOLIlDsrw/VHpgne3GsCEuTA410IiFiaLVFKmgM4bKEPQ== +"@workflow/serde@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@workflow/serde/-/serde-4.1.0.tgz#82dbbaf2370f7b8ae46d9a9a4ab0917258f8db62" + integrity sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ== + +"@workflow/serde@4.1.0-beta.2": + version "4.1.0-beta.2" + resolved "https://registry.yarnpkg.com/@workflow/serde/-/serde-4.1.0-beta.2.tgz#ac10377f50e9f83dbf4994edd4fe9c940bcef6a9" + integrity sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww== abort-controller@^3.0.0: version "3.0.0" @@ -1337,17 +1655,10 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -acorn-walk@^8.1.1: - version "8.3.5" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz" - integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== - dependencies: - acorn "^8.11.0" - -acorn@^8.11.0, acorn@^8.4.1: - version "8.16.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== +agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== agentkeepalive@^4.2.1: version "4.6.0" @@ -1356,6 +1667,16 @@ agentkeepalive@^4.2.1: dependencies: humanize-ms "^1.2.1" +ajv@^8.20.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" + integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -1373,10 +1694,12 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" @@ -1397,15 +1720,20 @@ axios@^1.15.2: form-data "^4.0.5" proxy-from-env "^2.1.0" -base64-js@^1.5.1: +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +base64-js@^1.3.0, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -binary-extensions@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +bignumber.js@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== bowser@^2.11.0: version "2.14.1" @@ -1425,11 +1753,16 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -camelcase@^6.3.0, camelcase@6: +camelcase@6: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -1438,6 +1771,24 @@ chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +chat@^4.34.0: + version "4.38.1" + resolved "https://registry.yarnpkg.com/chat/-/chat-4.38.1.tgz#9c6b891734c5fc8e576aa0df0290a836e19367d2" + integrity sha512-FD6vNLT8clXHKhN3I1m+3Bn2nz0rsB6/bmNPsJeh6Cr7kwWLg0MYl2uor9YaKBp38F77sBRVKdYKVA6ihUby3w== + dependencies: + "@workflow/serde" "4.1.0-beta.2" + mdast-util-to-string "^4.0.0" + remark-gfm "^4.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + remend "^1.2.1" + unified "^11.0.5" + cliui@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" @@ -1478,21 +1829,28 @@ console-table-printer@^2.12.1: dependencies: simple-wcswidth "^1.0.1" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +croner@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/croner/-/croner-10.0.1.tgz#4eb92806c99539146dbe2f3ee3907e319cb2847a" + integrity sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g== -cross-fetch@^3.1.5: - version "3.2.0" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: - node-fetch "^2.7.0" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -debug@^4.3.4, debug@^4.4.3: +debug@4, debug@^4.0.0: version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -1502,25 +1860,34 @@ decamelize@1.2.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +decode-named-character-reference@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" + integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== + dependencies: + character-entities "^2.0.0" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff@^4.0.1: - version "4.0.4" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz" - integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" -dotenv@^16.4.5: - version "16.6.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz" - integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== +dotenv@^17.3.1: + version "17.4.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.4.2.tgz#c07e54a746e11eba021dd9e1047ced5afdc1c034" + integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw== dunder-proto@^1.0.1: version "1.0.1" @@ -1531,7 +1898,7 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -ecdsa-sig-formatter@1.0.11: +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== @@ -1607,6 +1974,16 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" @@ -1617,11 +1994,51 @@ eventemitter3@^4.0.4: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -extend@3.0.2: +eventsource-parser@^3.0.6, eventsource-parser@^3.0.8: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.1.1.tgz#b96cbb7dace4f3774f58a9e3b1ae9a4a524872e2" + integrity sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ== + +execa@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471" + integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + cross-spawn "^7.0.6" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^8.0.1" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^6.0.0" + pretty-ms "^9.2.0" + signal-exit "^4.1.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.1.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0, extend@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-uri@^3.0.1: + version "3.1.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.6.tgz#bfdd308ef763f835fed059f3c6c925f708e33e3a" + integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q== + fast-xml-builder@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz" @@ -1629,7 +2046,7 @@ fast-xml-builder@^1.1.5: dependencies: path-expression-matcher "^1.1.3" -fast-xml-parser@^5.5.6: +fast-xml-parser@5.5.8, fast-xml-parser@^5.5.6: version "5.7.1" resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.1.tgz" integrity sha512-8Cc3f8GUGUULg34pBch/KGyPLglS+OFs05deyOlY7fL2MTagYPKrVQNmR1fLF/yJ9PH5ZSTd3YDF6pnmeZU+zA== @@ -1639,20 +2056,27 @@ fast-xml-parser@^5.5.6: path-expression-matcher "^1.5.0" strnum "^2.2.3" -file-type@^21.3.2: - version "21.3.4" - resolved "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz" - integrity sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g== +fastq@^1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: - "@tokenizer/inflate" "^0.4.1" - strtok3 "^10.3.4" - token-types "^6.1.1" - uint8array-extras "^1.4.0" + reusify "^1.0.4" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" follow-redirects@^1.16.0: version "1.16.0" @@ -1683,21 +2107,41 @@ formdata-node@^4.3.2: node-domexception "1.0.0" web-streams-polyfill "4.0.0-beta.3" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fsevents@~2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +gaxios@^7.0.0, gaxios@^7.1.4: + version "7.3.1" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-7.3.1.tgz#b26223db05856dfa5e2393ea376abad00e479c62" + integrity sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ== + dependencies: + extend "^3.0.2" + https-proxy-agent "^7.0.1" + node-fetch "^3.3.2" + +gcp-metadata@8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-8.1.2.tgz#e62e3373ddf41fc727ccc31c55c687b798bee898" + integrity sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg== + dependencies: + gaxios "^7.0.0" + google-logging-utils "^1.0.0" + json-bigint "^1.0.0" + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" @@ -1727,6 +2171,14 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-tsconfig@^4.7.5: version "4.13.0" resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz" @@ -1734,23 +2186,42 @@ get-tsconfig@^4.7.5: dependencies: resolve-pkg-maps "^1.0.0" +google-auth-library@^10.3.0: + version "10.9.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-10.9.1.tgz#af9852a328a6077e8ffbe776681b4ca9420a1714" + integrity sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw== + dependencies: + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + gaxios "^7.1.4" + gcp-metadata "8.1.2" + google-logging-utils "1.1.3" + jws "^4.0.0" + +google-logging-utils@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-1.1.3.tgz#17b71f1f95d266d2ddd356b8f00178433f041b17" + integrity sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA== + +google-logging-utils@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-1.2.0.tgz#89dd643f986c765e61bfa2d01cada2292fe5bfd7" + integrity sha512-WE9av4wKDZgRjBwgVUabocx8T6/7o3Ca1Fat46FXDhXVAFibzNadedcOXrdgd1Kzmk8tsk/9ZH89Wyf/SqeZ3A== + gopd@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graphql-request@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz" - integrity sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw== +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== dependencies: - "@graphql-typed-document-node/core" "^3.2.0" - cross-fetch "^3.1.5" - -"graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", graphql@^16.12.0, "graphql@14 - 16": - version "16.13.2" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz" - integrity sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig== + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" has-flag@^4.0.0: version "4.0.0" @@ -1776,6 +2247,19 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +human-signals@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" + integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" @@ -1783,42 +2267,55 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -ibm-cloud-sdk-core@*, ibm-cloud-sdk-core@^5.4.9: - version "5.4.11" - resolved "https://registry.npmjs.org/ibm-cloud-sdk-core/-/ibm-cloud-sdk-core-5.4.11.tgz" - integrity sha512-UYm6i3OCcQ1sBOVIJh0gcwCNltiGCf7QBCPaDtqCXuHIPbn8m9sKqVBqfrgFuQpenAak/Yv/450Vw+tC59XVIQ== - dependencies: - "@types/debug" "^4.1.12" - "@types/node" "^18.19.80" - "@types/tough-cookie" "^4.0.0" - axios "1.15.0" - camelcase "^6.3.0" - debug "^4.3.4" - dotenv "^16.4.5" - extend "3.0.2" - file-type "^21.3.2" - form-data "^4.0.4" - isstream "0.1.2" - jsonwebtoken "^9.0.3" - load-esm "^1.0.3" - mime-types "2.1.35" - retry-axios "^2.6.0" - tough-cookie "^4.1.3" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.6.tgz#6a57aaef4c90df27ac3590875d29e8f11988c88e" + integrity sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -isstream@0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +is-network-error@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.2.tgz#9460bc30f8419a4bca77114f4de88a3ee5e0c519" + integrity sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA== + +is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jose@^6.2.3: + version "6.2.10" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.10.tgz#b70436c920c4b3f97314c28a8b8612c15b1d9e7f" + integrity sha512-iiW7J9qRFlGxvCOIBDBDxFePQSn7ZMAnrYGhrrOo6siO/MIqwfyilLR27pkfDgUk+raLuzADS8A3S/KLBisc0g== + +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== js-tiktoken@^1.0.12: version "1.0.21" @@ -1827,6 +2324,14 @@ js-tiktoken@^1.0.12: dependencies: base64-js "^1.5.1" +js-yaml@^3.13.1: + version "3.15.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.15.2.tgz#3f83823ac6be17f570f23b2ecdef3777ff5ea364" + integrity sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1834,27 +2339,33 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-schema-to-zod@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/json-schema-to-zod/-/json-schema-to-zod-2.8.1.tgz#684fcbe64cb178c1008c498209fff0890c9de725" + integrity sha512-fRr1mHgZ7hboLKBUdR428gd9dIHUFGivUqOeiDcSmyXkNZCtB1uGaZLvsjZ4GaN5pwBIs+TGIOf6s+Rp5/R/zA== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + jsonpointer@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jsonwebtoken@^9.0.2, jsonwebtoken@^9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz" - integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== - dependencies: - jws "^4.0.1" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - jwa@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz" @@ -1864,15 +2375,20 @@ jwa@^2.0.1: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jws@^4.0.1: +jws@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== dependencies: jwa "^2.0.1" safe-buffer "^5.0.1" -langchain@^0.3.37, "langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0": +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +langchain@^0.3.37: version "0.3.37" resolved "https://registry.npmjs.org/langchain/-/langchain-0.3.37.tgz" integrity sha512-1jPsZ6xsxkcQPUvqRjvfuOLwZLLyt49hzcOK7OYAJovIkkOxd5gzK4Yw6giPUQ8g4XHyvULNlWBz+subdkcokw== @@ -1902,84 +2418,445 @@ langsmith@^0.3.67: semver "^7.6.3" uuid "^10.0.0" -load-esm@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz" - integrity sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA== - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -long@^5.0.0, long@^5.3.2: +long@^5.0.0: version "5.3.2" resolved "https://registry.npmjs.org/long/-/long-5.3.2.tgz" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +lru-cache@^11.2.7: + version "11.5.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.2.tgz#00e16665c90c620fba14a3c368732a976493f760" + integrity sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g== -math-expression-evaluator@^2.0.0: - version "2.0.7" - resolved "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-2.0.7.tgz" - integrity sha512-uwliJZ6BPHRq4eiqNWxZBDzKUiS5RIynFFcgchqhBOloVLVBpZpNG8jRYkedLcBvhph8TnRyWEuxPqiQcwIdog== +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mdast-util-find-and-replace@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== + dependencies: + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-from-markdown@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" + integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" + +mdast-util-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromark@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@2.1.35: +mime-types@^2.1.12: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: +ms@^2.0.0, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1989,43 +2866,41 @@ mustache@^4.2.0: resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== -nice-grpc-client-middleware-retry@^3.1.13: - version "3.1.14" - resolved "https://registry.npmjs.org/nice-grpc-client-middleware-retry/-/nice-grpc-client-middleware-retry-3.1.14.tgz" - integrity sha512-n/E3n73R6N59Ef7YJ34NvCOQs45ZK4JhlKQn1uV5HuM2PktUoG2KKhoAaxn+7zdtV9dwstPLSv5IT/XxMle0og== - dependencies: - abort-controller-x "^0.5.0" - nice-grpc-common "^2.0.3" - -nice-grpc-common@^2.0.2, nice-grpc-common@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.3.tgz" - integrity sha512-MEhnD3JMah0mgyivpb9hpRDbOBuXBxI/TVO+OK1h6rC97WM42HsPMR+zzRNQ0C5BqYJTw1nyWiQRD0DucO+pjQ== - dependencies: - ts-error "^1.0.6" - -nice-grpc@^2.1.14: - version "2.1.15" - resolved "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.15.tgz" - integrity sha512-agPIt7dtQASnN5p1X3c2S5amDhWRWRT0Jp62trmpMBKSbkm87l8bG2slqxSthlrGa4AnRPG8+lFf4y8nn+Pogw== - dependencies: - "@grpc/grpc-js" "^1.14.0" - abort-controller-x "^0.5.0" - nice-grpc-common "^2.0.3" - -node-domexception@1.0.0: +node-domexception@1.0.0, node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -openai@*, openai@^4.104.0, openai@^4.49.0, openai@^4.62.1: +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + dependencies: + path-key "^4.0.0" + unicorn-magic "^0.3.0" + +openai@5.12.2: + version "5.12.2" + resolved "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz" + integrity sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ== + +openai@^4.104.0, openai@^4.49.0: version "4.104.0" resolved "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz" integrity sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA== @@ -2038,25 +2913,15 @@ openai@*, openai@^4.104.0, openai@^4.49.0, openai@^4.62.1: formdata-node "^4.3.2" node-fetch "^2.6.7" -openai@5.12.2: - version "5.12.2" - resolved "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz" - integrity sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ== - openapi-types@^12.1.3: version "12.1.3" resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz" integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== -openlayer@^0.22.2: - version "0.22.2" - resolved "https://registry.npmjs.org/openlayer/-/openlayer-0.22.2.tgz" - integrity sha512-hyCQGE9txiUVkJTc3Ve+fzhUg28Ct2zS1FfeIIDKyf917lQ1GRYN6Q96js1n0AN5VryVxEypaFYyo5e0OTJgkg== +"openlayer@file:..": + version "0.30.1" dependencies: "@aws-sdk/client-bedrock-agent-runtime" "^3.862.0" - "@langchain/community" "^0.3.59" - "@langchain/core" "^0.3.80" - "@langchain/langgraph" "^0.4.9" commander "^12.1.0" openai "^4.49.0" performance-now "^2.1.0" @@ -2067,6 +2932,11 @@ p-finally@^1.0.0: resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== +p-map@^7.0.4: + version "7.0.6" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.6.tgz#5b6ee7f1a775faa48599c8d4420f6a39833cd387" + integrity sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg== + p-queue@^6.6.2: version "6.6.2" resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" @@ -2075,14 +2945,21 @@ p-queue@^6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-retry@4: +p-retry@4, p-retry@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" retry "^0.13.1" +p-retry@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-7.1.1.tgz#7470fdecb1152ba50f1334e48378c9e401330e24" + integrity sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w== + dependencies: + is-network-error "^1.1.0" + p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" @@ -2090,31 +2967,51 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + path-expression-matcher@^1.1.3, path-expression-matcher@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz" integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -playwright-core@1.59.1: - version "1.59.1" - resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz" - integrity sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg== +picomatch@^4.0.3: + version "4.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" + integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== -playwright@^1.32.1, playwright@1.59.1: - version "1.59.1" - resolved "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz" - integrity sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw== +posthog-node@^5.46.1: + version "5.51.3" + resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-5.51.3.tgz#26ffcd328bb8c038914e88aaf0c370b425f45d78" + integrity sha512-11bPNCIAec9cjVdaX6vllYTtGviIX6k/qdF3IXG5dbbmXalym91nmkFy9npalSv8DQi8jcbEkhVz3AD7qrhaww== dependencies: - playwright-core "1.59.1" - optionalDependencies: - fsevents "2.3.2" + "@posthog/core" "^1.48.12" + +pretty-ms@^9.2.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.3.0.tgz#dd2524fcb3c326b4931b2272dfd1e1a8ed9a9f5a" + integrity sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ== + dependencies: + parse-ms "^4.0.0" -protobufjs@^7.5.5: +protobufjs@^7.5.3, protobufjs@^7.5.4, protobufjs@^7.5.5: version "7.5.5" resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.5.tgz" integrity sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg== @@ -2137,63 +3034,112 @@ proxy-from-env@^2.1.0: resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz" integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== -psl@^1.1.33: - version "1.15.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - -punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +remark-gfm@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + +remend@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/remend/-/remend-1.3.1.tgz#474575f709d39d01f5d3b04333d4fa40d4491133" + integrity sha512-N3DiY5qbRPoa5vkxn1oDLMyXOVTeo6Hp+XOj6SIqJAYUgLS0Q587gILPMom/qm86AQ/ZrcOdwEIzCz8V3J0nxQ== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-pkg-maps@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -retry-axios@^2.6.0: - version "2.6.0" - resolved "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz" - integrity sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ== - retry@^0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + safe-buffer@^5.0.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -semver@^7.5.4, semver@^7.6.3: +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver@^7.6.3: version "7.7.2" resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-wcswidth@^1.0.1: version "1.1.2" resolved "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz" integrity sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -2210,18 +3156,21 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + strnum@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz" integrity sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg== -strtok3@^10.3.4: - version "10.3.5" - resolved "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz" - integrity sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA== - dependencies: - "@tokenizer/token" "^0.3.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" @@ -2229,60 +3178,22 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -token-types@^6.1.1: - version "6.1.2" - resolved "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz" - integrity sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww== - dependencies: - "@borewit/text-codec" "^0.2.1" - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" +tokenx@^1.3.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tokenx/-/tokenx-1.6.0.tgz#8a5fde974ebd559d43081f143c7d70750b6dbea1" + integrity sha512-CKTjk345ajvBAUp5xUI9a5KKN0zU0lBueVHQbCskH1Hp6WkUKsPW2qGCYNs0pxNyfzxfo+IIjdt2W4sMbw/qBw== tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-error@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz" - integrity sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA== - -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@^1.11.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.3.1, tslib@^2.6.2: +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + +tslib@^2.6.2: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -2297,79 +3208,111 @@ tsx@^4.21.0: optionalDependencies: fsevents "~2.3.3" -typescript@^5.9.3, typescript@>=2.7: +typescript@^5.9.3: version "5.9.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== -uint8array-extras@^1.4.0: - version "1.5.0" - resolved "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz" - integrity sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A== - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~7.12.0: - version "7.12.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz" - integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== +undici@^7.28.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.29.0.tgz#ae0f6f62e06e057a9cbb7b2b5fde2bb74f791b8f" + integrity sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + +unified@^11.0.0, unified@^11.0.5: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== +unist-util-visit@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" uuid@^10.0.0: version "10.0.0" resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +uuid@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.1.tgz#f6d81d2e1c65d00762e5e29b16c5d2d995e208ad" + integrity sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ== uuid@^9.0.1: version "9.0.1" resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -weaviate-client@^3.5.2: - version "3.12.1" - resolved "https://registry.npmjs.org/weaviate-client/-/weaviate-client-3.12.1.tgz" - integrity sha512-rpkWkJlrhmMqJrfva7uKmGgr3oIbw717yQ440Sxo/5CXdSDMFFJ5KAo02ij1a1RgtqrT9D4sbGK966yxhro96g== - dependencies: - "@datastructures-js/deque" "^1.0.8" - abort-controller-x "^0.5.0" - graphql "^16.12.0" - graphql-request "^6.1.0" - long "^5.3.2" - nice-grpc "^2.1.14" - nice-grpc-client-middleware-retry "^3.1.13" - nice-grpc-common "^2.0.2" - uuid "^9.0.1" +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" @@ -2383,6 +3326,13 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -2392,17 +3342,27 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -ws@^8.14.2, ws@^8.18.0: +ws@^8.18.0: version "8.18.3" resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== +ws@^8.21.0: + version "8.21.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.3.tgz#660b4faddb6a3e575c86e078126919961f4de4fc" + integrity sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw== + +xxhash-wasm@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz#ffe7f0b98220a4afac171e3fb9b6d1f8771f015e" + integrity sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaml@^2.8.3: +yaml@^2.2.1, yaml@^2.8.3: version "2.8.4" resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz" integrity sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog== @@ -2425,17 +3385,34 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yoctocolors@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.2.0.tgz#c4b68ee477f3982c33e4de24a5aa4a354be506d3" + integrity sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg== + +zod-from-json-schema@^0.5.2: + version "0.5.6" + resolved "https://registry.yarnpkg.com/zod-from-json-schema/-/zod-from-json-schema-0.5.6.tgz#a8c7a188a795715d6fff15604101a37dd455d4b1" + integrity sha512-U33AJ7ZWS6y9XNSzMWcdy8hRAvZmWhTtpYJu0SXPT5AArbc9nq2ur7Magzmn5RF9KBV4b3FP0nCpmqqlfXlR9w== + dependencies: + zod "^4.0.17" -zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.23.5, zod-to-json-schema@^3.x: +zod-to-json-schema@^3.22.3: version "3.24.6" resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz" integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== -zod@^3.23.8, zod@^3.24.1, zod@^3.25.32: +zod@^3.25.32: version "3.25.76" resolved "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== + +zod@^4.0.17, zod@^4.2.0, zod@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.4.3.tgz#b680f172885d18bbebf21a834ea25e55a1bbf356" + integrity sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/package.json b/package.json index f7487d8..4f9883a 100644 --- a/package.json +++ b/package.json @@ -34,12 +34,17 @@ "uuid": "^9.0.1" }, "devDependencies": { + "@ai-sdk/openai": "^4.0.50", "@anthropic-ai/claude-agent-sdk": "^0.2.111", "@arethetypeswrong/cli": "^0.17.0", "@google/genai": "^2.13.0", "@langchain/community": "^1.1.29", "@langchain/core": "^1.1.49", "@langchain/langgraph": "^1.4.2", + "@mastra/core": "^1.63.0", + "@mastra/observability": "^1.17.3", + "@mastra/otel-exporter": "^1.3.11", + "@opentelemetry/exporter-trace-otlp-proto": "^0.221.0", "@swc/core": "^1.3.102", "@swc/jest": "^0.2.29", "@types/jest": "^29.4.0", @@ -60,7 +65,8 @@ "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "5.8.3", - "typescript-eslint": "8.31.1" + "typescript-eslint": "8.31.1", + "zod": "^4.4.3" }, "bin": { "openlayer": "bin/cli" @@ -95,6 +101,11 @@ "require": "./dist/lib/integrations/claudeAgentSdk.js", "types": "./dist/lib/integrations/claudeAgentSdk.d.ts" }, + "./integrations/mastra": { + "import": "./dist/lib/integrations/mastra/index.mjs", + "require": "./dist/lib/integrations/mastra/index.js", + "types": "./dist/lib/integrations/mastra/index.d.ts" + }, "./*.mjs": { "default": "./dist/*.mjs" }, @@ -111,7 +122,10 @@ "@google/genai": ">=1 <3", "@langchain/community": ">=0.3.59 <2", "@langchain/core": ">=0.3.80 <2", - "@langchain/langgraph": ">=0.4.9 <2" + "@langchain/langgraph": ">=0.4.9 <2", + "@mastra/core": ">=1.16.0 <2", + "@mastra/otel-exporter": ">=1.3.0 <2", + "@opentelemetry/exporter-trace-otlp-proto": ">=0.200.0 <1" }, "peerDependenciesMeta": { "@anthropic-ai/claude-agent-sdk": { @@ -128,6 +142,15 @@ }, "@langchain/langgraph": { "optional": true + }, + "@mastra/core": { + "optional": true + }, + "@mastra/otel-exporter": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "optional": true } } } diff --git a/src/lib/integrations/mastra.ts b/src/lib/integrations/mastra.ts new file mode 100644 index 0000000..84a8460 --- /dev/null +++ b/src/lib/integrations/mastra.ts @@ -0,0 +1,12 @@ +/** + * Public entry point for the Mastra integration. + * + * The implementation lives in `./mastra/`; this flat module exists so the + * integration is reachable as `openlayer/lib/integrations/mastra`, matching + * every other integration in this package. `dist/package.json`'s `exports` + * map is regenerated from a directory scan at build time + * (scripts/utils/postprocess-files.cjs), which discards hand-authored + * subpaths — so only paths matching the generated `./lib/*` wildcard are + * reachable by consumers. + */ +export * from './mastra/index'; diff --git a/src/lib/integrations/mastra/genaiMessages.ts b/src/lib/integrations/mastra/genaiMessages.ts new file mode 100644 index 0000000..43e3adc --- /dev/null +++ b/src/lib/integrations/mastra/genaiMessages.ts @@ -0,0 +1,145 @@ +/** + * Coercion of arbitrary Mastra span input/output values into OpenTelemetry + * GenAI semantic-convention v1.38 message arrays. + * + * Openlayer's OTLP ingest builds a row's input and output *only* from + * `gen_ai.input.messages` / `gen_ai.output.messages` in this shape. Every + * other convention that was tested — OpenInference `input.value`, traceloop + * `traceloop.entity.input`, gen_ai span events, `gen_ai.prompt` — produced an + * empty row. This module is therefore what makes a Mastra trace legible to + * Openlayer at all. + */ + +/** A single content part of a GenAI message. Only text parts are produced. */ +export interface GenAITextPart { + type: 'text'; + content: string; +} + +/** A GenAI semconv v1.38 message. */ +export interface GenAIMessage { + role: string; + parts: GenAITextPart[]; + finish_reason?: string; +} + +const UNSERIALIZABLE = '[unserializable]'; + +/** + * JSON.stringify that degrades instead of throwing. A throw inside the + * exporter's `export()` would drop the whole batch, so nothing in this module + * is allowed to raise. + */ +function safeStringify(value: unknown): string { + try { + const serialized = JSON.stringify(value); + return serialized === undefined ? String(value) : serialized; + } catch { + return UNSERIALIZABLE; + } +} + +function textMessage(role: string, content: string, finishReason?: string): GenAIMessage { + const message: GenAIMessage = { role, parts: [{ type: 'text', content }] }; + if (finishReason) { + message.finish_reason = finishReason; + } + return message; +} + +/** + * Mastra stringifies span input/output before setting the attribute, so a + * value arriving here is often JSON in a string. Parse it when it plausibly + * is, and fall back to treating it as literal text when it is not. + */ +function maybeParseJson(value: unknown): unknown { + if (typeof value !== 'string') { + return value; + } + const trimmed = value.trim(); + if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) { + return value; + } + try { + return JSON.parse(trimmed); + } catch { + return value; + } +} + +function contentToText(content: unknown): string { + if (typeof content === 'string') { + return content; + } + if (content === undefined || content === null) { + return ''; + } + return safeStringify(content); +} + +function coerceEntry(entry: unknown, defaultRole: string, finishReason?: string): GenAIMessage { + if (typeof entry === 'string') { + return textMessage(defaultRole, entry, finishReason); + } + if (entry === null || typeof entry !== 'object') { + return textMessage(defaultRole, String(entry), finishReason); + } + + const record = entry as Record; + const role = typeof record['role'] === 'string' ? record['role'] : defaultRole; + const existingFinishReason = record['finish_reason']; + const resolvedFinishReason = typeof existingFinishReason === 'string' ? existingFinishReason : finishReason; + + // Already in the v1.38 `parts` shape — pass it through untouched. + if (Array.isArray(record['parts'])) { + const message: GenAIMessage = { role, parts: record['parts'] as GenAITextPart[] }; + if (resolvedFinishReason) { + message.finish_reason = resolvedFinishReason; + } + return message; + } + + return textMessage(role, contentToText(record['content']), resolvedFinishReason); +} + +/** + * Coerce a Mastra span input/output value into GenAI v1.38 messages. + * + * @param value Whatever Mastra put on the span. + * @param defaultRole Role for content that carries none — 'user' for input, + * 'assistant' for output. + * @param finishReason Applied only to entries that do not specify their own. + * @returns The messages, or `undefined` when there is nothing to + * report — callers must not write the attribute then. + */ +export function toGenAIMessages( + value: unknown, + defaultRole: string, + finishReason?: string, +): GenAIMessage[] | undefined { + if (value === undefined || value === null) { + return undefined; + } + + const parsed = maybeParseJson(value); + + if (typeof parsed === 'string') { + return parsed === '' ? undefined : [textMessage(defaultRole, parsed, finishReason)]; + } + + if (Array.isArray(parsed)) { + return parsed.length === 0 ? + undefined + : parsed.map((entry) => coerceEntry(entry, defaultRole, finishReason)); + } + + if (typeof parsed === 'object') { + const record = parsed as Record; + if (typeof record['role'] === 'string') { + return [coerceEntry(record, defaultRole, finishReason)]; + } + return [textMessage(defaultRole, safeStringify(parsed), finishReason)]; + } + + return [textMessage(defaultRole, String(parsed), finishReason)]; +} diff --git a/src/lib/integrations/mastra/index.ts b/src/lib/integrations/mastra/index.ts new file mode 100644 index 0000000..15d415f --- /dev/null +++ b/src/lib/integrations/mastra/index.ts @@ -0,0 +1,181 @@ +/** + * Openlayer exporter for Mastra's observability system. + * + * ```ts + * import { Mastra } from '@mastra/core'; + * import { Observability } from '@mastra/observability'; + * import { OpenlayerExporter } from 'openlayer/lib/integrations/mastra'; + * + * export const mastra = new Mastra({ + * observability: new Observability({ + * configs: { + * openlayer: { + * serviceName: 'my-service', + * exporters: [new OpenlayerExporter()], + * }, + * }, + * }), + * }); + * ``` + * + * With `OPENLAYER_API_KEY` and `OPENLAYER_INFERENCE_PIPELINE_ID` set, that is + * the entire integration. + */ +import { SpanType } from '@mastra/core/observability'; +import type { TracingEvent } from '@mastra/core/observability'; +import { OtelExporter } from '@mastra/otel-exporter'; +import type { OtelExporterConfig } from '@mastra/otel-exporter'; + +import { OpenlayerOTLPTraceExporter } from './otlpExporter'; + +export { toGenAIMessages } from './genaiMessages'; +export type { GenAIMessage, GenAITextPart } from './genaiMessages'; +export { rewriteSpanAttributes } from './spanRewriter'; +export type { SpanAttributes } from './spanRewriter'; +export { OpenlayerOTLPTraceExporter } from './otlpExporter'; + +/** Openlayer's OTLP trace endpoint. */ +export const OPENLAYER_OTLP_ENDPOINT = 'https://api.openlayer.com/v1/otel/v1/traces'; + +const LOG_PREFIX = '[OpenlayerExporter]'; + +/** + * Mastra emits one span per streaming chunk. Left unfiltered, a single + * streamed reply becomes hundreds of Openlayer steps. + * + * `MODEL_STEP` was measured (see `mastraExporter.live.test.ts`) to be 4 of 7 + * steps (57%) in a single one-tool-call turn, and considered for this list — + * but dropping it here does not reparent its children to the surviving + * `MODEL_GENERATION` ancestor: a live run with `MODEL_STEP` dropped lost the + * nested `tool_call` span (and its `toolResult`) entirely, rather than + * hoisting it. That is a materially worse outcome than the noise it would + * remove, so `MODEL_STEP` stays out of this list until the exporter can + * reparent orphaned children before dropping their parent. + */ +const DEFAULT_DROP_SPAN_TYPES: SpanType[] = [SpanType.MODEL_CHUNK]; + +export interface OpenlayerExporterConfig extends Omit { + /** Openlayer API key. Defaults to `OPENLAYER_API_KEY`. */ + apiKey?: string; + /** Destination pipeline. Defaults to `OPENLAYER_INFERENCE_PIPELINE_ID`. */ + inferencePipelineId?: string; + /** OTLP endpoint override. Defaults to `OPENLAYER_OTEL_ENDPOINT`, then {@link OPENLAYER_OTLP_ENDPOINT}. */ + endpoint?: string; + /** Reported as the `service.name` resource attribute. */ + projectName?: string; + /** Extra headers merged into every OTLP request. */ + headers?: Record; + /** + * Span types this exporter drops. Defaults to `[SpanType.MODEL_CHUNK]`; + * pass `[]` to export everything. + * + * Deliberately **not** named `excludeSpanTypes`: Mastra's + * `ObservabilityInstanceConfig.excludeSpanTypes` already exists one layer up + * and drops spans before any exporter sees them. Use that one to filter for + * every exporter; use this one only to change what Openlayer alone receives. + */ + dropSpanTypes?: SpanType[]; +} + +interface ResolvedConfig { + otelConfig: OtelExporterConfig; + droppedSpanTypes: Set; + disabledReason?: string; +} + +/** + * Resolve user config plus environment into the shape `OtelExporter` wants. + * + * Kept outside the class so the constructor has exactly one `super()` call. + * Two `super()` calls in different branches would make the emit order of the + * `name` field initializer depend on TypeScript's downlevel-class behaviour — + * not something worth relying on. + * + * Extra keys (`apiKey`, `projectName`, …) are passed through to `super` + * untouched; `OtelExporter` ignores what it does not recognise, and + * `@mastra/arize` does the same. + */ +function resolveExporterConfig(config: OpenlayerExporterConfig): ResolvedConfig { + const apiKey = config.apiKey ?? process.env['OPENLAYER_API_KEY']; + const inferencePipelineId = config.inferencePipelineId ?? process.env['OPENLAYER_INFERENCE_PIPELINE_ID']; + const endpoint = config.endpoint ?? process.env['OPENLAYER_OTEL_ENDPOINT'] ?? OPENLAYER_OTLP_ENDPOINT; + + const droppedSpanTypes = new Set( + (config.dropSpanTypes ?? DEFAULT_DROP_SPAN_TYPES).map((type) => String(type)), + ); + + const missing: string[] = []; + if (!apiKey) missing.push('apiKey (set OPENLAYER_API_KEY or pass apiKey)'); + if (!inferencePipelineId) { + missing.push('inferencePipelineId (set OPENLAYER_INFERENCE_PIPELINE_ID or pass inferencePipelineId)'); + } + + if (missing.length > 0) { + // Mirrors @mastra/arize: build a valid-but-inert parent config, then let + // the constructor disable us. A misconfigured exporter must never take + // down the host application. + return { + droppedSpanTypes, + disabledReason: `${LOG_PREFIX} Missing required configuration: ${missing.join('; ')}.`, + otelConfig: { + ...config, + signals: { logs: false }, + provider: { + custom: { endpoint: 'http://disabled', headers: {}, protocol: 'http/protobuf' }, + }, + }, + }; + } + + const headers: Record = { + Authorization: `Bearer ${apiKey}`, + 'x-bt-parent': `pipeline_id:${inferencePipelineId}`, + ...config.headers, + }; + + return { + droppedSpanTypes, + otelConfig: { + ...config, + // Placed after `...config`, like `signals`/`resourceAttributes`/`provider` + // below: the `Omit` type + // blocks a caller from passing `exporter` at compile time, but nothing + // stops it in plain JS, and `exporter` spread before `...config` would + // let a stray key silently replace this rewriting exporter — reintroducing + // the empty-input/output defect this whole integration exists to fix. + exporter: new OpenlayerOTLPTraceExporter({ url: endpoint, headers }), + // Openlayer's OTLP endpoint accepts traces only; leaving logs enabled + // would demand an @opentelemetry/exporter-logs-otlp-proto nobody installed. + signals: { logs: false, ...config.signals }, + resourceAttributes: { + ...(config.projectName ? { 'service.name': config.projectName } : {}), + ...config.resourceAttributes, + }, + // Protocol is forced: the endpoint parses protobuf only. + provider: { custom: { endpoint, headers, protocol: 'http/protobuf' } }, + }, + }; +} + +export class OpenlayerExporter extends OtelExporter { + override name = 'openlayer'; + + private readonly droppedSpanTypes: Set; + + constructor(config: OpenlayerExporterConfig = {}) { + const resolved = resolveExporterConfig(config); + super(resolved.otelConfig); + + this.droppedSpanTypes = resolved.droppedSpanTypes; + if (resolved.disabledReason) { + this.setDisabled(resolved.disabledReason); + } + } + + protected override async _exportTracingEvent(event: TracingEvent): Promise { + if (this.droppedSpanTypes.has(String(event.exportedSpan.type))) { + return; + } + await super._exportTracingEvent(event); + } +} diff --git a/src/lib/integrations/mastra/otlpExporter.ts b/src/lib/integrations/mastra/otlpExporter.ts new file mode 100644 index 0000000..f3b5253 --- /dev/null +++ b/src/lib/integrations/mastra/otlpExporter.ts @@ -0,0 +1,45 @@ +/** + * OTLP/protobuf trace exporter that applies Openlayer's attribute rewrites on + * the way out. + * + * Structurally identical to `@mastra/arize`'s `OpenInferenceOTLPTraceExporter`: + * the vendor-specific mapping belongs in `export()`, because the attribute key + * a payload lands under is chosen inside `@mastra/otel-exporter`'s + * `getAttributes()` from the span's type. Mastra's `customSpanFormatter` hook + * runs earlier and cannot change that decision. + * + * Protobuf is not a preference: Openlayer's OTLP endpoint rejects an OTLP/JSON + * body with `400 Failed to parse OpenTelemetry protobuf data` whatever the + * Content-Type says. + */ +import type { ExportResult } from '@opentelemetry/core'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; +import type { ReadableSpan } from '@opentelemetry/sdk-trace-base'; + +import { rewriteSpanAttributes } from './spanRewriter'; + +export class OpenlayerOTLPTraceExporter extends OTLPTraceExporter { + override export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void { + for (const span of spans) { + try { + // ReadableSpan.attributes is readonly by type but mutable in practice. + // Mutating it in place is safe — not merely "additive, so it's fine" — + // because each `OtelExporter` instance owns an exclusive `SpanConverter` + // and calls `convertSpan()` per tracing event + // (@mastra/otel-exporter dist/index.cjs:973-974), and `convertSpan()` + // returns a freshly built `ReadableSpan` with a freshly built + // `attributes` object every time (ibid. getAttributes() at :419, + // convertSpan() at :601-647). No two exporters — e.g. this one and + // `@mastra/arize`'s — ever see the same span object, so this rewrite + // cannot leak into a sibling exporter's copy. That guarantee holds even + // for a rewrite that *replaces* a value, as `PROVIDER_SLUG_ALIASES` + // does, not just for additive ones. + (span as { attributes: Record }).attributes = rewriteSpanAttributes(span.attributes); + } catch { + // A rewrite failure must never cost us the batch — export unchanged. + } + } + + super.export(spans, resultCallback); + } +} diff --git a/src/lib/integrations/mastra/spanRewriter.ts b/src/lib/integrations/mastra/spanRewriter.ts new file mode 100644 index 0000000..206540c --- /dev/null +++ b/src/lib/integrations/mastra/spanRewriter.ts @@ -0,0 +1,222 @@ +/** + * Rewrites the OpenTelemetry span attributes produced by `@mastra/otel-exporter` + * so Openlayer's OTLP ingest can read them. + * + * Mastra already emits GenAI semconv v1.38 — but it only sets + * `gen_ai.input.messages` / `gen_ai.output.messages` on MODEL_GENERATION spans. + * Every other span type, including the AGENT_RUN and WORKFLOW_RUN roots that + * Openlayer builds a row's input and output from, carries its payload under + * `mastra..input` / `.output`, which Openlayer files into step + * metadata and never reads. Left alone, a Mastra trace lands with correct + * hierarchy, cost, tokens and latency — and an empty input and output. + * + * Both `@mastra/arize` and `@mastra/langfuse` solve the same problem the same + * way: scan for a `mastra.*` payload key, guarded on the gen_ai attributes + * being absent. This is a capability guard rather than a span-type allowlist, + * so it degrades gracefully as Mastra adds span types, and it yields the + * required "leave model and tool spans alone" behaviour for free. + * + * A second, unrelated gap lives here too: some `gen_ai.provider.name` values + * Mastra reports (e.g. `openai.responses`) don't match Openlayer's cost table + * even though the underlying vendor is priced under a different slug. See + * `normalizeProviderSlug` below. + */ +import { toGenAIMessages } from './genaiMessages'; + +/** OTel span attributes. Values must stay primitives on the wire. */ +export type SpanAttributes = Record; + +const LOG_PREFIX = '[OpenlayerExporter]'; + +const GEN_AI_INPUT_MESSAGES = 'gen_ai.input.messages'; +const GEN_AI_OUTPUT_MESSAGES = 'gen_ai.output.messages'; +const GEN_AI_TOOL_CALL_ARGUMENTS = 'gen_ai.tool.call.arguments'; +const GEN_AI_TOOL_CALL_RESULT = 'gen_ai.tool.call.result'; + +// `gen_ai.provider.name` is the current stable GenAI semconv attribute (and +// the one `@mastra/otel-exporter` 1.3.11 actually sets, confirmed by logging +// a live span's attributes); `gen_ai.system` is the OTel name it superseded. +// Both are checked because a producer's semconv version is not this +// exporter's to control. +const GEN_AI_PROVIDER_NAME = 'gen_ai.provider.name'; +const GEN_AI_SYSTEM = 'gen_ai.system'; + +const SESSION_ID = 'session.id'; +const USER_ID = 'user.id'; + +const MASTRA_PREFIX = 'mastra.'; +const MASTRA_METADATA_PREFIX = 'mastra.metadata.'; +const MASTRA_SPAN_TYPE = 'mastra.span.type'; + +const MASTRA_METADATA_SESSION_ID = 'mastra.metadata.sessionId'; +const MASTRA_METADATA_THREAD_ID = 'mastra.metadata.threadId'; +const MASTRA_METADATA_USER_ID = 'mastra.metadata.userId'; + +/** + * Span types whose payload maps natively via `gen_ai.tool.call.*` and must + * never be synthesized from `mastra..input` / `.output`. Today's + * `@mastra/otel-exporter` only reaches the `mastra.*` fallback branch for + * non-tool span types, so this guard is unreachable in practice — it exists + * as defense in depth rather than to fix an observed failure, since the + * "never rewrite tool spans" rule must not depend on a third-party package's + * private branch structure holding across future Mastra versions. + * + * `client_tool_call` is deliberately absent from this set. Mastra's own tool + * branch in `@mastra/otel-exporter` omits it too, so a `client_tool_call` + * span never gets `gen_ai.tool.call.*` in the first place — it carries + * `mastra.client_tool_call.input` / `.output` like any non-tool span. There is + * nothing native to protect there, so the capability guard in + * `recoverMessages` below already does the right thing for it unassisted. + */ +const TOOL_SPAN_TYPES = new Set(['tool_call', 'mcp_tool_call', 'provider_tool_call']); + +/** + * Find the `mastra..input` / `.output` key holding a span's payload. + * + * `mastra.metadata.` is excluded so a user's own metadata key that happens to + * end in `.input` is never mistaken for span input. `@mastra/langfuse`'s + * equivalent scan lacks this guard; `@mastra/arize` partitions the prefix off + * separately for the same reason. + */ +function findMastraPayloadKey(attributes: SpanAttributes, suffix: '.input' | '.output'): string | undefined { + for (const key of Object.keys(attributes)) { + if (!key.startsWith(MASTRA_PREFIX)) continue; + if (key.startsWith(MASTRA_METADATA_PREFIX)) continue; + if (!key.endsWith(suffix)) continue; + return key; + } + return undefined; +} + +/** Fill in gen_ai messages for spans where Mastra did not emit them. */ +function recoverMessages(attributes: SpanAttributes): void { + // Tool spans map natively via gen_ai.tool.call.arguments / .result. + // Synthesizing gen_ai.*.messages for them from mastra..input / .output + // was measured to make the Openlayer step strictly worse, so they are + // skipped outright rather than relying on the arguments/result attributes + // always being present together. + if (TOOL_SPAN_TYPES.has(String(attributes[MASTRA_SPAN_TYPE] ?? ''))) { + return; + } + + if (!attributes[GEN_AI_INPUT_MESSAGES] && !attributes[GEN_AI_TOOL_CALL_ARGUMENTS]) { + const key = findMastraPayloadKey(attributes, '.input'); + if (key !== undefined) { + const messages = toGenAIMessages(attributes[key], 'user'); + if (messages) { + attributes[GEN_AI_INPUT_MESSAGES] = JSON.stringify(messages); + } + } + } + + if (!attributes[GEN_AI_OUTPUT_MESSAGES] && !attributes[GEN_AI_TOOL_CALL_RESULT]) { + const key = findMastraPayloadKey(attributes, '.output'); + if (key !== undefined) { + const messages = toGenAIMessages(attributes[key], 'assistant', 'stop'); + if (messages) { + attributes[GEN_AI_OUTPUT_MESSAGES] = JSON.stringify(messages); + } + } + } +} + +/** + * Lift Mastra's session and user metadata to the attributes Openlayer reads. + * + * `session.id` and `user.id` were verified against the live endpoint; + * `gen_ai.conversation.id` fills the session but not the user, and + * `openlayer.session_id` is ignored entirely. These happen to be the exact + * names `@mastra/langfuse` already emits. + * + * Source attributes are deliberately kept — Openlayer preserves them into step + * metadata, and deleting them (as Langfuse does) would lose information. + * + * Both ids accept `string | number`, not just `string`. `SpanConverter.convertSpan` + * (`@mastra/otel-exporter`) copies `span.metadata` onto attributes verbatim except + * for objects, which it JSON-stringifies first — so a numeric database id such as + * `metadata: { userId: 4821 }` arrives here as a genuine `number`, and an + * object-valued id arrives already stringified (handled by the `string` branch, no + * special case needed). A `string`-only guard would silently drop the numeric case + * and leave `user.id` unset. + */ +function liftIdentity(attributes: SpanAttributes): void { + if (attributes[SESSION_ID] === undefined) { + const sessionId = attributes[MASTRA_METADATA_SESSION_ID] ?? attributes[MASTRA_METADATA_THREAD_ID]; + if (typeof sessionId === 'number' || (typeof sessionId === 'string' && sessionId !== '')) { + attributes[SESSION_ID] = String(sessionId); + } + } + + if (attributes[USER_ID] === undefined) { + const userId = attributes[MASTRA_METADATA_USER_ID]; + if (typeof userId === 'number' || (typeof userId === 'string' && userId !== '')) { + attributes[USER_ID] = String(userId); + } + } +} + +/** + * Openlayer's cost lookup (`llm-costs.openlayer.com`) is an exact, lowercased + * `(provider, model)` match against its cost table, with no server-side + * aliasing — an unrecognized provider slug silently yields a missing/zero + * cost, never an error. Mastra (via the AI SDK) reports dotted, + * API-shape-specific provider slugs — e.g. `openai.responses` for OpenAI's + * Responses API — that don't match Openlayer's table, even though the bare + * vendor slug (`openai`) does. `@mastra/otel-exporter`'s own provider + * normalization does not catch these either: it strips punctuation before + * comparing (`openai.responses` -> `openairesponses`), which never matches + * its own `openai` alias, so the dotted slug passes through unchanged. + * + * Every key here was verified individually against + * `https://llm-costs.openlayer.com/v1/costs//` before being + * added: the source slug 404s, the target slug prices. Never add an entry you + * have not confirmed this way — a wrong alias produces a wrong cost, which is + * worse than the missing cost it would replace. + */ +const PROVIDER_SLUG_ALIASES: Record = { + 'openai.responses': 'openai', + 'openai.chat': 'openai', + 'anthropic.messages': 'anthropic', + 'google.generative-ai': 'gemini', +}; + +/** + * Rewrite a known non-canonical provider slug to the one Openlayer's cost + * table uses. A slug not in {@link PROVIDER_SLUG_ALIASES} is left untouched — + * guessing a mapping is not an option here, only a verified one. + * + * A dotted slug that isn't in the table is exactly the failure this module + * exists to prevent — it will silently price at zero — so it gets a one-line + * `console.debug` naming the slug, matching this repo's existing convention + * (see `src/lib/tracing/tracer.ts`). Bare slugs like `openai` never match + * `.includes('.')` and so never log; mapped dotted slugs are rewritten above + * and never reach this branch. + */ +function normalizeProviderSlug(attributes: SpanAttributes): void { + for (const key of [GEN_AI_PROVIDER_NAME, GEN_AI_SYSTEM]) { + const value = attributes[key]; + if (typeof value !== 'string') continue; + + if (Object.prototype.hasOwnProperty.call(PROVIDER_SLUG_ALIASES, value)) { + attributes[key] = PROVIDER_SLUG_ALIASES[value]; + } else if (value.includes('.')) { + console.debug( + `${LOG_PREFIX} Unmapped provider slug "${value}" on ${key} — cost will be zero for it. ` + + 'Add a verified entry to PROVIDER_SLUG_ALIASES in spanRewriter.ts if this vendor prices under a bare slug.', + ); + } + } +} + +/** + * Apply every Openlayer rewrite rule to a span's attributes. + * + * Returns a new object; the input is not mutated. + */ +export function rewriteSpanAttributes(attributes: SpanAttributes): SpanAttributes { + const rewritten: SpanAttributes = { ...attributes }; + recoverMessages(rewritten); + liftIdentity(rewritten); + normalizeProviderSlug(rewritten); + return rewritten; +} diff --git a/tests/integrations/mastraExporter.live.test.ts b/tests/integrations/mastraExporter.live.test.ts new file mode 100644 index 0000000..35ad542 --- /dev/null +++ b/tests/integrations/mastraExporter.live.test.ts @@ -0,0 +1,268 @@ +/** + * Live end-to-end test for the Mastra Openlayer exporter. + * + * Skipped unless ``OPENLAYER_API_KEY`` is set. When it runs it exercises the + * real path: a real Mastra agent, the real OTLP export, the real Openlayer + * ingest, and a read-back of the resulting row. + * + * Every other test in this integration runs against mocked or synthetic + * data. The defect this integration exists to fix — a row arriving with + * correct hierarchy, cost, tokens and latency but empty input and output — + * is invisible to all of them. It only shows up in a row fetched back from + * the real API, which is what this test does. + * + * Env it expects: + * OPENLAYER_API_KEY — required to enable the test + * OPENLAYER_INFERENCE_PIPELINE_ID — destination pipeline (defaults below) + * OPENAI_API_KEY — required by the agent's model + * + * Running it live needs ``--experimental-vm-modules``: + * + * NODE_OPTIONS=--experimental-vm-modules npx jest \ + * tests/integrations/mastraExporter.live.test.ts + * + * `@ai-sdk/openai` ships ESM-only (`"type": "module"`, no `require` export), + * unlike `@mastra/core` and `@mastra/observability`, which both ship dual + * CJS/ESM builds and load fine under plain Jest. A *static* top-level import + * of an ESM-only package makes Jest's CJS module registry reject the file's + * syntax outright, before any test — including `it.skip` — ever runs. That + * previously broke the skip guarantee this suite depends on: `npm test` / + * `npx jest` (no flag, and CI has no credentials either) crashed the whole + * suite instead of skipping it, because `./scripts/test`'s `jest "$@"` call + * sets no `NODE_OPTIONS`, and that flag is deliberately not added there — + * it's shared infrastructure for every suite in the SDK, and one optional + * live test is not a reason to change how all of them run. The fix instead: + * every import of an ESM-only or ESM-preferring package is a lazy + * `await import(...)` inside the test body below, not a static top-level + * import. `it.skip` never runs the body, so the dynamic import never + * happens, so the file loads and skips cleanly with **no flag and no + * credentials** — verified directly, not assumed. The flag is only needed to + * actually run the live assertions once credentials are present; running + * live without it now fails just that one test with a normal Jest error, + * rather than crashing the whole suite before it can decide to skip. + * Unrelated root cause to the Vertex suite's flag requirement in + * `googleGenAiTracer.live.test.ts`, which is about a dynamic `import()` + * *inside a transitive dependency* (`gaxios`) at OAuth-refresh time, not a + * load-time syntax rejection. + */ +import { OpenlayerExporter } from '../../src/lib/integrations/mastra'; + +const itLive = process.env['OPENLAYER_API_KEY'] && process.env['OPENAI_API_KEY'] ? it : it.skip; + +const PIPELINE_ID = process.env['OPENLAYER_INFERENCE_PIPELINE_ID'] ?? 'cb47e4f7-15a0-4e70-bd6e-7b1b4b54e434'; + +/** + * A row appears in the listing as soon as it is ingested, but token counts + * (and cost, computed alongside them) are filled in by a server-side pass + * afterward. Polling only for existence (as the original draft did) caught + * the row mid-flight, before `openlayer_num_of_tokens` was populated — found + * empirically by running this test. Callers state the condition they + * actually need. + * + * Deliberately gated on tokens only, not `openlayer_cost` directly: while the + * `openai.responses` provider-slug gap was still unfixed, cost never arrived + * at all, and gating on it made every assertion below unreachable — `findRow` + * would just time out and throw before the test could tell the caller which + * other claims still held. Tokens turned out to be a reliable, always-present + * proxy for "the server-side pass has run" — confirmed live, cost is present + * by the same poll tokens are. + */ +function isSettled(row: any): boolean { + return typeof row?.['openlayer_num_of_tokens'] === 'number' && row['openlayer_num_of_tokens'] > 0; +} + +/** Poll the pipeline until a row named `name` shows up and satisfies `isReady`, or time out. */ +async function findRow( + name: string, + isReady: (row: any) => boolean = () => true, + timeoutMs = 90_000, +): Promise { + const deadline = Date.now() + timeoutMs; + let lastSeen: any; + while (Date.now() < deadline) { + const response = await fetch( + `https://api.openlayer.com/v1/inference-pipelines/${PIPELINE_ID}/rows?page=1&perPage=25&asc=false`, + { + method: 'POST', + headers: { + Authorization: `Bearer ${process.env['OPENLAYER_API_KEY']}`, + 'Content-Type': 'application/json', + }, + body: '{}', + }, + ); + const body = (await response.json()) as { items?: any[] }; + const match = body.items?.find((item) => String(item?.name ?? '').includes(name)); + if (match) { + lastSeen = match; + if (isReady(match)) return match; + } + await new Promise((resolve) => setTimeout(resolve, 5_000)); + } + if (lastSeen) { + throw new Error( + `row matching "${name}" appeared but never became ready; last seen ` + + `cost=${lastSeen['openlayer_cost']}, tokens=${lastSeen['openlayer_num_of_tokens']}, ` + + `model=${lastSeen['model']}, provider=${lastSeen['provider']}, ` + + `costDetails=${JSON.stringify(lastSeen['costDetails'])}`, + ); + } + throw new Error(`No Openlayer row matching "${name}" arrived within ${timeoutMs}ms`); +} + +describe('Mastra OpenlayerExporter live integration', () => { + itLive( + 'publishes a trace with usable input, output, cost, tokens and nested tool steps', + async () => { + // Lazy, not static top-level, imports — see the file header comment for + // why: a static import of ESM-only `@ai-sdk/openai` would make this + // file fail to load at all, before `it.skip` can even run, breaking the + // no-credentials skip path this suite depends on for CI. + const { openai } = await import('@ai-sdk/openai'); + const { Agent } = await import('@mastra/core/agent'); + const { Mastra } = await import('@mastra/core'); + const { createTool } = await import('@mastra/core/tools'); + const { Observability } = await import('@mastra/observability'); + const { z } = await import('zod'); + + const marker = `live-${Date.now()}`; + + const getWeather = createTool({ + id: 'get_weather', + description: 'Get the current weather for a city.', + inputSchema: z.object({ city: z.string() }), + outputSchema: z.object({ tempC: z.number() }), + execute: async () => ({ tempC: 24 }), + }); + + // `id` is required by the installed @mastra/core (1.63.0) AgentConfig, + // unlike the brief this test was drafted from. `mastra.getAgent('agent')` + // below resolves through the `agents: { agent }` map key, not this id. + const agent = new Agent({ + id: `live-weather-agent-${marker}`, + name: `LiveWeatherAgent-${marker}`, + instructions: 'You are a concise weather assistant. Always use the get_weather tool.', + model: openai('gpt-4o-mini'), + tools: { getWeather }, + }); + + const mastra = new Mastra({ + agents: { agent }, + observability: new Observability({ + configs: { + openlayer: { + serviceName: 'mastra-live-test', + exporters: [new OpenlayerExporter()], + }, + }, + }), + }); + + await mastra.getAgent('agent').generate('What is the weather in Lisbon?', { + tracingOptions: { metadata: { sessionId: `session-${marker}` } }, + }); + await mastra.observability.shutdown(); + + const row = await findRow(marker, isSettled); + + // The defect this integration exists to fix: root I/O must not be empty. + // Content, not just shape: `{}` and `[]` are both truthy in JS and both + // `!== '{}'` once stringified, so a bare truthy/non-`{}` check would + // still pass against an empty array — assert on the actual text. + expect(Array.isArray(row['openlayer_output'])).toBe(true); + expect(row['openlayer_output'].length).toBeGreaterThan(0); + // `content` is itself a JSON-stringified envelope (`{"text":...,"files":[]}`), + // not the answer — checking only that the envelope string is non-empty + // still passes against `'{"text":"","files":[]}'` (22 characters), which + // is exactly the empty-output shape this test exists to catch. Parse it + // and assert on the real text. Fail loudly rather than silently skipping + // the check if the content is ever not JSON — a swallowed parse failure + // here would recreate the same bug this assertion is meant to prevent. + const outputContent = row['openlayer_output'][0]?.content; + let outputEnvelope: any; + try { + outputEnvelope = JSON.parse(outputContent); + } catch (error) { + throw new Error( + `openlayer_output[0].content was not the expected JSON envelope: ` + + `${JSON.stringify(outputContent)} (${error})`, + ); + } + expect(typeof outputEnvelope.text).toBe('string'); + expect(outputEnvelope.text.length).toBeGreaterThan(0); + // The tool always returns tempC: 24, so a real answer must mention it — + // same robustness class as the `tempC` check on `steps` below. + expect(outputEnvelope.text).toContain('24'); + + // `openlayer_inputs` is a list of declared input-variable *names* + // (`["prompt"]`), not content — it is `true` whether or not the + // variable it names carries anything, so `toContain('prompt')` alone is + // a false positive against the exact defect this test exists to catch + // (same bug class as the `get_weather` string below). Keep it as a + // valid structural check, but assert on the actual content in the + // `prompt` column too: the real user message we sent, verified present + // on a live row. + expect(row['openlayer_inputs']).toContain('prompt'); + expect(Array.isArray(row['prompt'])).toBe(true); + const userMessage = row['prompt'].find((message: any) => message.role === 'user'); + expect(userMessage?.content).toBe('What is the weather in Lisbon?'); + + // Session metadata is lifted to session.id, which Openlayer reads. + expect(row['openlayer_session_id']).toBe(`session-${marker}`); + + // Hierarchy: the tool call is nested and mapped natively. Checking for + // the field *names* `functionName` / `toolResult` alone is the same + // false-positive shape as `openlayer_inputs` above — `"toolResult":""` + // would still contain the substring `toolResult`. Assert on the actual + // values instead: `functionName` is the `tools` map key (`getWeather`, + // not the tool's `id`), and `tempC` is the tool's real return value — + // it does not appear anywhere else in the trace (unlike `get_weather`, + // which the agent's system prompt text also contains), so its presence + // specifically confirms the tool's real output reached the row. + const steps = JSON.stringify(row['steps']); + expect(steps).toContain('"functionName":"getWeather"'); + expect(steps).toContain('tempC'); + + // Documented but unmeasured: MODEL_STEP spans carry mastra.model_step.input + // but no gen_ai messages, so the capability guard fires on them. Measured + // live: a single one-tool-call turn produced 7 steps, 4 of which (57%) + // were MODEL_STEP (and the MODEL_INFERENCE nested under them) — a real + // majority, and SpanType.MODEL_STEP was tried in DEFAULT_DROP_SPAN_TYPES + // to filter it. That was reverted: dropping a span here does not reparent + // its children, so a live run with MODEL_STEP dropped lost the nested + // tool_call span (and its toolResult) entirely rather than hoisting it to + // the surviving MODEL_GENERATION ancestor — worse than the noise it would + // remove. Left as a measurement rather than a filter until the exporter + // can reparent orphaned children before dropping their parent. + const modelStepCount = (steps.match(/model_step/g) ?? []).length; + console.log(`[live] model_step occurrences in trace: ${modelStepCount}`); + + // Model metadata and tokens are normalized server-side on this path. + // `model`/`provider` stay truthy-only rather than exact-matched: audited + // for the same false-positive shape as the assertions above, but nothing + // in this path rewrites either field to a wrong-but-truthy value (unlike + // `openlayer_cost`, which silently drops to a falsy value on a bad + // provider slug — that path already has its own exact-value regression + // guard below). `provider` specifically is also server-prettified + // (`"OpenAI"`, not the raw `openai` slug), so pinning it to a literal + // would break on a legitimate display-string change rather than a + // real regression. + expect(row['openlayer_num_of_tokens']).toBeGreaterThan(0); + expect(row['model']).toBeTruthy(); + expect(row['provider']).toBeTruthy(); + + // Regression guard for a real defect found by this test: Mastra's + // OpenAI Responses API calls report `gen_ai.provider.name` as + // `openai.responses`, and Openlayer's cost lookup is an exact lowercased + // (provider, model) match with no aliasing — confirmed directly against + // the live cost API, `openai/gpt-4o-mini-2024-07-18` prices while + // `openai.responses/gpt-4o-mini-2024-07-18` 404s. `rewriteSpanAttributes` + // now normalizes `gen_ai.provider.name` (and `gen_ai.system`) through a + // verified alias table (`PROVIDER_SLUG_ALIASES` in `spanRewriter.ts`) + // before export, so this should pass; if it starts failing again, check + // that table before assuming this assertion is wrong. + expect(row['openlayer_cost']).toBeGreaterThan(0); + }, + 180_000, + ); +}); diff --git a/tests/integrations/mastraExporter.test.ts b/tests/integrations/mastraExporter.test.ts new file mode 100644 index 0000000..8576701 --- /dev/null +++ b/tests/integrations/mastraExporter.test.ts @@ -0,0 +1,195 @@ +/** + * Tests for the Mastra `OpenlayerExporter`. + * + * These never reach the network: the exporter is constructed and inspected, + * and the span-type filter is driven through the protected + * `_exportTracingEvent` hook with `super` stubbed out. + */ +import { SpanType, TracingEventType } from '@mastra/core/observability'; + +import { OPENLAYER_OTLP_ENDPOINT, OpenlayerExporter } from '../../src/lib/integrations/mastra'; + +const ORIGINAL_ENV = { ...process.env }; + +function resetEnv(): void { + delete process.env['OPENLAYER_API_KEY']; + delete process.env['OPENLAYER_INFERENCE_PIPELINE_ID']; + delete process.env['OPENLAYER_OTEL_ENDPOINT']; +} + +/** + * Reach the resolved OTLP url/headers the exporter handed to its span exporter. + * + * The installed `@opentelemetry/exporter-trace-otlp-proto` (0.221.0) wraps the + * real HTTP exporter behind `OTLPTraceExporter#_delegate._transport._transport`, + * not `_transport` directly as in older versions — and its `headers` parameter + * is itself an async function (`mergeHeaders` in + * `otlp-exporter-base/configuration/otlp-http-configuration.js`), not a plain + * object, because header merging can await user-provided async header + * providers. Both details were confirmed by constructing an exporter and + * logging its shape, not from documentation. + */ +async function exporterConfig(exporter: OpenlayerExporter): Promise<{ url?: string; headers?: any }> { + const injected = (exporter as any).config?.exporter; + const params = injected?._delegate?._transport?._transport?._parameters; + return { url: params?.url, headers: params ? await params.headers() : undefined }; +} + +describe('OpenlayerExporter', () => { + beforeEach(resetEnv); + afterEach(() => { + // Some tests below spy on `OtelExporter.prototype._exportTracingEvent`, a shared + // prototype. Restoring here (rather than as the last line of each test body) + // ensures a failing assertion mid-test can't leak the spy into a later, + // unrelated test. + jest.restoreAllMocks(); + }); + afterAll(() => { + process.env = { ...ORIGINAL_ENV }; + }); + + it('configures itself from environment variables alone', () => { + process.env['OPENLAYER_API_KEY'] = 'sk-ol-env'; + process.env['OPENLAYER_INFERENCE_PIPELINE_ID'] = 'pipeline-env'; + + const exporter = new OpenlayerExporter(); + + expect(exporter.isDisabled).toBe(false); + expect(exporter.name).toBe('openlayer'); + }); + + it('accepts explicit configuration with no environment set', () => { + const exporter = new OpenlayerExporter({ + apiKey: 'sk-ol-explicit', + inferencePipelineId: 'pipeline-explicit', + }); + expect(exporter.isDisabled).toBe(false); + }); + + it('prefers explicit configuration over the environment', async () => { + process.env['OPENLAYER_API_KEY'] = 'sk-ol-env'; + process.env['OPENLAYER_INFERENCE_PIPELINE_ID'] = 'pipeline-env'; + + const exporter = new OpenlayerExporter({ + apiKey: 'sk-ol-explicit', + inferencePipelineId: 'pipeline-explicit', + }); + + const { headers } = await exporterConfig(exporter); + expect(headers?.['Authorization']).toBe('Bearer sk-ol-explicit'); + expect(headers?.['x-bt-parent']).toBe('pipeline_id:pipeline-explicit'); + }); + + it('builds the Openlayer auth headers and defaults the endpoint', async () => { + const exporter = new OpenlayerExporter({ apiKey: 'sk-ol', inferencePipelineId: 'pipe-1' }); + const { url, headers } = await exporterConfig(exporter); + + expect(url).toBe(OPENLAYER_OTLP_ENDPOINT); + expect(headers?.['Authorization']).toBe('Bearer sk-ol'); + expect(headers?.['x-bt-parent']).toBe('pipeline_id:pipe-1'); + }); + + it('honours a custom endpoint and merges user headers', async () => { + const exporter = new OpenlayerExporter({ + apiKey: 'sk-ol', + inferencePipelineId: 'pipe-1', + endpoint: 'https://self-hosted.example.com/v1/traces', + headers: { 'x-custom': 'value' }, + }); + const { url, headers } = await exporterConfig(exporter); + + expect(url).toBe('https://self-hosted.example.com/v1/traces'); + expect(headers?.['x-custom']).toBe('value'); + expect(headers?.['Authorization']).toBe('Bearer sk-ol'); + }); + + it('honours OPENLAYER_OTEL_ENDPOINT when no explicit endpoint is configured', async () => { + process.env['OPENLAYER_API_KEY'] = 'sk-ol-env'; + process.env['OPENLAYER_INFERENCE_PIPELINE_ID'] = 'pipeline-env'; + process.env['OPENLAYER_OTEL_ENDPOINT'] = 'https://env-endpoint.example.com/v1/traces'; + + const exporter = new OpenlayerExporter(); + const { url } = await exporterConfig(exporter); + + expect(url).toBe('https://env-endpoint.example.com/v1/traces'); + }); + + it('prefers an explicit endpoint over OPENLAYER_OTEL_ENDPOINT', async () => { + process.env['OPENLAYER_API_KEY'] = 'sk-ol-env'; + process.env['OPENLAYER_INFERENCE_PIPELINE_ID'] = 'pipeline-env'; + process.env['OPENLAYER_OTEL_ENDPOINT'] = 'https://env-endpoint.example.com/v1/traces'; + + const exporter = new OpenlayerExporter({ endpoint: 'https://explicit.example.com/v1/traces' }); + const { url } = await exporterConfig(exporter); + + expect(url).toBe('https://explicit.example.com/v1/traces'); + }); + + it('disables itself without throwing when credentials are missing', () => { + let exporter!: OpenlayerExporter; + expect(() => { + exporter = new OpenlayerExporter(); + }).not.toThrow(); + expect(exporter.isDisabled).toBe(true); + }); + + it('disables itself when only the api key is present', () => { + process.env['OPENLAYER_API_KEY'] = 'sk-ol-env'; + expect(new OpenlayerExporter().isDisabled).toBe(true); + }); + + it('drops MODEL_CHUNK spans by default and forwards everything else', async () => { + const exporter = new OpenlayerExporter({ apiKey: 'sk-ol', inferencePipelineId: 'pipe-1' }); + const forwarded: string[] = []; + const proto = Object.getPrototypeOf(Object.getPrototypeOf(exporter)); + jest.spyOn(proto, '_exportTracingEvent').mockImplementation(async (event: any) => { + forwarded.push(event.exportedSpan.type); + }); + + const event = (type: SpanType) => ({ + type: TracingEventType.SPAN_ENDED, + exportedSpan: { + type, + id: 'a', + traceId: 'b', + name: 'n', + startTime: new Date(), + isEvent: false, + isRootSpan: true, + }, + }); + + await (exporter as any)._exportTracingEvent(event(SpanType.MODEL_CHUNK)); + await (exporter as any)._exportTracingEvent(event(SpanType.AGENT_RUN)); + + expect(forwarded).toEqual([SpanType.AGENT_RUN]); + }); + + it('exports MODEL_CHUNK when dropSpanTypes is emptied', async () => { + const exporter = new OpenlayerExporter({ + apiKey: 'sk-ol', + inferencePipelineId: 'pipe-1', + dropSpanTypes: [], + }); + const forwarded: string[] = []; + const proto = Object.getPrototypeOf(Object.getPrototypeOf(exporter)); + jest.spyOn(proto, '_exportTracingEvent').mockImplementation(async (event: any) => { + forwarded.push(event.exportedSpan.type); + }); + + await (exporter as any)._exportTracingEvent({ + type: TracingEventType.SPAN_ENDED, + exportedSpan: { + type: SpanType.MODEL_CHUNK, + id: 'a', + traceId: 'b', + name: 'n', + startTime: new Date(), + isEvent: false, + isRootSpan: false, + }, + }); + + expect(forwarded).toEqual([SpanType.MODEL_CHUNK]); + }); +}); diff --git a/tests/integrations/mastraGenaiMessages.test.ts b/tests/integrations/mastraGenaiMessages.test.ts new file mode 100644 index 0000000..7264285 --- /dev/null +++ b/tests/integrations/mastraGenaiMessages.test.ts @@ -0,0 +1,93 @@ +/** + * Unit tests for the Mastra → GenAI semconv v1.38 message coercion. + * + * Openlayer's OTLP ingest builds a row's input and output only from + * `gen_ai.input.messages` / `gen_ai.output.messages` in the `parts` shape + * produced here, so these cases pin the exact wire format. + */ +import { toGenAIMessages } from '../../src/lib/integrations/mastra/genaiMessages'; + +describe('toGenAIMessages', () => { + it('wraps a bare string in a single message using the default role', () => { + expect(toGenAIMessages('what is 2+2?', 'user')).toEqual([ + { role: 'user', parts: [{ type: 'text', content: 'what is 2+2?' }] }, + ]); + }); + + it('maps an array of {role, content} messages one-to-one', () => { + const input = [ + { role: 'system', content: 'You are helpful.' }, + { role: 'user', content: 'hi' }, + ]; + expect(toGenAIMessages(input, 'user')).toEqual([ + { role: 'system', parts: [{ type: 'text', content: 'You are helpful.' }] }, + { role: 'user', parts: [{ type: 'text', content: 'hi' }] }, + ]); + }); + + it('JSON-stringifies non-string content', () => { + expect(toGenAIMessages([{ role: 'user', content: { city: 'Lisbon' } }], 'user')).toEqual([ + { role: 'user', parts: [{ type: 'text', content: '{"city":"Lisbon"}' }] }, + ]); + }); + + it('passes through messages already in the parts shape', () => { + // `role: 'tool'` is deliberately not the `defaultRole` ('user'), so an + // implementation that ignored `record['role']` and always substituted the + // default would fail here. The expectation is a fresh literal rather than + // `input` itself, so in-place mutation of the caller's array — e.g. via + // `coerceEntry` returning `record['parts']` unchanged — would also fail. + const input = [{ role: 'tool', parts: [{ type: 'text', content: '4' }] }]; + expect(toGenAIMessages(input, 'user')).toEqual([ + { role: 'tool', parts: [{ type: 'text', content: '4' }] }, + ]); + }); + + it('parses a pre-serialized JSON string before coercing', () => { + const raw = JSON.stringify([{ role: 'user', content: 'hello' }]); + expect(toGenAIMessages(raw, 'user')).toEqual([ + { role: 'user', parts: [{ type: 'text', content: 'hello' }] }, + ]); + }); + + it('treats a non-JSON string that merely starts with a brace as literal text', () => { + expect(toGenAIMessages('{not json', 'user')).toEqual([ + { role: 'user', parts: [{ type: 'text', content: '{not json' }] }, + ]); + }); + + it('wraps a plain object with no role as a single stringified message', () => { + expect(toGenAIMessages({ text: '4' }, 'assistant')).toEqual([ + { role: 'assistant', parts: [{ type: 'text', content: '{"text":"4"}' }] }, + ]); + }); + + it('keeps the role of a single message-like object', () => { + expect(toGenAIMessages({ role: 'tool', content: 'sunny' }, 'assistant')).toEqual([ + { role: 'tool', parts: [{ type: 'text', content: 'sunny' }] }, + ]); + }); + + it('applies the supplied finish_reason only when the entry has none', () => { + expect(toGenAIMessages([{ role: 'assistant', content: 'done' }], 'assistant', 'stop')).toEqual([ + { role: 'assistant', parts: [{ type: 'text', content: 'done' }], finish_reason: 'stop' }, + ]); + expect( + toGenAIMessages([{ role: 'assistant', content: 'x', finish_reason: 'length' }], 'assistant', 'stop'), + ).toEqual([{ role: 'assistant', parts: [{ type: 'text', content: 'x' }], finish_reason: 'length' }]); + }); + + it('degrades to a placeholder instead of throwing on a circular reference', () => { + const circular: Record = { role: 'user' }; + circular['self'] = circular; + const result = toGenAIMessages([{ role: 'user', content: circular }], 'user'); + expect(result).toEqual([{ role: 'user', parts: [{ type: 'text', content: '[unserializable]' }] }]); + }); + + it('returns undefined for empty, null and undefined values', () => { + expect(toGenAIMessages(undefined, 'user')).toBeUndefined(); + expect(toGenAIMessages(null, 'user')).toBeUndefined(); + expect(toGenAIMessages('', 'user')).toBeUndefined(); + expect(toGenAIMessages([], 'user')).toBeUndefined(); + }); +}); diff --git a/tests/integrations/mastraSpanRewriter.test.ts b/tests/integrations/mastraSpanRewriter.test.ts new file mode 100644 index 0000000..77c3d7b --- /dev/null +++ b/tests/integrations/mastraSpanRewriter.test.ts @@ -0,0 +1,316 @@ +/** + * Unit tests for the Mastra span attribute rewriter. + * + * The rules encoded here were established by probing the live Openlayer OTLP + * endpoint; see the design spec for the measurements. The negative cases + * matter as much as the positive ones — rewriting a tool span makes its + * Openlayer step strictly worse. + */ +import { rewriteSpanAttributes } from '../../src/lib/integrations/mastra/spanRewriter'; + +// `OpenlayerOTLPTraceExporter` tests below spy on `OTLPTraceExporter.prototype.export`, +// a shared prototype. Restoring in `afterEach` (rather than as the last line of each +// test body) ensures a failing assertion mid-test can't leak the spy into a later, +// unrelated test. +afterEach(() => { + jest.restoreAllMocks(); +}); + +describe('rewriteSpanAttributes', () => { + it('recovers root agent_run input and output into gen_ai messages', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'agent_run', + 'mastra.agent_run.input': JSON.stringify([{ role: 'user', content: 'what is 2+2?' }]), + 'mastra.agent_run.output': JSON.stringify({ text: '4' }), + }); + + expect(JSON.parse(result['gen_ai.input.messages'])).toEqual([ + { role: 'user', parts: [{ type: 'text', content: 'what is 2+2?' }] }, + ]); + expect(JSON.parse(result['gen_ai.output.messages'])).toEqual([ + { role: 'assistant', parts: [{ type: 'text', content: '{"text":"4"}' }], finish_reason: 'stop' }, + ]); + }); + + it('recovers workflow_run spans the same way', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'workflow_run', + 'mastra.workflow_run.input': 'run the weather flow', + }); + expect(JSON.parse(result['gen_ai.input.messages'])).toEqual([ + { role: 'user', parts: [{ type: 'text', content: 'run the weather flow' }] }, + ]); + }); + + it('leaves model spans untouched — Mastra already emits gen_ai messages', () => { + const original = JSON.stringify([{ role: 'user', parts: [{ type: 'text', content: 'hi' }] }]); + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'model_generation', + 'gen_ai.input.messages': original, + 'mastra.model_generation.input': 'SHOULD NOT BE USED', + }); + expect(result['gen_ai.input.messages']).toBe(original); + }); + + it('never overwrites an existing gen_ai.output.messages', () => { + const original = JSON.stringify([{ role: 'assistant', parts: [{ type: 'text', content: 'hi back' }] }]); + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'model_generation', + 'gen_ai.output.messages': original, + 'mastra.model_generation.output': 'SHOULD NOT BE USED', + }); + expect(result['gen_ai.output.messages']).toBe(original); + }); + + it('leaves tool spans untouched — gen_ai.tool.call.* maps natively', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'tool_call', + 'gen_ai.tool.call.arguments': '{"city":"Lisbon"}', + 'gen_ai.tool.call.result': '{"tempC":24}', + 'mastra.tool_call.input': 'SHOULD NOT BE USED', + 'mastra.tool_call.output': 'SHOULD NOT BE USED', + }); + expect(result['gen_ai.input.messages']).toBeUndefined(); + expect(result['gen_ai.output.messages']).toBeUndefined(); + }); + + it('leaves a tool span untouched even when gen_ai.tool.call.result is missing', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'tool_call', + 'gen_ai.tool.call.arguments': '{"city":"Lisbon"}', + 'mastra.tool_call.output': 'Error: upstream 500', + }); + expect(result['gen_ai.input.messages']).toBeUndefined(); + expect(result['gen_ai.output.messages']).toBeUndefined(); + }); + + it('leaves mcp_tool_call and provider_tool_call spans untouched', () => { + const mcpResult = rewriteSpanAttributes({ + 'mastra.span.type': 'mcp_tool_call', + 'mastra.mcp_tool_call.input': 'SHOULD NOT BE USED', + 'mastra.mcp_tool_call.output': 'SHOULD NOT BE USED', + }); + expect(mcpResult['gen_ai.input.messages']).toBeUndefined(); + expect(mcpResult['gen_ai.output.messages']).toBeUndefined(); + + const providerResult = rewriteSpanAttributes({ + 'mastra.span.type': 'provider_tool_call', + 'mastra.provider_tool_call.input': 'SHOULD NOT BE USED', + 'mastra.provider_tool_call.output': 'SHOULD NOT BE USED', + }); + expect(providerResult['gen_ai.input.messages']).toBeUndefined(); + expect(providerResult['gen_ai.output.messages']).toBeUndefined(); + }); + + it('does not mistake a user metadata key ending in .input for span input', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'agent_run', + 'mastra.metadata.formConfig.input': 'a user metadata value', + }); + expect(result['gen_ai.input.messages']).toBeUndefined(); + }); + + it('lifts sessionId and userId into session.id and user.id', () => { + const result = rewriteSpanAttributes({ + 'mastra.metadata.sessionId': 'sess-1', + 'mastra.metadata.userId': 'user-1', + }); + expect(result['session.id']).toBe('sess-1'); + expect(result['user.id']).toBe('user-1'); + }); + + it('falls back to threadId for the session and prefers sessionId when both exist', () => { + expect(rewriteSpanAttributes({ 'mastra.metadata.threadId': 'thread-1' })['session.id']).toBe('thread-1'); + expect( + rewriteSpanAttributes({ + 'mastra.metadata.sessionId': 'sess-1', + 'mastra.metadata.threadId': 'thread-1', + })['session.id'], + ).toBe('sess-1'); + }); + + it('never overwrites an existing session.id or user.id', () => { + const result = rewriteSpanAttributes({ + 'session.id': 'already-set', + 'user.id': 'already-set-user', + 'mastra.metadata.sessionId': 'sess-1', + 'mastra.metadata.userId': 'user-1', + }); + expect(result['session.id']).toBe('already-set'); + expect(result['user.id']).toBe('already-set-user'); + }); + + it('lifts a numeric sessionId and userId, coercing them to strings', () => { + // @mastra/otel-exporter's SpanConverter copies span.metadata onto attributes + // verbatim for non-object values, so a numeric database id (e.g. + // `metadata: { userId: 4821 }`) arrives here as a genuine number, not a string. + const result = rewriteSpanAttributes({ + 'mastra.metadata.sessionId': 4821, + 'mastra.metadata.userId': 90210, + }); + expect(result['session.id']).toBe('4821'); + expect(result['user.id']).toBe('90210'); + }); + + it('still does not lift an empty-string sessionId or userId', () => { + const result = rewriteSpanAttributes({ + 'mastra.metadata.sessionId': '', + 'mastra.metadata.userId': '', + }); + expect(result['session.id']).toBeUndefined(); + expect(result['user.id']).toBeUndefined(); + }); + + it('lifts an object-valued id, which Mastra pre-stringifies before it reaches the rewriter', () => { + // Mastra's SpanConverter does `typeof v === 'object' ? JSON.stringify(v) : v` + // before setting the attribute, so an object-valued id never arrives here as + // an object — it arrives as the JSON string, which the existing string branch + // already handles correctly. + const result = rewriteSpanAttributes({ + 'mastra.metadata.userId': JSON.stringify({ id: 4821, tenant: 'acme' }), + }); + expect(result['user.id']).toBe('{"id":4821,"tenant":"acme"}'); + }); + + it('preserves the original mastra attributes so they still reach step metadata', () => { + const result = rewriteSpanAttributes({ + 'mastra.span.type': 'agent_run', + 'mastra.agent_run.input': 'hello', + 'mastra.metadata.tenant': 'acme', + 'mastra.tags': ['alpha'], + }); + expect(result['mastra.agent_run.input']).toBe('hello'); + expect(result['mastra.metadata.tenant']).toBe('acme'); + expect(result['mastra.tags']).toEqual(['alpha']); + }); + + it('does not mutate the attributes object it is given', () => { + const input = { 'mastra.span.type': 'agent_run', 'mastra.agent_run.input': 'hello' }; + const snapshot = { ...input }; + rewriteSpanAttributes(input); + expect(input).toEqual(snapshot); + }); + + it('writes nothing when there is no payload to recover', () => { + const result = rewriteSpanAttributes({ 'mastra.span.type': 'generic' }); + expect(result['gen_ai.input.messages']).toBeUndefined(); + expect(result['gen_ai.output.messages']).toBeUndefined(); + }); +}); + +describe('OpenlayerOTLPTraceExporter', () => { + it('rewrites span attributes before delegating to the OTLP exporter', () => { + // Required lazily so the suite above still runs if the optional peers are absent. + const { OpenlayerOTLPTraceExporter } = require('../../src/lib/integrations/mastra/otlpExporter'); + const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto'); + + const superExport = jest.spyOn(OTLPTraceExporter.prototype, 'export').mockImplementation(() => undefined); + + const exporter = new OpenlayerOTLPTraceExporter({ url: 'https://example.invalid/v1/traces' }); + const span = { + attributes: { + 'mastra.span.type': 'agent_run', + 'mastra.agent_run.input': 'hello', + }, + }; + + exporter.export([span] as any, () => undefined); + + expect(superExport).toHaveBeenCalledTimes(1); + const forwarded = superExport.mock.calls[0]![0] as any[]; + expect(JSON.parse(forwarded[0].attributes['gen_ai.input.messages'])).toEqual([ + { role: 'user', parts: [{ type: 'text', content: 'hello' }] }, + ]); + }); + + it('exports the span unchanged rather than dropping the batch if rewriting throws', () => { + const { OpenlayerOTLPTraceExporter } = require('../../src/lib/integrations/mastra/otlpExporter'); + const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto'); + + const superExport = jest.spyOn(OTLPTraceExporter.prototype, 'export').mockImplementation(() => undefined); + + const exporter = new OpenlayerOTLPTraceExporter({ url: 'https://example.invalid/v1/traces' }); + // A getter that throws simulates a hostile span object. + const span = { + get attributes(): Record { + throw new Error('boom'); + }, + }; + + expect(() => exporter.export([span] as any, () => undefined)).not.toThrow(); + expect(superExport).toHaveBeenCalledTimes(1); + }); +}); + +/** + * `rewriteSpanAttributes` also normalizes a known set of non-canonical + * `gen_ai.provider.name` values so Openlayer's cost lookup — an exact, + * lowercased `(provider, model)` match with no server-side aliasing — can + * find them. Confirmed live: Mastra's OpenAI Responses API calls report + * `openai.responses`, which 404s against `llm-costs.openlayer.com`, while the + * bare `openai` slug prices the same model. + */ +describe('rewriteSpanAttributes provider slug normalization', () => { + it('rewrites a known non-canonical provider slug to the one Openlayer prices', () => { + const result = rewriteSpanAttributes({ + 'gen_ai.provider.name': 'openai.responses', + }); + + expect(result['gen_ai.provider.name']).toBe('openai'); + }); + + it('leaves an unrecognized dotted provider slug unchanged', () => { + jest.spyOn(console, 'debug').mockImplementation(() => undefined); + + const result = rewriteSpanAttributes({ + 'gen_ai.provider.name': 'somevendor.someapi', + }); + + expect(result['gen_ai.provider.name']).toBe('somevendor.someapi'); + }); + + it('leaves an already-canonical provider slug unchanged', () => { + const result = rewriteSpanAttributes({ + 'gen_ai.provider.name': 'openai', + }); + + expect(result['gen_ai.provider.name']).toBe('openai'); + }); + + it('rewrites the provider slug without disturbing other attributes on the span', () => { + const result = rewriteSpanAttributes({ + 'gen_ai.provider.name': 'anthropic.messages', + 'gen_ai.request.model': 'claude-sonnet-4-20250514', + 'mastra.span.type': 'model_generation', + }); + + expect(result['gen_ai.provider.name']).toBe('anthropic'); + expect(result['gen_ai.request.model']).toBe('claude-sonnet-4-20250514'); + expect(result['mastra.span.type']).toBe('model_generation'); + }); + + it('logs a debug miss signal for an unrecognized dotted provider slug', () => { + const debugSpy = jest.spyOn(console, 'debug').mockImplementation(() => undefined); + + rewriteSpanAttributes({ 'gen_ai.provider.name': 'somevendor.someapi' }); + + expect(debugSpy).toHaveBeenCalledTimes(1); + expect(debugSpy.mock.calls[0]![0]).toContain('somevendor.someapi'); + }); + + it('does not log a miss signal for a bare (non-dotted) provider slug', () => { + const debugSpy = jest.spyOn(console, 'debug').mockImplementation(() => undefined); + + rewriteSpanAttributes({ 'gen_ai.provider.name': 'openai' }); + + expect(debugSpy).not.toHaveBeenCalled(); + }); + + it('does not log a miss signal for a dotted slug that has a verified alias', () => { + const debugSpy = jest.spyOn(console, 'debug').mockImplementation(() => undefined); + + rewriteSpanAttributes({ 'gen_ai.provider.name': 'openai.responses' }); + + expect(debugSpy).not.toHaveBeenCalled(); + }); +}); diff --git a/yarn.lock b/yarn.lock index 50932e5..4ed2624 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,122 @@ # yarn lockfile v1 +"@a2a-js/sdk-v0_3@npm:@a2a-js/sdk@~0.3.14": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@a2a-js/sdk/-/sdk-0.3.14.tgz#e807b4e6516ea8c4af621ad9789d8dad6173058d" + integrity sha512-F6Ew1AtPzCLhTn8h9yiqTe7DiDf6XVrSnq9V1YqSl9eWqPm6anMveTiKdCSb/76cW0YiJc24rNaUrVezFFHbqQ== + dependencies: + uuid "^11.1.0" + +"@a2a-js/sdk-v1@npm:@a2a-js/sdk@~1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@a2a-js/sdk/-/sdk-1.0.1.tgz#4a66be6a8cacc3276d6b71db9bf88ce6733f53f6" + integrity sha512-CJQdh3Wzwo8qIx5UUkSJ7+7BEI16PB+MXMHHNSmx8JQsQed2HlQgvx1ENOiKUfYA3PlcEvxIwv14dBblhDuPmw== + dependencies: + jose "^6.2.3" + uuid "^11.1.0" + "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@ai-sdk/openai@^4.0.50": + version "4.0.50" + resolved "https://registry.yarnpkg.com/@ai-sdk/openai/-/openai-4.0.50.tgz#e45dfb0ff6302024e35a1138b5a6f043b37f652c" + integrity sha512-e2Jepw5RbSwsCsPwyiNzdlmOHoCQefCziNp3k1UxfIv8QD0/p4SF6+cx7GuWX98jAVNiWLjRv1W3NVSmx3FuEQ== + dependencies: + "@ai-sdk/provider" "4.0.8" + "@ai-sdk/provider-utils" "5.0.32" + +"@ai-sdk/provider-utils-v5@npm:@ai-sdk/provider-utils@3.0.30": + version "3.0.30" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-3.0.30.tgz#c9e611246706c8f5b617ad8c75eefb16479f47e9" + integrity sha512-NCJ9JKow5ENAgEZxzvEvF20thwDiH+hutvzmrUDbloRX0azpJHNst8+7pZIVryYhLM9wgpT5/ShTSjPTFhkxEQ== + dependencies: + "@ai-sdk/provider" "2.0.3" + "@standard-schema/spec" "^1.0.0" + eventsource-parser "^3.0.6" + +"@ai-sdk/provider-utils-v6@npm:@ai-sdk/provider-utils@4.0.40": + version "4.0.40" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-4.0.40.tgz#5daa46e0cc8d876887994e335fca7f14eca53fd3" + integrity sha512-OL5IrpUm9Y8Dwy+w/vvFwPotS6m52O9W0op2oXgXdCROMJIBalBI0oro6OIBYkPxvm5Xg02GSkoQN25RlR0bnw== + dependencies: + "@ai-sdk/provider" "3.0.14" + "@standard-schema/spec" "^1.1.0" + eventsource-parser "^3.0.8" + +"@ai-sdk/provider-utils-v7@npm:@ai-sdk/provider-utils@5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-5.0.13.tgz#0baab013772b1611a0c743b951ddf4c67cc1cd5c" + integrity sha512-fScDJMDnTbx32kLDQqp0MvPjvwkgiwvlBxlmIg7XW5PbS91LG6JjH3PQG+34oMFglqfpQA355e24OdGj5PPoDw== + dependencies: + "@ai-sdk/provider" "4.0.4" + "@standard-schema/spec" "^1.1.0" + "@workflow/serde" "4.1.0" + eventsource-parser "^3.0.8" + +"@ai-sdk/provider-utils@5.0.32": + version "5.0.32" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-5.0.32.tgz#4d0fad3facecf79fce1ed411698aefdae058be22" + integrity sha512-MZUhlINn6FzKIWuX3T36h+yM9d7bG+yatH+kC99ZCe0DHxXfP73KwaoLiLcZDPQDamFyO3umPPBLJieZJyG4DQ== + dependencies: + "@ai-sdk/provider" "4.0.8" + "@standard-schema/spec" "^1.1.0" + "@workflow/serde" "4.1.0" + eventsource-parser "^3.0.8" + undici "^7.28.0" + +"@ai-sdk/provider-v5@npm:@ai-sdk/provider@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.3.tgz#8a3727d31947c6238e59dcbb72b7e1a871fd570c" + integrity sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider-v6@npm:@ai-sdk/provider@3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-3.0.14.tgz#5893a90e0b5355ec6a5c148f06bd7f08355c1a6f" + integrity sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider-v7@npm:@ai-sdk/provider@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.4.tgz#7b1a3616d3e1c731a06a90f0a0e26e4d767a5b25" + integrity sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.3.tgz#8a3727d31947c6238e59dcbb72b7e1a871fd570c" + integrity sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-3.0.14.tgz#5893a90e0b5355ec6a5c148f06bd7f08355c1a6f" + integrity sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.4.tgz#7b1a3616d3e1c731a06a90f0a0e26e4d767a5b25" + integrity sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/provider@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-4.0.8.tgz#d3f6c72db71098363e18c2e384945fbc7a983c19" + integrity sha512-aWO7iwhFUGf347tCwNGggggfmZigaSu7TF739IZSrWWABUp7zkb4Cr3fMqvBe5EIS7ABJJu3Cadn0g/zs1G0QQ== + dependencies: + json-schema "^0.4.0" + "@andrewbranch/untar.js@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@andrewbranch/untar.js/-/untar.js-1.0.3.tgz#ba9494f85eb83017c5c855763969caf1d0adea00" @@ -1017,6 +1128,24 @@ protobufjs "^7.5.4" ws "^8.18.0" +"@grpc/grpc-js@^1.14.3", "@grpc/grpc-js@^1.14.4": + version "1.14.4" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.4.tgz#e73ff57d97802f063999545f43ebb2b1eca65d9d" + integrity sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ== + dependencies: + "@grpc/proto-loader" "^0.8.0" + "@js-sdsl/ordered-map" "^4.4.2" + +"@grpc/proto-loader@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.8.1.tgz#5a6b290ccbfb1ae2f6775afb74e9898bd8c5d4e8" + integrity sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.5.5" + yargs "^17.7.2" + "@hono/node-server@^1.19.9": version "1.19.14" resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.19.14.tgz#e30f844bc77e3ce7be442aac3b1f73ad8b58d181" @@ -1050,6 +1179,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@isaacs/ttlcache@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-2.1.5.tgz#9972fc5e801698907feb0b112ea19d8ff7d7689d" + integrity sha512-VwGZqqjAWPICTmxUZnbpEfO60LhPWzquik+bmyXGY7pYRn6diEvCI5i6Ca+J6o2y4vS73HrpuMTo2dOvUevH8w== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1312,6 +1446,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + "@langchain/classic@^1.0.27": version "1.0.40" resolved "https://registry.yarnpkg.com/@langchain/classic/-/classic-1.0.40.tgz#e0b699f3ff83849de3619d8a8917f9bd7719c845" @@ -1402,6 +1541,100 @@ dependencies: js-tiktoken "^1.0.12" +"@lukeed/csprng@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" + integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + +"@lukeed/uuid@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@lukeed/uuid/-/uuid-2.0.1.tgz#4f6c34259ee0982a455e1797d56ac27bb040fd74" + integrity sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w== + dependencies: + "@lukeed/csprng" "^1.1.0" + +"@mastra/core@^1.63.0": + version "1.63.0" + resolved "https://registry.yarnpkg.com/@mastra/core/-/core-1.63.0.tgz#9394e15c816cb8996046586334922c1e3da3cd4b" + integrity sha512-mo5rbXpXLY7lf0zFPAarjsYCTf5hGbLrd678tZZ14/1MkJMlaWJUajECl9rJLseiPv+1wyn4LnmT8W2YQ5khLQ== + dependencies: + "@a2a-js/sdk-v0_3" "npm:@a2a-js/sdk@~0.3.14" + "@a2a-js/sdk-v1" "npm:@a2a-js/sdk@~1.0.1" + "@ai-sdk/provider-utils-v5" "npm:@ai-sdk/provider-utils@3.0.30" + "@ai-sdk/provider-utils-v6" "npm:@ai-sdk/provider-utils@4.0.40" + "@ai-sdk/provider-utils-v7" "npm:@ai-sdk/provider-utils@5.0.13" + "@ai-sdk/provider-v5" "npm:@ai-sdk/provider@2.0.3" + "@ai-sdk/provider-v6" "npm:@ai-sdk/provider@3.0.14" + "@ai-sdk/provider-v7" "npm:@ai-sdk/provider@4.0.4" + "@isaacs/ttlcache" "^2.1.5" + "@lukeed/uuid" "^2.0.1" + "@mastra/schema-compat" "1.3.7" + "@modelcontextprotocol/server" "2.0.0" + "@sindresorhus/slugify" "^2.2.1" + "@standard-schema/spec" "^1.1.0" + ajv "^8.20.0" + chat "^4.34.0" + croner "^10.0.1" + dotenv "^17.3.1" + execa "^9.6.1" + fastq "^1.20.1" + gray-matter "^4.0.3" + ignore "^7.0.5" + jpeg-js "^0.4.4" + json-schema "^0.4.0" + lru-cache "^11.2.7" + p-map "^7.0.4" + p-retry "^7.1.1" + picomatch "^4.0.3" + posthog-node "^5.46.1" + tokenx "^1.3.0" + ws "^8.21.0" + xxhash-wasm "^1.1.0" + +"@mastra/observability@1.17.3", "@mastra/observability@^1.17.3": + version "1.17.3" + resolved "https://registry.yarnpkg.com/@mastra/observability/-/observability-1.17.3.tgz#cb9c939250b42bdd071f038ba5d63c9a07535989" + integrity sha512-s86/ufX2FmT0ptEBYEtrxxWgzmCd3p7W1U0wtqBSeg4+cDvxlEqG+76ZVjeQiH+DPd4p4pDQYNT6CPoXRfARHg== + +"@mastra/otel-exporter@^1.3.11": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@mastra/otel-exporter/-/otel-exporter-1.3.11.tgz#fab3585b72e34d0586317b655484b669d4fadf73" + integrity sha512-HqvRSgi64059RJgkmO9Kyz8VDVEwLBUhaSZSn08HDSVTwyeS5eEneh7snpZahAsFnz69eaP6ftGb+a3UPvfsxA== + dependencies: + "@mastra/observability" "1.17.3" + "@opentelemetry/api" "^1.9.1" + "@opentelemetry/api-logs" "^0.221.0" + "@opentelemetry/core" "^2.10.0" + "@opentelemetry/resources" "^2.10.0" + "@opentelemetry/sdk-logs" "^0.221.0" + "@opentelemetry/sdk-trace-base" "^2.10.0" + "@opentelemetry/sdk-trace-node" "^2.10.0" + "@opentelemetry/semantic-conventions" "^1.43.0" + optionalDependencies: + "@grpc/grpc-js" "^1.14.4" + "@opentelemetry/exporter-logs-otlp-grpc" "^0.221.0" + "@opentelemetry/exporter-logs-otlp-http" "^0.221.0" + "@opentelemetry/exporter-logs-otlp-proto" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-grpc" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-http" "^0.221.0" + "@opentelemetry/exporter-trace-otlp-proto" "^0.221.0" + "@opentelemetry/exporter-zipkin" "^2.10.0" + +"@mastra/schema-compat@1.3.7": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@mastra/schema-compat/-/schema-compat-1.3.7.tgz#f5e5cc8769e7c113c0ec1a8e18ab95c828870457" + integrity sha512-06WfY+j9rulYnDp8CM7pL7JIyrntkMolqmyyb1VJNEzlYTQCIcJcY0SwQiubZv2tztmoYGikszDiRVyXp0E9gA== + dependencies: + json-schema-to-zod "^2.7.0" + zod-from-json-schema "^0.5.2" + +"@modelcontextprotocol/core@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/core/-/core-2.0.0.tgz#c918a4c6aef22a7c59dfb0aabc2a82c187cce157" + integrity sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA== + dependencies: + zod "^4.2.0" + "@modelcontextprotocol/sdk@^1.29.0": version "1.29.0" resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz#79786d8b525e269de850ac82b1f1f757f3915f44" @@ -1425,6 +1658,14 @@ zod "^3.25 || ^4.0" zod-to-json-schema "^3.25.1" +"@modelcontextprotocol/server@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/server/-/server-2.0.0.tgz#4fae5ccb8f7925ed9a6bf6595bb3b58617063ffd" + integrity sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw== + dependencies: + "@modelcontextprotocol/core" "2.0.0" + zod "^4.2.0" + "@nodable/entities@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.1.0.tgz#f543e5c6446720d4cf9e498a83019dd159973bc2" @@ -1451,6 +1692,197 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@opentelemetry/api-logs@0.221.0", "@opentelemetry/api-logs@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.221.0.tgz#66b8405b122ff1c76ee743b9bd2ca73800a2e2df" + integrity sha512-OlanaW1vv7ufTqQ3/fPLI4arGt5ZoM+P8abOMki6uEYnpRazepSWDwDnnw+la7kE26SHVC18//SMccrDvLKOXQ== + dependencies: + "@opentelemetry/api" "^1.3.0" + +"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.1.tgz#c1b0346de336ba55af2d5a7970882037baedec05" + integrity sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q== + +"@opentelemetry/context-async-hooks@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.10.0.tgz#7259acfd5936ae713be3f6d36249add7ae8aca5a" + integrity sha512-bvyMcgLEkozzSzpEEEo1OMoeQ97bxj6Qs2uN3mPrSdDvObMI1myffD/BPqcLlzZO9//d1SqQA/WPw7Cz2AiqhA== + +"@opentelemetry/core@2.10.0", "@opentelemetry/core@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.10.0.tgz#aa77f7138e74ba5399d5f3bb0deade0c168f00b2" + integrity sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ== + dependencies: + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/exporter-logs-otlp-grpc@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.221.0.tgz#3c35c21323280918b8ca060b1a7baf64bac2124a" + integrity sha512-txG1G0IrYSsKKMeiWZfj/i5cQmWB+h+hf3HzPpF3RqZVwp+iQQEIsv8Vtmzy6RWVdHdJZfygmVrBI39YTBvWcw== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-logs-otlp-http@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.221.0.tgz#bfc4bd8492e29efc68fea6c7c0cb6c3d18af8301" + integrity sha512-nKXkr4Tomi6fjYVOf+ytcW3dZAVr4v4Bv5gsT6dr2gvpUPJpKgHB4XbMufMsPotRE3g0XH2GwVVCkN2w6SON+Q== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-logs-otlp-proto@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.221.0.tgz#8a522b2ca58f4c46be00e6a6f55d1108a9b93e19" + integrity sha512-AH6EY+47gXFaWYgG3hfeOneGiE9xIZGtDBk+9g0sM8NZWzsQhhmqPbQQXJzS7pyCh5jRRr2nYNXVrkCmoojRvQ== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-logs" "0.221.0" + +"@opentelemetry/exporter-trace-otlp-grpc@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.221.0.tgz#d92f044317420b841803da66bdb33f28d56b54e0" + integrity sha512-zXminlZedtq9LvOW64CnNkOqk15zV75k8JgtdTuWFge6+jk2m4GmAUm6L2eIiG1o2a2bZxXw2PDrszm+bps0IA== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-trace-otlp-http@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.221.0.tgz#b528a6076e03dcbe018a2b1c7e578533bf4df7ff" + integrity sha512-AySXiKoC+meiWm6zdVj5T2LnPDZuatveBby1cMOeQteIWsYXAUxs8Sru13G2pVSPrUXz6vF+og7QVBX6GdC/oQ== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-trace-otlp-proto@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.221.0.tgz#7aea8d78b957c44caa2502187f3f937718a2ea0f" + integrity sha512-Z9i2T7vgZbWe9rSLYxXVIbeW+XyzUq4rZanW3ZyVNwVDqCsh0EJKUgBWWQ0CZfeuUA+RQPzKgJQHMuWAUnKqXw== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/exporter-zipkin@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.10.0.tgz#5edf12c12a1a19255083f95083b1e0b8f8d9b9b7" + integrity sha512-7gsvgf0UDoJ4l9ObrwBmz5G/ZogiPk+lq+g5GpLp24YQF/vPM/BSsnOfcLnfinast5ASUgLo78uSC/ObjlnXgg== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/otlp-exporter-base@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.221.0.tgz#06ab00d9276292833848e9acc5cd225f23868467" + integrity sha512-UFPIq80OH3Ns/oPFHRj14d4DTOxUo+MUFU8hUiCq5jTqFhdeJnfVSANHT+xp92409cA+oxzvlZCe6NM1wvCuBA== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/otlp-transformer" "0.221.0" + +"@opentelemetry/otlp-grpc-exporter-base@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.221.0.tgz#6ce93b31e7017e4bbeb4453696d607355bd53528" + integrity sha512-rQDmNgyiGCTrescjnzH2ntVyUKVIq6I2UjuK8+stT/Xg0ZOT71FVJqwjFdspQl6Yol/Yqsut9bDo+ame8oTmDQ== + dependencies: + "@grpc/grpc-js" "^1.14.3" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/otlp-exporter-base" "0.221.0" + "@opentelemetry/otlp-transformer" "0.221.0" + +"@opentelemetry/otlp-transformer@0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.221.0.tgz#ebfc5a6595a1e37ce4f204c97115c8ed868dbfbb" + integrity sha512-lg6lkOU08Az23jVcn/0Els9HP+V8PnR4Km6p0KgpTggS0n/WuhnmY64rSh83Of9iR9nD+dpWr6adlcX8KzAwjg== + dependencies: + "@opentelemetry/api-logs" "0.221.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-logs" "0.221.0" + "@opentelemetry/sdk-metrics" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + +"@opentelemetry/resources@2.10.0", "@opentelemetry/resources@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.10.0.tgz#ce76c1c1baafce4c77bc29890965ba1f56671acc" + integrity sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-logs@0.221.0", "@opentelemetry/sdk-logs@^0.221.0": + version "0.221.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.221.0.tgz#9ec0e2cbfb572917b948101983e08868a690915e" + integrity sha512-FaDcazjyMp7TZZZAsqbo4IkovP0UegoCu0EBkiNt+qCqvUf7FPAsfcrZ3+ZEkKgXZ/jHafop+JoGPDk3A0SmLg== + dependencies: + "@opentelemetry/api-logs" "0.221.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-metrics@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.10.0.tgz#1a8f38d45164ba3efbb3505beb68caf4a3ecf2d9" + integrity sha512-t6r1VSvXNtSDnPXU1FbZeetJb7yyovHmgu0wRSoftxtE0g2rSNhQZQUy69sRUCL+iioJpX8SN/S6wq6ZtvLySQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + +"@opentelemetry/sdk-trace-base@2.10.0", "@opentelemetry/sdk-trace-base@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.10.0.tgz#3f9bf8a14c1dba8790619e28326f7c57f8b9e76f" + integrity sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/sdk-trace" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/sdk-trace-node@^2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.10.0.tgz#6b2ec5f15cb99c9aac7476430801d1dc933ecf19" + integrity sha512-GZK/G6oZyBLGlH1pUgeDch7D91KoHd2uotUGIkWCPi9GI5T9X0p4L7nNAMDR1BQjkRYoDqo+ddfVx9t5Uhys+Q== + dependencies: + "@opentelemetry/context-async-hooks" "2.10.0" + "@opentelemetry/core" "2.10.0" + "@opentelemetry/sdk-trace-base" "2.10.0" + +"@opentelemetry/sdk-trace@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz#76b0331092452b01a8b2f704480e2576641c7011" + integrity sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ== + dependencies: + "@opentelemetry/core" "2.10.0" + "@opentelemetry/resources" "2.10.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.43.0": + version "1.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz#f3f467e36c27332f0e735ec86cdcd78dd6f27865" + integrity sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg== + +"@posthog/core@^1.48.12": + version "1.49.0" + resolved "https://registry.yarnpkg.com/@posthog/core/-/core-1.49.0.tgz#e2bfe834b105ec3f0cf87a069e88cd530ed4a385" + integrity sha512-+Ejf6sZ2wI9F37rOrPxoI90mydOw5O/YKjAgWMkkuuQRHGwyfXugxsD/+CVI4Yymg8LujHr0C/KXJvWDJYgwWQ== + dependencies: + "@posthog/types" "^1.407.0" + +"@posthog/types@^1.407.0": + version "1.407.0" + resolved "https://registry.yarnpkg.com/@posthog/types/-/types-1.407.0.tgz#6917269f3c90eba5b5b75b63da3b18aa55925da0" + integrity sha512-7J/aFVi7JWFt/ekGVsMFvkTcADoE9MTNf1N9cpBSMUQ/SPLiBjbg386Fzk5OlgWG/u5OemBy4wlgD7YebqeppQ== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -1504,6 +1936,11 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.1.tgz#eaee5900122c110a3dbcb728c0597014a2621774" integrity sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1514,6 +1951,26 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + +"@sindresorhus/slugify@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" + integrity sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw== + dependencies: + "@sindresorhus/transliterate" "^1.0.0" + escape-string-regexp "^5.0.0" + +"@sindresorhus/transliterate@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz#2309fff65a868047e6d2dd70dec747c5b36a8327" + integrity sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== + dependencies: + escape-string-regexp "^5.0.0" + "@sinonjs/commons@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" @@ -1976,7 +2433,7 @@ dependencies: tslib "^2.6.2" -"@standard-schema/spec@1.1.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== @@ -2124,6 +2581,13 @@ dependencies: "@babel/types" "^7.20.7" +"@types/debug@^4.0.0": + version "4.1.13" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.13.tgz#22d1cc9d542d3593caea764f974306ab36286ee7" + integrity sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw== + dependencies: + "@types/ms" "*" + "@types/estree@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -2168,6 +2632,18 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + "@types/node-fetch@^2.6.4": version "2.6.13" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" @@ -2214,6 +2690,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/uuid@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" @@ -2312,6 +2793,16 @@ "@typescript-eslint/types" "8.31.1" eslint-visitor-keys "^4.2.0" +"@workflow/serde@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@workflow/serde/-/serde-4.1.0.tgz#82dbbaf2370f7b8ae46d9a9a4ab0917258f8db62" + integrity sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ== + +"@workflow/serde@4.1.0-beta.2": + version "4.1.0-beta.2" + resolved "https://registry.yarnpkg.com/@workflow/serde/-/serde-4.1.0-beta.2.tgz#ac10377f50e9f83dbf4994edd4fe9c940bcef6a9" + integrity sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -2389,7 +2880,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.17.1: +ajv@^8.0.0, ajv@^8.17.1, ajv@^8.20.0: version "8.20.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== @@ -2533,6 +3024,11 @@ babel-preset-jest@^29.6.3: babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2668,6 +3164,11 @@ caniuse-lite@^1.0.30001759: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005" integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2686,6 +3187,24 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +chat@^4.34.0: + version "4.38.1" + resolved "https://registry.yarnpkg.com/chat/-/chat-4.38.1.tgz#9c6b891734c5fc8e576aa0df0290a836e19367d2" + integrity sha512-FD6vNLT8clXHKhN3I1m+3Bn2nz0rsB6/bmNPsJeh6Cr7kwWLg0MYl2uor9YaKBp38F77sBRVKdYKVA6ihUby3w== + dependencies: + "@workflow/serde" "4.1.0-beta.2" + mdast-util-to-string "^4.0.0" + remark-gfm "^4.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + remend "^1.2.1" + unified "^11.0.5" + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -2835,6 +3354,11 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +croner@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/croner/-/croner-10.0.1.tgz#4eb92806c99539146dbe2f3ee3907e319cb2847a" + integrity sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g== + cross-spawn@^7.0.3, cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -2849,7 +3373,7 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -debug@4, debug@^4.4.0, debug@^4.4.3: +debug@4, debug@^4.0.0, debug@^4.4.0, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -2870,6 +3394,13 @@ debug@^4.3.4, debug@^4.3.7: dependencies: ms "^2.1.3" +decode-named-character-reference@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" + integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== + dependencies: + character-entities "^2.0.0" + dedent@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" @@ -2895,11 +3426,23 @@ depd@^2.0.0, depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -2910,6 +3453,11 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dotenv@^17.3.1: + version "17.4.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.4.2.tgz#c07e54a746e11eba021dd9e1047ced5afdc1c034" + integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw== + dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -3052,6 +3600,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-plugin-unused-imports@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz#62ddc7446ccbf9aa7b6f1f0b00a980423cda2738" @@ -3192,6 +3745,11 @@ eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.8.tgz#1c792503e4080455d00701bb1f7a1d60734d0e58" integrity sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ== +eventsource-parser@^3.0.6, eventsource-parser@^3.0.8: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.1.1.tgz#b96cbb7dace4f3774f58a9e3b1ae9a4a524872e2" + integrity sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ== + eventsource@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" @@ -3214,6 +3772,24 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471" + integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + cross-spawn "^7.0.6" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^8.0.1" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^6.0.0" + pretty-ms "^9.2.0" + signal-exit "^4.1.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.1.1" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -3271,7 +3847,14 @@ express@^5.2.1: type-is "^2.0.1" vary "^1.1.2" -extend@^3.0.2: +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3324,6 +3907,13 @@ fast-xml-parser@5.4.1, fast-xml-parser@^5.5.6: path-expression-matcher "^1.5.0" strnum "^2.2.3" +fastq@^1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -3351,6 +3941,13 @@ fflate@^0.8.2: resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" + file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" @@ -3534,6 +4131,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-tsconfig@^4.7.5: version "4.14.0" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.14.0.tgz#985d85c52a9903864280ccc2448d413fbf1efed8" @@ -3620,6 +4225,16 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + handlebars@^4.7.9: version "4.7.9" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.9.tgz#6f139082ab58dc4e5a0e51efe7db5ae890d56a0f" @@ -3702,6 +4317,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" + integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -3735,6 +4355,11 @@ ignore@^5.2.0, ignore@^5.3.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.6.tgz#6a57aaef4c90df27ac3590875d29e8f11988c88e" + integrity sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw== + import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3796,6 +4421,11 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3828,6 +4458,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-promise@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" @@ -3838,6 +4473,16 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4259,6 +4904,16 @@ jose@^6.1.3: resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.3.tgz#0975197ad973251221c658a3cddc4b951a250c2d" integrity sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw== +jose@^6.2.3: + version "6.2.10" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.10.tgz#b70436c920c4b3f97314c28a8b8612c15b1d9e7f" + integrity sha512-iiW7J9qRFlGxvCOIBDBDxFePQSn7ZMAnrYGhrrOo6siO/MIqwfyilLR27pkfDgUk+raLuzADS8A3S/KLBisc0g== + +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + js-tiktoken@^1.0.12: version "1.0.21" resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.21.tgz#368a9957591a30a62997dd0c4cf30866f00f8221" @@ -4323,6 +4978,11 @@ json-schema-to-ts@^3.1.1: "@babel/runtime" "^7.18.3" ts-algebra "^2.0.0" +json-schema-to-zod@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/json-schema-to-zod/-/json-schema-to-zod-2.8.1.tgz#684fcbe64cb178c1008c498209fff0890c9de725" + integrity sha512-fRr1mHgZ7hboLKBUdR428gd9dIHUFGivUqOeiDcSmyXkNZCtB1uGaZLvsjZ4GaN5pwBIs+TGIOf6s+Rp5/R/zA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -4338,6 +4998,11 @@ json-schema-typed@^8.0.2: resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.2.tgz#e98ee7b1899ff4a184534d1f167c288c66bbeff4" integrity sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA== +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4382,6 +5047,11 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -4426,6 +5096,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4441,11 +5116,21 @@ long@^5.0.0: resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^11.2.7: + version "11.5.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.2.tgz#00e16665c90c620fba14a3c368732a976493f760" + integrity sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4479,6 +5164,11 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + marked-terminal@^7.1.0: version "7.2.1" resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-7.2.1.tgz#9c1ae073a245a03c6a13e3eeac6f586f29856068" @@ -4507,6 +5197,129 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mdast-util-find-and-replace@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== + dependencies: + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-from-markdown@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" + integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" + +mdast-util-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + media-typer@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" @@ -4527,6 +5340,279 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromark@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" @@ -4700,6 +5786,14 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + dependencies: + path-key "^4.0.0" + unicorn-magic "^0.3.0" + object-assign@^4, object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4813,6 +5907,11 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-map@^7.0.4: + version "7.0.6" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.6.tgz#5b6ee7f1a775faa48599c8d4420f6a39833cd387" + integrity sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg== + 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" @@ -4878,6 +5977,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" @@ -4920,6 +6024,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -4945,6 +6054,11 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.3: + version "4.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" + integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== + pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" @@ -4962,6 +6076,13 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +posthog-node@^5.46.1: + version "5.51.3" + resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-5.51.3.tgz#26ffcd328bb8c038914e88aaf0c370b425f45d78" + integrity sha512-11bPNCIAec9cjVdaX6vllYTtGviIX6k/qdF3IXG5dbbmXalym91nmkFy9npalSv8DQi8jcbEkhVz3AD7qrhaww== + dependencies: + "@posthog/core" "^1.48.12" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -4981,6 +6102,13 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-ms@^9.2.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.3.0.tgz#dd2524fcb3c326b4931b2272dfd1e1a8ed9a9f5a" + integrity sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ== + dependencies: + parse-ms "^4.0.0" + prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -5075,6 +6203,42 @@ readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +remark-gfm@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + +remend@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/remend/-/remend-1.3.1.tgz#474575f709d39d01f5d3b04333d4fa40d4491133" + integrity sha512-N3DiY5qbRPoa5vkxn1oDLMyXOVTeo6Hp+XOj6SIqJAYUgLS0Q587gILPMom/qm86AQ/ZrcOdwEIzCz8V3J0nxQ== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -5166,6 +6330,14 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -5277,6 +6449,11 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -5362,6 +6539,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -5377,6 +6559,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5459,11 +6646,21 @@ toidentifier@~1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tokenx@^1.3.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tokenx/-/tokenx-1.6.0.tgz#8a5fde974ebd559d43081f143c7d70750b6dbea1" + integrity sha512-CKTjk345ajvBAUp5xUI9a5KKN0zU0lBueVHQbCskH1Hp6WkUKsPW2qGCYNs0pxNyfzxfo+IIjdt2W4sMbw/qBw== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + ts-algebra@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ts-algebra/-/ts-algebra-2.0.0.tgz#4e3e0953878f26518fce7f6bb115064a65388b7a" @@ -5611,11 +6808,65 @@ undici-types@~7.18.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== +undici@^7.28.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.29.0.tgz#ae0f6f62e06e057a9cbb7b2b5fde2bb74f791b8f" + integrity sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw== + unicode-emoji-modifier-base@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + +unified@^11.0.0, unified@^11.0.5: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -5641,6 +6892,11 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.1.tgz#f6d81d2e1c65d00762e5e29b16c5d2d995e208ad" + integrity sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ== + uuid@^14.0.0: version "14.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-14.0.1.tgz#8a5975b3e038902bfd169a10b5202f5ec0cf3faf" @@ -5675,6 +6931,22 @@ vary@^1, vary@^1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -5744,6 +7016,16 @@ ws@^8.18.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.1.tgz#045650cd4b1207809e7547146223c3814a9af586" integrity sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw== +ws@^8.21.0: + version "8.21.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.3.tgz#660b4faddb6a3e575c86e078126919961f4de4fc" + integrity sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw== + +xxhash-wasm@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz#ffe7f0b98220a4afac171e3fb9b6d1f8771f015e" + integrity sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -5810,12 +7092,29 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.2.0.tgz#c4b68ee477f3982c33e4de24a5aa4a354be506d3" + integrity sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg== + +zod-from-json-schema@^0.5.2: + version "0.5.6" + resolved "https://registry.yarnpkg.com/zod-from-json-schema/-/zod-from-json-schema-0.5.6.tgz#a8c7a188a795715d6fff15604101a37dd455d4b1" + integrity sha512-U33AJ7ZWS6y9XNSzMWcdy8hRAvZmWhTtpYJu0SXPT5AArbc9nq2ur7Magzmn5RF9KBV4b3FP0nCpmqqlfXlR9w== + dependencies: + zod "^4.0.17" + zod-to-json-schema@^3.25.1: version "3.25.2" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz#3fa799a7badd554541472fb65843fdc460b2e5aa" integrity sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA== -"zod@^3.25 || ^4.0", "zod@^3.25.76 || ^4": +"zod@^3.25 || ^4.0", "zod@^3.25.76 || ^4", zod@^4.0.17, zod@^4.2.0, zod@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/zod/-/zod-4.4.3.tgz#b680f172885d18bbebf21a834ea25e55a1bbf356" integrity sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==