diff --git a/instrumentation.ts b/instrumentation.ts new file mode 100644 index 00000000..ed05c8d5 --- /dev/null +++ b/instrumentation.ts @@ -0,0 +1,24 @@ +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; +import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"; +import { W3CTraceContextPropagator } from "@opentelemetry/core"; + +const sdk = new NodeSDK({ + serviceName: "my-service", + spanProcessors: [ + new BatchSpanProcessor( + new OTLPTraceExporter({ + url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://localhost:4318/v1/traces", + }) + ), + ], + contextManager: undefined, + autoDetectResources: true, + instrumentations: [getNodeAutoInstrumentations()], + textMapPropagator: new W3CTraceContextPropagator(), +}); + +sdk.start(); + +export { sdk }; diff --git a/package-lock.json b/package-lock.json index fdfe1402..42805325 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,29 +13,31 @@ "@ai-sdk/google-vertex": "^4.0.11", "@ai-sdk/openai": "^3.0.7", "@ai-sdk/openai-compatible": "^2.0.4", - "@ai-sdk/react": "^3.0.21", + "@ai-sdk/react": "^3.0.25", "@dotenvx/dotenvx": "^1.51.4", "@e2b/code-interpreter": "^2.3.3", "@emotion/react": "^11.14.0", + "@gsap/react": "^2.1.2", "@mastra/ai-sdk": "^1.0.0-beta.13", "@mastra/auth-supabase": "^1.0.0-beta.1", - "@mastra/client-js": "^1.0.0-beta.20", + "@mastra/client-js": "^1.0.0-beta.21", "@mastra/cloudflare-d1": "^1.0.0-beta.9", - "@mastra/core": "^1.0.0-beta.20", + "@mastra/core": "^1.0.0-beta.21", "@mastra/deployer": "^1.0.0-beta.20", "@mastra/evals": "^1.0.0-beta.4", "@mastra/lance": "^1.0.0-beta.10", "@mastra/libsql": "^1.0.0-beta.11", "@mastra/loggers": "^1.0.0-beta.4", - "@mastra/mcp": "^1.0.0-beta.8", - "@mastra/memory": "^1.0.0-beta.11", + "@mastra/mcp": "^1.0.0-beta.9", + "@mastra/memory": "^1.0.0-beta.12", "@mastra/mongodb": "^1.0.0-beta.10", "@mastra/observability": "^1.0.0-beta.10", + "@mastra/otel-bridge": "^1.0.0-beta.10", "@mastra/otel-exporter": "^1.0.0-beta.11", "@mastra/pg": "^1.0.0-beta.12", "@mastra/qdrant": "^1.0.0-beta.3", - "@mastra/rag": "^2.0.0-beta.5", - "@mastra/react": "^0.1.0-beta.20", + "@mastra/rag": "^2.0.0-beta.6", + "@mastra/react": "^0.1.0-beta.21", "@mastra/upstash": "^1.0.0-beta.10", "@mastra/vectorize": "^1.0.0-beta.3", "@mastra/voice-google": "^0.12.0-beta.2", @@ -48,6 +50,7 @@ "@octokit/plugin-retry": "^8.0.3", "@openrouter/ai-sdk-provider": "^1.5.4", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.67.3", "@opentelemetry/exporter-trace-otlp-proto": "^0.208.0", "@opeoginni/github-copilot-openai-compatible": "^1.0.0", "@radix-ui/react-accordion": "^1.2.12", @@ -95,21 +98,23 @@ "excalidraw-to-svg": "^3.1.0", "fast-glob": "^3.3.3", "fast-xml-parser": "^5.3.3", - "framer-motion": "^12.24.12", + "framer-motion": "^12.25.0", "gray-matter": "^4.0.3", + "gsap": "^3.14.2", "husky": "^9.1.7", "input-otp": "^1.4.2", "isolated-vm": "^6.0.2", "jose": "^6.1.3", "jsdom": "^27.4.0", "langfuse-vercel": "^3.38.6", + "lenis": "^1.3.17", "lucide-react": "^0.562.0", "marked": "^17.0.1", "monaco-editor": "^0.55.1", "monaco-editor-webpack-plugin": "^7.1.1", "monaco-languages": "^2.11.1", "monaco-themes": "^0.4.8", - "motion": "^12.24.12", + "motion": "^12.25.0", "nanoid": "^5.1.6", "next": "^16.1.1", "next-themes": "^0.4.6", @@ -121,7 +126,7 @@ "re2": "^1.23.0", "react": "^19.2.3", "react-dom": "^19.2.3", - "react-resizable-panels": "^4.3.0", + "react-resizable-panels": "^4.3.3", "recharts": "^2.15.4", "rehype": "^13.0.2", "rehype-class-names": "^2.0.0", @@ -151,7 +156,7 @@ "v0-sdk": "^0.15.3", "vscode-languageserver": "^10.0.0-next.16", "vscode-languageserver-textdocument": "^1.0.12", - "zod": "^4.1.13" + "zod": "^4.2.1" }, "devDependencies": { "@mdx-js/loader": "^3.1.1", @@ -608,13 +613,13 @@ } }, "node_modules/@ai-sdk/react": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-3.0.21.tgz", - "integrity": "sha512-fFFXJBXKtKgJwj7ajObXFCONUTcmCO+nEgd5JiFqoyfMb4xTSbTwn+8snhG+smcAwSJ7YwzZePwRYkse5CyPzg==", + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-3.0.25.tgz", + "integrity": "sha512-84s0jE8EmAFgPNI2MJaEBow4e738wgrZ7U8yYQTby4KgoRJ/zogcuzcBQ3NIGWnXNSqDWWUACGNXqN3ZmHU+bw==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider-utils": "4.0.4", - "ai": "6.0.21", + "ai": "6.0.24", "swr": "^2.2.5", "throttleit": "2.1.0" }, @@ -4262,6 +4267,16 @@ "node": ">=6" } }, + "node_modules/@gsap/react": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@gsap/react/-/react-2.1.2.tgz", + "integrity": "sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==", + "license": "SEE LICENSE AT https://gsap.com/standard-license", + "peerDependencies": { + "gsap": "^3.12.5", + "react": ">=17" + } + }, "node_modules/@hono/node-server": { "version": "1.19.7", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.7.tgz", @@ -5695,14 +5710,14 @@ } }, "node_modules/@mastra/client-js": { - "version": "1.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@mastra/client-js/-/client-js-1.0.0-beta.20.tgz", - "integrity": "sha512-D+Ajgw00Q7i0X4OyhHzGYVTb4SpRCCJUl4KCPPxXKvqhIwF9QKpLuqdUXMcSmrvmnX+zl+I7QD1Js4PkIwCHGA==", + "version": "1.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@mastra/client-js/-/client-js-1.0.0-beta.21.tgz", + "integrity": "sha512-c75S/V8TeuLPSfC5kzPCeGbnHIzbCCN8Z9Iesx+P5oX8zR1WglMhE2Yn5uJrc11gp0KcJnBc1Y1dn0AcHL2maA==", "license": "Apache-2.0", "dependencies": { "@lukeed/uuid": "^2.0.1", - "@mastra/core": "1.0.0-beta.20", - "@mastra/schema-compat": "1.0.0-beta.5", + "@mastra/core": "1.0.0-beta.21", + "@mastra/schema-compat": "1.0.0-beta.6", "json-schema": "^0.4.0" }, "engines": { @@ -5727,9 +5742,9 @@ } }, "node_modules/@mastra/core": { - "version": "1.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@mastra/core/-/core-1.0.0-beta.20.tgz", - "integrity": "sha512-XQZ1RLh1CdZlZLHZzhh34crOQM3x5iNdFiWZSnx408RNzJ4SmYYJA5iRtYDLEIIzxgAasa4H7Ym3Y7jKcbDO7g==", + "version": "1.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@mastra/core/-/core-1.0.0-beta.21.tgz", + "integrity": "sha512-JSZkquAuHleyOUBPTHr1BUu+KQOju7K3ovl2oFCO99oQ3DStszp/gxz4Z6qcU52Xt7O6nzjZjIpcAKdQ6Yjw1A==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -5741,10 +5756,10 @@ "@ai-sdk/ui-utils-v5": "npm:@ai-sdk/ui-utils@1.2.11", "@isaacs/ttlcache": "^1.4.1", "@lukeed/uuid": "^2.0.1", - "@mastra/schema-compat": "1.0.0-beta.5", + "@mastra/schema-compat": "1.0.0-beta.6", "@modelcontextprotocol/sdk": "^1.17.5", "@sindresorhus/slugify": "^2.2.1", - "dotenv": "^16.6.1", + "dotenv": "^17.2.3", "hono": "^4.11.3", "hono-openapi": "^1.1.1", "js-tiktoken": "^1.0.21", @@ -5851,18 +5866,6 @@ } } }, - "node_modules/@mastra/core/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/@mastra/core/node_modules/hono-openapi": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/hono-openapi/-/hono-openapi-1.1.2.tgz", @@ -6014,16 +6017,16 @@ } }, "node_modules/@mastra/mcp": { - "version": "1.0.0-beta.8", - "resolved": "https://registry.npmjs.org/@mastra/mcp/-/mcp-1.0.0-beta.8.tgz", - "integrity": "sha512-GZt6ii9fe+5OLhXAeZYVjOOZvwX79tOQg1pskCZwoXI9X5C85EtWAGtG5905GLXkVxwmcwEwn8JMMloUDP8XNQ==", + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mastra/mcp/-/mcp-1.0.0-beta.9.tgz", + "integrity": "sha512-wM3INUhYHSeAUNfI8J/INSLnOB07nAaYZqZU0o5USyaHx/ZQMnHhI7DGBUn1RJOady4NarnEy9+g5cbxnkd91g==", "license": "Apache-2.0", "dependencies": { "@apidevtools/json-schema-ref-parser": "^14.2.1", "@modelcontextprotocol/sdk": "^1.17.5", "exit-hook": "^5.0.1", "fast-deep-equal": "^3.1.3", - "uuid": "^11.1.0", + "uuid": "^13.0.0", "zod-from-json-schema": "^0.5.0", "zod-from-json-schema-v3": "npm:zod-from-json-schema@^0.0.5" }, @@ -6035,13 +6038,26 @@ "zod": "^3.25.0 || ^4.0.0" } }, + "node_modules/@mastra/mcp/node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/@mastra/memory": { - "version": "1.0.0-beta.11", - "resolved": "https://registry.npmjs.org/@mastra/memory/-/memory-1.0.0-beta.11.tgz", - "integrity": "sha512-LO7E9wjG8JlyTIlmy/zWHA08H8U+JGvI1oGrOfw0tB87Bb4Moqlaw59YBrzpUDE6GUsr6b8t5LPi1IaTCf4z+Q==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/@mastra/memory/-/memory-1.0.0-beta.12.tgz", + "integrity": "sha512-BCL1u+mJnWgRbZdJRDntj4UcmRyTfjCb2qct/olgbFBl1nYYhuld6aK8dQgYS1QcGTOxDD/SIogs76BMfa0uyQ==", "license": "Apache-2.0", "dependencies": { - "@mastra/schema-compat": "1.0.0-beta.5", + "@mastra/schema-compat": "1.0.0-beta.6", "async-mutex": "^0.5.0", "js-tiktoken": "^1.0.21", "json-schema": "^0.4.0", @@ -6085,6 +6101,33 @@ "@mastra/core": ">=1.0.0-0 <2.0.0-0" } }, + "node_modules/@mastra/otel-bridge": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@mastra/otel-bridge/-/otel-bridge-1.0.0-beta.10.tgz", + "integrity": "sha512-lK1AP4NhHA2FqFZ++gfbcsD2x1IDrJgsO+RVjh9zVGrE63kxfPBsoS+9ve9ahZyPfzoNa/1l0bn0/9AVulnwUA==", + "license": "Apache-2.0", + "dependencies": { + "@mastra/observability": "1.0.0-beta.10", + "@mastra/otel-exporter": "1.0.0-beta.11", + "@opentelemetry/api": "^1.9.0" + }, + "engines": { + "node": ">=22.13.0" + }, + "peerDependencies": { + "@mastra/core": ">=1.0.0-0 <2.0.0-0", + "@opentelemetry/auto-instrumentations-node": ">=0.50.0", + "@opentelemetry/sdk-node": ">=0.50.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/auto-instrumentations-node": { + "optional": true + }, + "@opentelemetry/sdk-node": { + "optional": true + } + } + }, "node_modules/@mastra/otel-exporter": { "version": "1.0.0-beta.11", "resolved": "https://registry.npmjs.org/@mastra/otel-exporter/-/otel-exporter-1.0.0-beta.11.tgz", @@ -6236,9 +6279,9 @@ } }, "node_modules/@mastra/rag": { - "version": "2.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mastra/rag/-/rag-2.0.0-beta.5.tgz", - "integrity": "sha512-IofM/6+uZ3FD4K60RuQxclW1gKwkGpUViT7iKh2OoNDh4e4qWTAnF/FkbaSUxrTL0dLpkCzrVLmPZLKMaO0X1w==", + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@mastra/rag/-/rag-2.0.0-beta.6.tgz", + "integrity": "sha512-DR2JbEgNXTBVBBmj1RcrKSyn9rSY5+a2ASJgwrIXRK7EkNdFKlEOotn/Wcr7It84iLbwIu8tSYIBS5FkiI0Bjg==", "license": "Apache-2.0", "dependencies": { "@paralleldrive/cuid2": "^2.3.1", @@ -6253,18 +6296,17 @@ }, "peerDependencies": { "@mastra/core": ">=1.0.0-0 <2.0.0-0", - "ai": "^4.0.0 || ^5.0.0", "zod": "^3.25.0 || ^4.0.0" } }, "node_modules/@mastra/react": { - "version": "0.1.0-beta.20", - "resolved": "https://registry.npmjs.org/@mastra/react/-/react-0.1.0-beta.20.tgz", - "integrity": "sha512-Mdkcf8BJUGk9ltGZ5IcIl1p9HkxWUZLA98wveSgBVf1c+abVlBZGbmyFHn7IX02WPuBm+SaTD2w+Ll9tMbYawg==", + "version": "0.1.0-beta.21", + "resolved": "https://registry.npmjs.org/@mastra/react/-/react-0.1.0-beta.21.tgz", + "integrity": "sha512-cirkAkA41QUmHVws5tKOvnqVoUeTIQj7h7rOHb6+9Vqsq8HhUe67JoEm8LhPofYL4N8vduHQuea91TZbrL46EA==", "license": "Apache-2.0", "dependencies": { "@lukeed/uuid": "^2.0.1", - "@mastra/client-js": "1.0.0-beta.20", + "@mastra/client-js": "1.0.0-beta.21", "@radix-ui/react-tooltip": "^1.2.7", "hast-util-to-jsx-runtime": "^2.3.6", "lucide-react": "^0.522.0", @@ -6399,9 +6441,9 @@ } }, "node_modules/@mastra/schema-compat": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mastra/schema-compat/-/schema-compat-1.0.0-beta.5.tgz", - "integrity": "sha512-d3/VcjFdVOTO4UBKOzLTwLlla2plaCFnaZjJCNnCmUs4eLyX6PKpSzzUW3pxBiRnuOlO04nKMpF+CYcxgTmxsQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@mastra/schema-compat/-/schema-compat-1.0.0-beta.6.tgz", + "integrity": "sha512-9PfpTMpxHnqhqfNTaEFM7MZwxtahVg8NAhkP4sbMQCHcc6fjnJawg4E7kv6cIz3XZTtXsUO7bA8twQrDgoD2Uw==", "license": "Apache-2.0", "dependencies": { "json-schema-to-zod": "^2.7.0", @@ -7627,46 +7669,102 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", - "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.67.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.67.3.tgz", + "integrity": "sha512-sRzw/T1JU7CCATGxnnKhHbWMlwMH1qO62+4/znfsJTg24ATP5qNKFkt8B/JD7HAQ/0ceMeyQin9KOBnjkLkCvA==", "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/instrumentation-amqplib": "^0.56.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.61.1", + "@opentelemetry/instrumentation-aws-sdk": "^0.64.1", + "@opentelemetry/instrumentation-bunyan": "^0.54.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.54.1", + "@opentelemetry/instrumentation-connect": "^0.52.0", + "@opentelemetry/instrumentation-cucumber": "^0.24.0", + "@opentelemetry/instrumentation-dataloader": "^0.26.1", + "@opentelemetry/instrumentation-dns": "^0.52.0", + "@opentelemetry/instrumentation-express": "^0.57.1", + "@opentelemetry/instrumentation-fastify": "^0.53.1", + "@opentelemetry/instrumentation-fs": "^0.28.0", + "@opentelemetry/instrumentation-generic-pool": "^0.52.0", + "@opentelemetry/instrumentation-graphql": "^0.56.0", + "@opentelemetry/instrumentation-grpc": "^0.208.0", + "@opentelemetry/instrumentation-hapi": "^0.55.1", + "@opentelemetry/instrumentation-http": "^0.208.0", + "@opentelemetry/instrumentation-ioredis": "^0.57.0", + "@opentelemetry/instrumentation-kafkajs": "^0.18.1", + "@opentelemetry/instrumentation-knex": "^0.53.1", + "@opentelemetry/instrumentation-koa": "^0.57.1", + "@opentelemetry/instrumentation-lru-memoizer": "^0.53.1", + "@opentelemetry/instrumentation-memcached": "^0.52.1", + "@opentelemetry/instrumentation-mongodb": "^0.62.0", + "@opentelemetry/instrumentation-mongoose": "^0.55.1", + "@opentelemetry/instrumentation-mysql": "^0.55.0", + "@opentelemetry/instrumentation-mysql2": "^0.55.1", + "@opentelemetry/instrumentation-nestjs-core": "^0.55.0", + "@opentelemetry/instrumentation-net": "^0.53.0", + "@opentelemetry/instrumentation-openai": "^0.7.1", + "@opentelemetry/instrumentation-oracledb": "^0.34.1", + "@opentelemetry/instrumentation-pg": "^0.61.2", + "@opentelemetry/instrumentation-pino": "^0.55.1", + "@opentelemetry/instrumentation-redis": "^0.57.2", + "@opentelemetry/instrumentation-restify": "^0.54.0", + "@opentelemetry/instrumentation-router": "^0.53.0", + "@opentelemetry/instrumentation-runtime-node": "^0.22.0", + "@opentelemetry/instrumentation-socket.io": "^0.55.1", + "@opentelemetry/instrumentation-tedious": "^0.28.0", + "@opentelemetry/instrumentation-undici": "^0.19.0", + "@opentelemetry/instrumentation-winston": "^0.53.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.32.0", + "@opentelemetry/resource-detector-aws": "^2.9.0", + "@opentelemetry/resource-detector-azure": "^0.17.0", + "@opentelemetry/resource-detector-container": "^0.8.0", + "@opentelemetry/resource-detector-gcp": "^0.44.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-node": "^0.208.0" + }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^2.0.0" } }, - "node_modules/@opentelemetry/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", - "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.208.0.tgz", + "integrity": "sha512-AmZDKFzbq/idME/yq68M155CJW1y056MNBekH9OZewiZKaqgwYN4VYfn3mXVPftYsfrCM2r4V6tS8H2LmfiDCg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/sdk-logs": "0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.203.0.tgz", - "integrity": "sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.208.0.tgz", + "integrity": "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==", "license": "Apache-2.0", "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.203.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", - "@opentelemetry/otlp-transformer": "0.203.0", - "@opentelemetry/sdk-logs": "0.203.0" + "@opentelemetry/api-logs": "0.208.0", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/sdk-logs": "0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7675,41 +7773,60 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/api-logs": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", - "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.208.0.tgz", + "integrity": "sha512-Wy8dZm16AOfM7yddEzSFzutHZDZ6HspKUODSUJVjyhnZFMBojWDjSNgduyCMlw6qaxJYz0dlb0OEcb4Eme+BfQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api-logs": "0.208.0", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-logs": "0.208.0", + "@opentelemetry/sdk-trace-base": "2.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.208.0.tgz", + "integrity": "sha512-YbEnk7jjYmvhIwp2xJGkEvdgnayrA2QSr28R1LR1klDPvCxsoQPxE6TokDbQpoCEhD3+KmJVEXfb4EeEQxjymg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.208.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-metrics": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", - "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.208.0.tgz", + "integrity": "sha512-QZ3TrI90Y0i1ezWQdvreryjY0a5TK4J9gyDLIyhLBwV+EQUvyp5wR7TFPKCAexD4TDSWM0t3ulQDbYYjVtzTyA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-transformer": "0.203.0" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-metrics": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7718,16 +7835,18 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.203.0.tgz", - "integrity": "sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.208.0.tgz", + "integrity": "sha512-CvvVD5kRDmRB/uSMalvEF6kiamY02pB46YAqclHtfjJccNZFxbkkXkMMmcJ7NgBFa5THmQBNVQ2AHyX29nRxOw==", "license": "Apache-2.0", "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.203.0", - "@opentelemetry/otlp-transformer": "0.203.0" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.208.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-metrics": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7736,19 +7855,15 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-transformer": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", - "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-prometheus": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.208.0.tgz", + "integrity": "sha512-Rgws8GfIfq2iNWCD3G1dTD9xwYsCof1+tc5S5X0Ahdb5CrAPE+k5P70XCWHqrFFurVCcKaHLJ/6DjIBHWVfLiw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-logs": "0.203.0", - "@opentelemetry/sdk-metrics": "2.0.1", - "@opentelemetry/sdk-trace-base": "2.0.1", - "protobufjs": "^7.3.0" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-metrics": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7757,83 +7872,90 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/resources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", - "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.208.0.tgz", + "integrity": "sha512-E/eNdcqVUTAT7BC+e8VOw/krqb+5rjzYkztMZ/o+eyJl+iEY6PfczPXpwWuICwvsm0SIhBoh9hmYED5Vh5RwIw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-logs": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", - "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.208.0.tgz", + "integrity": "sha512-jbzDw1q+BkwKFq9yxhjAJ9rjKldbt5AgIy1gmEIJjEV/WRxQ3B6HcLVkwbjJ3RcMif86BDNKR846KJ0tY0aOJA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-metrics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", - "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-http": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.208.0.tgz", + "integrity": "sha512-rhmK46DRWEbQQB77RxmVXGyjs6783crXCnFjYQj+4tDH/Kpv9Rbg3h2kaNyp5Vz2emF1f9HOQQvZoHzwMWOFZQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/instrumentation": "0.208.0", + "@opentelemetry/semantic-conventions": "^1.29.0", + "forwarded-parse": "2.1.2" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", - "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", + "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-transformer": "0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.203.0.tgz", - "integrity": "sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.208.0.tgz", + "integrity": "sha512-fGvAg3zb8fC0oJAzfz7PQppADI2HYB7TSt/XoCaBJFi1mSquNUjtHXEoviMgObLAa1NRIgOC1lsV1OUKi+9+lQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.203.0", - "@opentelemetry/otlp-transformer": "0.203.0", - "@opentelemetry/sdk-logs": "0.203.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7842,25 +7964,34 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/api-logs": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", - "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", + "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api-logs": "0.208.0", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-logs": "0.208.0", + "@opentelemetry/sdk-metrics": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0", + "protobufjs": "^7.3.0" }, "engines": { - "node": ">=8.0.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/propagator-b3": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-2.2.0.tgz", + "integrity": "sha512-9CrbTLFi5Ee4uepxg2qlpQIozoJuoAZU5sKMx0Mn7Oh+p7UrgCiEV6C02FOxxdYVRRFQVCinYR8Kf6eMSQsIsw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/core": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7869,50 +8000,65 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", - "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/propagator-jaeger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.2.0.tgz", + "integrity": "sha512-FfeOHOrdhiNzecoB1jZKp2fybqmqMPJUXe2ZOydP7QzmTPYcfPeuaclTLYVhK3HyJf71kt8sTl92nV4YIaLaKA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-transformer": "0.203.0" + "@opentelemetry/core": "2.2.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/otlp-transformer": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", - "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.44.0.tgz", + "integrity": "sha512-sj9WSSjMyZJDP7DSmfQpsfivM2sQECwhjAmK6V97uVAeJiXSMiPhfo3fZi0Hpu+GQQ1Wb09qQIkwkMjwr0MH/g==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-logs": "0.203.0", - "@opentelemetry/sdk-metrics": "2.0.1", - "@opentelemetry/sdk-trace-base": "2.0.1", - "protobufjs": "^7.3.0" + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0", + "gcp-metadata": "^6.0.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/resources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", - "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-node": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.208.0.tgz", + "integrity": "sha512-pbAqpZ7zTMFuTf3YecYsecsto/mheuvnK2a/jgstsE5ynWotBjgF5bnz5500W9Xl2LeUfg04WMt63TWtAgzRMw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", + "@opentelemetry/api-logs": "0.208.0", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/exporter-logs-otlp-grpc": "0.208.0", + "@opentelemetry/exporter-logs-otlp-http": "0.208.0", + "@opentelemetry/exporter-logs-otlp-proto": "0.208.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.208.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.208.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.208.0", + "@opentelemetry/exporter-prometheus": "0.208.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.208.0", + "@opentelemetry/exporter-trace-otlp-http": "0.208.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.208.0", + "@opentelemetry/exporter-zipkin": "2.2.0", + "@opentelemetry/instrumentation": "0.208.0", + "@opentelemetry/propagator-b3": "2.2.0", + "@opentelemetry/propagator-jaeger": "2.2.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-logs": "0.208.0", + "@opentelemetry/sdk-metrics": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0", + "@opentelemetry/sdk-trace-node": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -7922,69 +8068,60 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-logs": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", - "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/gcp-metadata": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", + "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" + "gaxios": "^6.1.1", + "google-logging-utils": "^0.0.2", + "json-bigint": "^1.0.0" }, "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" + "node": ">=14" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-metrics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", - "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", + "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" - }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", - "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", + "node_modules/@opentelemetry/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", + "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.203.0.tgz", - "integrity": "sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.203.0.tgz", + "integrity": "sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", + "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-logs": "0.203.0", - "@opentelemetry/sdk-trace-base": "2.0.1" + "@opentelemetry/sdk-logs": "0.203.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -7993,7 +8130,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/api-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", @@ -8005,7 +8142,7 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/core": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", @@ -8020,7 +8157,7 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", @@ -8036,7 +8173,25 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.203.0.tgz", + "integrity": "sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/otlp-transformer": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", @@ -8057,7 +8212,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/resources": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", @@ -8073,7 +8228,7 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", @@ -8090,7 +8245,7 @@ "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", @@ -8106,7 +8261,7 @@ "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", @@ -8123,20 +8278,17 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.203.0.tgz", - "integrity": "sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.203.0.tgz", + "integrity": "sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==", "license": "Apache-2.0", "dependencies": { - "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", "@opentelemetry/otlp-exporter-base": "0.203.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-metrics": "2.0.1" + "@opentelemetry/sdk-logs": "0.203.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8145,7 +8297,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/api-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", @@ -8157,7 +8309,7 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/core": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", @@ -8172,7 +8324,7 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-exporter-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", @@ -8188,25 +8340,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.203.0.tgz", - "integrity": "sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==", - "license": "Apache-2.0", - "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.203.0", - "@opentelemetry/otlp-transformer": "0.203.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-transformer": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/otlp-transformer": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", @@ -8227,7 +8361,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/resources": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", @@ -8243,7 +8377,7 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", @@ -8260,7 +8394,7 @@ "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", @@ -8276,7 +8410,7 @@ "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", @@ -8293,17 +8427,19 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.203.0.tgz", - "integrity": "sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.203.0.tgz", + "integrity": "sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==", "license": "Apache-2.0", "dependencies": { + "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-metrics": "2.0.1" + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-trace-base": "2.0.1" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8312,7 +8448,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/api-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", @@ -8324,7 +8460,7 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/core": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", @@ -8339,7 +8475,7 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-exporter-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", @@ -8355,7 +8491,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-transformer": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", @@ -8376,7 +8512,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/resources": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", @@ -8392,7 +8528,7 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-logs": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", @@ -8409,7 +8545,7 @@ "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", @@ -8425,7 +8561,7 @@ "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", @@ -8442,15 +8578,17 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.203.0.tgz", - "integrity": "sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.203.0.tgz", + "integrity": "sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==", "license": "Apache-2.0", "dependencies": { + "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.0.1", "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-metrics": "2.0.1" @@ -8462,7 +8600,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/api-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", @@ -8474,7 +8612,7 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/core": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", @@ -8489,7 +8627,7 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", @@ -8505,7 +8643,25 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.203.0.tgz", + "integrity": "sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/otlp-transformer": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", @@ -8526,7 +8682,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/resources": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", @@ -8542,7 +8698,7 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-logs": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-logs": { "version": "0.203.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", @@ -8559,7 +8715,7 @@ "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", @@ -8575,7 +8731,7 @@ "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", @@ -8592,13 +8748,15 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-prometheus": { + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.203.0.tgz", - "integrity": "sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.203.0.tgz", + "integrity": "sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-metrics": "2.0.1" }, @@ -8609,22 +8767,71 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/api-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", + "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/api": "^1.3.0" }, "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", + "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-transformer": "0.203.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", + "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/resources": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", @@ -8640,7 +8847,24 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", + "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", @@ -8656,20 +8880,35 @@ "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.205.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.205.0.tgz", - "integrity": "sha512-ZBksUk84CcQOuDJB65yu5A4PORkC4qEsskNwCrPZxDLeWjPOFZNSWt0E0jQxKCY8PskLhjNXJYo12YaqsYvGFA==", + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", + "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "2.1.0", - "@opentelemetry/otlp-exporter-base": "0.205.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.205.0", - "@opentelemetry/otlp-transformer": "0.205.0", - "@opentelemetry/resources": "2.1.0", - "@opentelemetry/sdk-trace-base": "2.1.0" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.203.0.tgz", + "integrity": "sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8678,12 +8917,23 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", - "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/api-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", + "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -8694,14 +8944,50 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", - "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", + "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.1.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-transformer": "0.203.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", + "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -8711,15 +8997,47 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", - "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", + "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.1.0", - "@opentelemetry/resources": "2.1.0", + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-metrics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", + "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", + "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -8729,18 +9047,15 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.205.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.205.0.tgz", - "integrity": "sha512-vr2bwwPCSc9u7rbKc74jR+DXFvyMFQo9o5zs+H/fgbK672Whw/1izUKVf+xfWOdJOvuwTnfWxy+VAY+4TSo74Q==", + "node_modules/@opentelemetry/exporter-prometheus": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.203.0.tgz", + "integrity": "sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.1.0", - "@opentelemetry/otlp-exporter-base": "0.205.0", - "@opentelemetry/otlp-transformer": "0.205.0", - "@opentelemetry/resources": "2.1.0", - "@opentelemetry/sdk-trace-base": "2.1.0" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8749,68 +9064,858 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", - "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", + "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/resources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/sdk-metrics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", + "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.205.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.205.0.tgz", + "integrity": "sha512-ZBksUk84CcQOuDJB65yu5A4PORkC4qEsskNwCrPZxDLeWjPOFZNSWt0E0jQxKCY8PskLhjNXJYo12YaqsYvGFA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.205.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.205.0", + "@opentelemetry/otlp-transformer": "0.205.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/sdk-trace-base": "2.1.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", + "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", + "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.205.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.205.0.tgz", + "integrity": "sha512-vr2bwwPCSc9u7rbKc74jR+DXFvyMFQo9o5zs+H/fgbK672Whw/1izUKVf+xfWOdJOvuwTnfWxy+VAY+4TSo74Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.205.0", + "@opentelemetry/otlp-transformer": "0.205.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/sdk-trace-base": "2.1.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", + "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", + "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.208.0.tgz", + "integrity": "sha512-q844Jc3ApkZVdWYd5OAl+an3n1XXf3RWHa3Zgmnhw3HpsM3VluEKHckUUEqHPzbwDUx2lhPRVkqK7LsJ/CbDzA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-exporter-base": "0.208.0", + "@opentelemetry/otlp-transformer": "0.208.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", + "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.2.0", + "@opentelemetry/otlp-transformer": "0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", + "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.208.0", + "@opentelemetry/core": "2.2.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-logs": "0.208.0", + "@opentelemetry/sdk-metrics": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.2.0.tgz", + "integrity": "sha512-VV4QzhGCT7cWrGasBWxelBjqbNBbyHicWWS/66KoZoe9BzYwFB72SH2/kkc4uAviQlO8iwv2okIJy+/jqqEHTg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.2.0", + "@opentelemetry/resources": "2.2.0", + "@opentelemetry/sdk-trace-base": "2.2.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz", + "integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@opentelemetry/api-logs": "0.208.0", + "import-in-the-middle": "^2.0.0", + "require-in-the-middle": "^8.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.56.0.tgz", + "integrity": "sha512-/orV2zO2K7iGa1TR6lbs170LNNDbeTC6E3JF1EeB+okJ3rB5tl1gHFSjoqEDkQYFprNs5CPitqU8Y4l4S2Pkmg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.61.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.61.1.tgz", + "integrity": "sha512-leISmqN7/KSCYAKEVOAnQ0NUCa3rigB7ShCVLnYrHr6+7CXPef7C+nvowElMcYTid8egiHKgApR/FaNdlBda3A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/aws-lambda": "^8.10.155" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.64.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.64.1.tgz", + "integrity": "sha512-A8joPAuHwvwrkG5UpH7OYhzkeYznNBiG3o1TKoZ7yvyXU/q4CNxnZ7vzZBEpt9OocptCe6X/YyBENFSa0axqiw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.34.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.54.0.tgz", + "integrity": "sha512-DnPoHSLcKwQmueW+7OOaXFD/cj1M6hqwTm6P88QdMbln/dqEatLxzt/ACPk4Yb5x4aU3ZLyeLyKxtzfhp76+aw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.208.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@types/bunyan": "1.8.11" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.54.1.tgz", + "integrity": "sha512-wVGI4YrWmaNNtNjg84KTl8sHebG7jm3PHvmZxPl2V/aSskAyQMSxgJZpnv1dmBmJuISc+a8H8daporljbscCcQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.52.0.tgz", + "integrity": "sha512-GXPxfNB5szMbV3I9b7kNWSmQBoBzw7MT0ui6iU/p+NIzVx3a06Ri2cdQO7tG9EKb4aKSLmfX9Cw5cKxXqX6Ohg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.38" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.24.0.tgz", + "integrity": "sha512-ICHrmax9PwU/Z+fehD0uIjM8W0cEvdToglV1+o76Mgw51HZBVp2Y3mkga1qMPIN5tPMoWUYoYtI4U85rea5HYg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.26.1.tgz", + "integrity": "sha512-S2JAM6lV16tMravuPLd3tJCC6ySb5a//5KgJeXutbTVb/UbSTXcnHSdEtMaAvE2KbazVWyWzcoytLRy6AUOwsw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.52.0.tgz", + "integrity": "sha512-XJvS8PkZec+X6HhOi1xldJydTpmIUAW14+1vyqwAK97LWKXlxmiWst8/fjZ709+CHgshz8i5V37yCHlr6o3pxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.57.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.57.1.tgz", + "integrity": "sha512-r+ulPbvgG8rGgFFWbJWJpTh7nMzsEYH7rBFNWdFs7ZfVAtgpFijMkRtU7DecIo6ItF8Op+RxogSuk/083W8HKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.53.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.53.1.tgz", + "integrity": "sha512-tTa84J9rcrl4iTHdJDwirrNbM4prgJH+MF0iMlVLu++6gZg8TTfmYYqDiKPWBgdXB4M+bnlCkvgag36uV34uwA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.28.0.tgz", + "integrity": "sha512-FFvg8fq53RRXVBRHZViP+EMxMR03tqzEGpuq55lHNbVPyFklSVfQBN50syPhK5UYYwaStx0eyCtHtbRreusc5g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.52.0.tgz", + "integrity": "sha512-ISkNcv5CM2IwvsMVL31Tl61/p2Zm2I2NAsYq5SSBgOsOndT0TjnptjufYVScCnD5ZLD1tpl4T3GEYULLYOdIdQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.56.0.tgz", + "integrity": "sha512-IPvNk8AFoVzTAM0Z399t34VDmGDgwT6rIqCUug8P9oAGerl2/PEIYMPOl/rerPGu+q8gSWdmbFSjgg7PDVRd3Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.208.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.208.0.tgz", + "integrity": "sha512-8hFEQRAiOyIWO6LYj7tUfdAgNCuQUdYjLYMItRYlOLGJhshGdGYD7aeNzt2H+HPMDEWnKWqldIHfLTqM7ep7gg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "0.208.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.55.1.tgz", + "integrity": "sha512-Pm1HCHnnijUOGXd+nyJp96CfU8Lb6XdT6H6YvvmXO/NHMb6tV+EjzDRBr9sZ/XQjka9zLCz7jR0js7ut0IJAyg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.203.0.tgz", + "integrity": "sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/instrumentation": "0.203.0", + "@opentelemetry/semantic-conventions": "^1.29.0", + "forwarded-parse": "2.1.2" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/api-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", + "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/instrumentation": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.203.0.tgz", + "integrity": "sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.203.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/import-in-the-middle": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.57.0.tgz", + "integrity": "sha512-o/PYGPbfFbS0Sq8EEQC8YUgDMiTGvwoMejPjV2d466yJoii+BUpffGejVQN0hC5V5/GT29m1B1jL+3yruNxwDw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/redis-common": "^0.38.2", + "@opentelemetry/semantic-conventions": "^1.33.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.18.1.tgz", + "integrity": "sha512-qM9hk7BIsVWqWJsrCa1fAEcEfutVvwhHO9kk4vpwaTGYR+lPWRk2r5+nEPcM+sIiYBmQNJCef5tEjQpKxTpP0A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.30.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.53.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.53.1.tgz", + "integrity": "sha512-tIW3gqVC8d9CCE+oxPO63WNvC+5PKC/LrPrYWFobii5afUpHJV+0pfyt08okAFBHztzT0voMOEPGkLKoacZRXQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.57.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.57.1.tgz", + "integrity": "sha512-XPjdzgXvMG3YSZvsSgOj0Je0fsmlaBYIFFGJqUn1HRpbrVjdpP45eXI+6yUp48J8N5Qss32WDD5f+2tmV7Xvsg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.36.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.53.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.53.1.tgz", + "integrity": "sha512-L93bPJKFzrObD4FvKpsavYEFTzXFKMmAeRHz7J4lUFc7TPZLouxX3PYW1+YGr/bT1y24H9NLNX66l7BW1s75QA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.52.1.tgz", + "integrity": "sha512-qg92SyWAypSZmX3Lhm2wz4BsovKarkWg9OHm4DPW6fGzmk40eB5voQIuctrBAfsml6gr+vbg4VEBcC1AKRvzzQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.62.0.tgz", + "integrity": "sha512-hcEEW26ToGVpQGblXk9m3p2cXkBu9j2bcyeevS/ahujr1WodfrItmMldWCEJkmN4+4uMo9pb6jAMhm6bZIMnig==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.55.1.tgz", + "integrity": "sha512-M2MusLn/31YOt176Y6qXJQcpDuZPmq/fqQ9vIaKb4x/qIJ3oYO2lT45SUMFmZpODEhrpYXgGaEKwG6TGXhlosA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.55.0.tgz", + "integrity": "sha512-tEGaVMzqAlwhoDomaUWOP2H4KkK16m18qq+TZoyvcSe9O21UxnYFWQa87a4kmc7N4Q6Q70L/YhwDt+fC+NDRBA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0", + "@types/mysql": "2.15.27" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.55.1.tgz", + "integrity": "sha512-/cw7TzEmeaCQ5xi+FwrCWQUlY8v9RXjN5tqtb0D1sgBedfiV6DvW+dlMl1jo6Nkx9eSHmGcDy9IjyR0frHpKLg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0", + "@opentelemetry/sql-common": "^0.41.2" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.55.0.tgz", + "integrity": "sha512-JFLNhbbEGnnQrMKOYoXx0nNk5N9cPeghu4xP/oup40a7VaSeYruyOiFbg9nkbS4ZQiI8aMuRqUT3Mo4lQjKEKg==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.30.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", - "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.53.0.tgz", + "integrity": "sha512-d8tU5z0fx28z622RwVwU4zfNt40EKxzEcQcaPzch/CqpkKNAlvBOW/1K9OkjNdydpsKqxpMkbjvo3tY6PD1EMA==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.1.0", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", - "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", + "node_modules/@opentelemetry/instrumentation-openai": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-openai/-/instrumentation-openai-0.7.1.tgz", + "integrity": "sha512-QDnnAYxByJoJ3jMly/EwRbXhnfZpGigfBcHyPcgWEMR4bfawJZhdOdFi1GVcC4ImdS7fGaYQOTX1WW24mftISg==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.1.0", - "@opentelemetry/resources": "2.1.0", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/api-logs": "^0.208.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.36.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.208.0.tgz", - "integrity": "sha512-q844Jc3ApkZVdWYd5OAl+an3n1XXf3RWHa3Zgmnhw3HpsM3VluEKHckUUEqHPzbwDUx2lhPRVkqK7LsJ/CbDzA==", + "node_modules/@opentelemetry/instrumentation-oracledb": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-oracledb/-/instrumentation-oracledb-0.34.1.tgz", + "integrity": "sha512-RI5EV3ZIkHA748dPm4hwLkUnqYU/rrBcq+qA5cNks0dZaAgsu46XMA/MEPcubrBSsgaG1NAIG78P9NLZs2gN/A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-exporter-base": "0.208.0", - "@opentelemetry/otlp-transformer": "0.208.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.34.0", + "@types/oracledb": "6.5.2" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8819,14 +9924,18 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", - "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.61.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.61.2.tgz", + "integrity": "sha512-l1tN4dX8Ig1bKzMu81Q1EBXWFRy9wqchXbeHDRniJsXYND5dC8u1Uhah7wz1zZta3fbBWflP2mJZcDPWNsAMRg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-transformer": "0.208.0" + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.34.0", + "@opentelemetry/sql-common": "^0.41.2", + "@types/pg": "8.15.6", + "@types/pg-pool": "2.0.6" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8835,19 +9944,15 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/otlp-transformer": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", - "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.55.1.tgz", + "integrity": "sha512-rt35H5vvP9KA1xrMrJGsnqwcVxyt8dher04pR64gvX4rxLwsmijUF1cEMbPZ2O8jXpeV8nAIzGHBnWEYp5ILNA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-logs": "0.208.0", - "@opentelemetry/sdk-metrics": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0", - "protobufjs": "^7.3.0" + "@opentelemetry/api-logs": "^0.208.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8856,35 +9961,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.2.0.tgz", - "integrity": "sha512-VV4QzhGCT7cWrGasBWxelBjqbNBbyHicWWS/66KoZoe9BzYwFB72SH2/kkc4uAviQlO8iwv2okIJy+/jqqEHTg==", + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.57.2.tgz", + "integrity": "sha512-vD1nzOUDOPjnvDCny7fmRSX/hMTFzPUCZKADF5tQ5DvBqlOEV/de/tOkwvIwo9YX956EBMT+8qSjhd7qPXFkRw==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/redis-common": "^0.38.2", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz", - "integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==", + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.54.0.tgz", + "integrity": "sha512-V6kCoAtU8jLuUi9hr3IEWVTHr8d8s4wObV1DlI/A+VzYToK1W4Zv1SI8x3hiF0yR1poRjOY6rl91Q427HHTMww==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "import-in-the-middle": "^2.0.0", - "require-in-the-middle": "^8.0.0" + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8893,16 +9995,14 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.203.0.tgz", - "integrity": "sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==", + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.53.0.tgz", + "integrity": "sha512-3gF9jJ7C3lwlCOer1KzKKdpLr6/c7yOZBP44KI+Xi/TqiZjhsfUlHjetzC6BLDjkSk1DnIGyf+YzJR4aF5dJBQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/instrumentation": "0.203.0", - "@opentelemetry/semantic-conventions": "^1.29.0", - "forwarded-parse": "2.1.2" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8911,42 +10011,45 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/api-logs": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", - "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "node_modules/@opentelemetry/instrumentation-runtime-node": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-runtime-node/-/instrumentation-runtime-node-0.22.0.tgz", + "integrity": "sha512-27aodhzdWqPuPVWM2UsLYz2gl6yLRqLP7Z6Kn6ukUx/I+9oruaztJkLtYg4SqCrm/7Nsv9FIly7gO3/ZyDIMPg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/instrumentation": "^0.208.0" }, "engines": { - "node": ">=8.0.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.55.1.tgz", + "integrity": "sha512-KQaOvZlw7NpA/VDRJdm45FIdzt4hXrDhvtmLU5a2AttcTI9e/VpVg4Y/LPOXM+o29VkKxETZzJfRlOJEIHl+uQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/instrumentation": "^0.208.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/instrumentation": { - "version": "0.203.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.203.0.tgz", - "integrity": "sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==", + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.28.0.tgz", + "integrity": "sha512-nQ9k1Bdk2yG4SPRuHZ+QVcc3YMm2sfsBV1MQIc/Y/OcN83Q+jA7gXgYgYIblQ1wI+/RtKlJpdl6hobAXuj+pSA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.203.0", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1" + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.33.0", + "@types/tedious": "^4.0.14" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -8955,30 +10058,37 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/import-in-the-middle": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", - "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.19.0.tgz", + "integrity": "sha512-Pst/RhR61A2OoZQZkn6OLpdVpXp6qn3Y92wXa6umfJe9rV640r4bc6SWvw4pPN6DiQqPu2c8gnSSZPDtC6JlpQ==", "license": "Apache-2.0", "dependencies": { - "acorn": "^8.14.0", - "acorn-import-attributes": "^1.9.5", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.208.0", + "@opentelemetry/semantic-conventions": "^1.24.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/require-in-the-middle": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", - "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.53.0.tgz", + "integrity": "sha512-yF9v0DphyG715er1HG1pbweNUSygvc22xw2s2Y8E8oaEMJo2/nH3Ww/8c4K6gdI/6xvi2unla1KQBCYN4uCo8w==", + "license": "Apache-2.0", "dependencies": { - "debug": "^4.3.5", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.8" + "@opentelemetry/api-logs": "^0.208.0", + "@opentelemetry/instrumentation": "^0.208.0" }, "engines": { - "node": ">=8.6.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/otlp-exporter-base": { @@ -9230,6 +10340,81 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz", + "integrity": "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.32.0.tgz", + "integrity": "sha512-W+n4ZIbNndOaW6xlGeW7afKQeCMNlOHsSflGRLkzjnSfAl2tWJU5Mhr6hf/t6m8uhic71psHx/CoFQMsRQKnvQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-2.9.0.tgz", + "integrity": "sha512-2dk1TuuImatD8n0OyBgghucluGcj2XtnortmJdLH0OffM7cVtat4h7Dcg8IZvP7WrMjbP4ZQQ2cpD1Fhvx6BsA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.17.0.tgz", + "integrity": "sha512-JGNPW+Om8MNiVOK1Jl5jg3znGJQP7YeGsgRQiegftqEZj0th8e1Uf6U5s6H672KBT442WDGOG0a4du5xJgJB5w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/semantic-conventions": "^1.37.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.8.0.tgz", + "integrity": "sha512-nq0DlvJuKtnQWTqK3kwvYiaWnHgErpdS60e/JA50btD0CDqMq0vkl1xd6YFC7PvcPsOdiwXINRP5J/GncF70UQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, "node_modules/@opentelemetry/resource-detector-gcp": { "version": "0.40.3", "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.40.3.tgz", @@ -9318,6 +10503,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.203.0.tgz", "integrity": "sha512-zRMvrZGhGVMvAbbjiNQW3eKzW/073dlrSiAKPVWmkoQzah9wfynpVPeL55f9fVIm0GaBxTLcPeukWGy0/Wj7KQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", @@ -9690,6 +10876,21 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.41.2.tgz", + "integrity": "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, "node_modules/@opeoginni/github-copilot-openai-compatible": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@opeoginni/github-copilot-openai-compatible/-/github-copilot-openai-compatible-1.0.0.tgz", @@ -12446,6 +13647,15 @@ "@types/node": "*" } }, + "node_modules/@types/bunyan": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", + "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/caseless": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", @@ -12947,6 +14157,15 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -12975,6 +14194,15 @@ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "license": "MIT" }, + "node_modules/@types/mysql": { + "version": "2.15.27", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.27.tgz", + "integrity": "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "24.10.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", @@ -13000,12 +14228,41 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "license": "MIT" }, + "node_modules/@types/oracledb": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-6.5.2.tgz", + "integrity": "sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "license": "MIT" }, + "node_modules/@types/pg": { + "version": "8.15.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", + "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, "node_modules/@types/phoenix": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.7.tgz", @@ -13137,6 +14394,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", @@ -19650,9 +20916,9 @@ "license": "MIT" }, "node_modules/framer-motion": { - "version": "12.24.12", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.24.12.tgz", - "integrity": "sha512-W+tBOI1SDGNMH4D4mADY95qYd16Drke2Tj9zlGlwTGSCi6yy8wbMmPY1mvirfcTK8HBeuuCd2PflHdN/zbL4ew==", + "version": "12.25.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.25.0.tgz", + "integrity": "sha512-mlWqd0rApIjeyhTCSNCqPYsUAEhkcUukZxH3ke6KbstBRPcxhEpuIjmiUQvB+1E9xkEm5SpNHBgHCapH/QHTWg==", "license": "MIT", "dependencies": { "motion-dom": "^12.24.11", @@ -20660,6 +21926,13 @@ "node": ">=6.0" } }, + "node_modules/gsap": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.14.2.tgz", + "integrity": "sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==", + "license": "Standard 'no charge' license: https://gsap.com/standard-license.", + "peer": true + }, "node_modules/gtoken": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", @@ -22580,6 +23853,32 @@ "url": "https://ko-fi.com/killymxi" } }, + "node_modules/lenis": { + "version": "1.3.17", + "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.3.17.tgz", + "integrity": "sha512-k9T9rgcxne49ggJOvXCraWn5dt7u2mO+BNkhyu6yxuEnm9c092kAW5Bus5SO211zUvx7aCCEtzy9UWr0RB+oJw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "react": ">=17.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "react": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -25371,12 +26670,12 @@ } }, "node_modules/motion": { - "version": "12.24.12", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.24.12.tgz", - "integrity": "sha512-usaP62NpHmM8++QrEnNoCco6qrtK1AtzkeHfgW+4qICE0k7ykK+dPJGaRjEzo7sF1GcrYskrGBB/r5RtqnminQ==", + "version": "12.25.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.25.0.tgz", + "integrity": "sha512-jBFohEYklpZ+TL64zv03sHdqr1Tsc8/yDy7u68hVzi7hTJYtv53AduchqCiY3aWi4vY1hweS8DWtgCuckusYdQ==", "license": "MIT", "dependencies": { - "framer-motion": "^12.24.12", + "framer-motion": "^12.25.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -27557,9 +28856,9 @@ } }, "node_modules/react-resizable-panels": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.3.0.tgz", - "integrity": "sha512-F8LGxzK3tq5N4m1oSvTZSDTH+QUhr5qPLuFhPyxVrOPqCFGZ1j2KOSx2K96aiKC4UI4kGR3/NKHczCumTgxVxA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.3.3.tgz", + "integrity": "sha512-7ZmYcoOiipVwwz8X9O/HiRbm8THM6qnXo7p5dPI6ivzdDoteHo3iXS1pijs8Z4/XU8V1RwhuGgJiZU5G7Zy0KQ==", "license": "MIT", "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/package.json b/package.json index 852c5c50..a346aafd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agentstack", - "version": "1.1.1", + "version": "1.1.2", "description": "Multi-agent frameworks and tools for building AI applications with Mastra.", "main": "index.js", "scripts": { @@ -46,29 +46,31 @@ "@ai-sdk/google-vertex": "^4.0.11", "@ai-sdk/openai": "^3.0.7", "@ai-sdk/openai-compatible": "^2.0.4", - "@ai-sdk/react": "^3.0.21", + "@ai-sdk/react": "^3.0.25", "@dotenvx/dotenvx": "^1.51.4", "@e2b/code-interpreter": "^2.3.3", "@emotion/react": "^11.14.0", + "@gsap/react": "^2.1.2", "@mastra/ai-sdk": "^1.0.0-beta.13", "@mastra/auth-supabase": "^1.0.0-beta.1", - "@mastra/client-js": "^1.0.0-beta.20", + "@mastra/client-js": "^1.0.0-beta.21", "@mastra/cloudflare-d1": "^1.0.0-beta.9", - "@mastra/core": "^1.0.0-beta.20", + "@mastra/core": "^1.0.0-beta.21", "@mastra/deployer": "^1.0.0-beta.20", "@mastra/evals": "^1.0.0-beta.4", "@mastra/lance": "^1.0.0-beta.10", "@mastra/libsql": "^1.0.0-beta.11", "@mastra/loggers": "^1.0.0-beta.4", - "@mastra/mcp": "^1.0.0-beta.8", - "@mastra/memory": "^1.0.0-beta.11", + "@mastra/mcp": "^1.0.0-beta.9", + "@mastra/memory": "^1.0.0-beta.12", "@mastra/mongodb": "^1.0.0-beta.10", "@mastra/observability": "^1.0.0-beta.10", + "@mastra/otel-bridge": "^1.0.0-beta.10", "@mastra/otel-exporter": "^1.0.0-beta.11", "@mastra/pg": "^1.0.0-beta.12", "@mastra/qdrant": "^1.0.0-beta.3", - "@mastra/rag": "^2.0.0-beta.5", - "@mastra/react": "^0.1.0-beta.20", + "@mastra/rag": "^2.0.0-beta.6", + "@mastra/react": "^0.1.0-beta.21", "@mastra/upstash": "^1.0.0-beta.10", "@mastra/vectorize": "^1.0.0-beta.3", "@mastra/voice-google": "^0.12.0-beta.2", @@ -81,6 +83,7 @@ "@octokit/plugin-retry": "^8.0.3", "@openrouter/ai-sdk-provider": "^1.5.4", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.67.3", "@opentelemetry/exporter-trace-otlp-proto": "^0.208.0", "@opeoginni/github-copilot-openai-compatible": "^1.0.0", "@radix-ui/react-accordion": "^1.2.12", @@ -128,21 +131,23 @@ "excalidraw-to-svg": "^3.1.0", "fast-glob": "^3.3.3", "fast-xml-parser": "^5.3.3", - "framer-motion": "^12.24.12", + "framer-motion": "^12.25.0", "gray-matter": "^4.0.3", + "gsap": "^3.14.2", "husky": "^9.1.7", "input-otp": "^1.4.2", "isolated-vm": "^6.0.2", "jose": "^6.1.3", "jsdom": "^27.4.0", "langfuse-vercel": "^3.38.6", + "lenis": "^1.3.17", "lucide-react": "^0.562.0", "marked": "^17.0.1", "monaco-editor": "^0.55.1", "monaco-editor-webpack-plugin": "^7.1.1", "monaco-languages": "^2.11.1", "monaco-themes": "^0.4.8", - "motion": "^12.24.12", + "motion": "^12.25.0", "nanoid": "^5.1.6", "next": "^16.1.1", "next-themes": "^0.4.6", @@ -154,7 +159,7 @@ "re2": "^1.23.0", "react": "^19.2.3", "react-dom": "^19.2.3", - "react-resizable-panels": "^4.3.0", + "react-resizable-panels": "^4.3.3", "recharts": "^2.15.4", "rehype": "^13.0.2", "rehype-class-names": "^2.0.0", @@ -184,7 +189,7 @@ "v0-sdk": "^0.15.3", "vscode-languageserver": "^10.0.0-next.16", "vscode-languageserver-textdocument": "^1.0.12", - "zod": "^4.1.13" + "zod": "^4.2.1" }, "devDependencies": { "@mdx-js/loader": "^3.1.1", diff --git a/src/mastra/config/logger.ts b/src/mastra/config/logger.ts index 14cd91a9..6291302c 100644 --- a/src/mastra/config/logger.ts +++ b/src/mastra/config/logger.ts @@ -1,6 +1,8 @@ -import { PinoLogger } from '@mastra/loggers' +import { PinoLogger } from "@mastra/loggers"; +import { FileTransport } from "@mastra/loggers/file"; import * as fs from 'node:fs' import * as path from 'node:path' +import { trace, propagation, context as otelContext } from '@opentelemetry/api' // Use __dirname directly for CommonJS //const __dirname: string = path.resolve(path.dirname('')); @@ -11,10 +13,60 @@ if (!fs.existsSync(logsDir)) { fs.mkdirSync(logsDir, { recursive: true }) } +// OpenTelemetry helpers to enrich logs with trace context and Baggage +const getActiveSpanContextInfo = () => { + const span = trace.getActiveSpan() + if (!span) { + return { traceId: undefined, spanId: undefined } + } + const sc = (span as any).spanContext ? (span as any).spanContext() : undefined + return { traceId: sc?.traceId, spanId: sc?.spanId } +} + +const BaggageToObject = (b: unknown) => { + if (b === null || b === undefined) { + return {} + } + const obj: Record = {} + for (const [k, v] of (b as any).getAllEntries()) { + obj[k] = String(v.value) + } + return obj +} + +const attachTraceAndBaggage = (data: Record = {}) => { + try { + const traceInfo = getActiveSpanContextInfo() + const bag = propagation.getBaggage(otelContext.active()) + return { ...data, _trace: traceInfo, _Baggage: BaggageToObject(bag) } + } catch { + // Don't throw from logging helpers + return data + } +} + +// Enhanced PinoLogger with full tracing integration export const log = new PinoLogger({ name: 'MastraLogger', level: 'debug', - // formatters: {level: (label: string) => ({ level: label.toUpperCase() }), bindings: (bindings: object) => bindings as Record, log: (logObj: object) => logObj as Record}, + // Enable pretty printing in development + ...(process.env.NODE_ENV === 'development' && { + transport: { + target: 'pino-pretty', + options: { + colorize: true, + translateTime: 'SYS:standard', + ignore: 'pid,hostname', + }, + }, + }), + formatters: { + // Add custom formatter to include trace and baggage info +// log(object) { +// return attachTraceAndBaggage(object) +// }, + }, + }) // Create a simple file logger wrapper @@ -35,15 +87,18 @@ export const logWorkflowStart = ( input: Record ) => { const message = `🚀 Starting workflow: ${workflowId}` - const data: { + let data: { workflowId: string input: Record timestamp: string + _trace?: Record + _Baggage?: Record } = { workflowId, input, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -54,17 +109,20 @@ export const logWorkflowEnd = ( duration: number ) => { const message = `✅ Workflow completed: ${workflowId}` - const data: { + let data: { workflowId: string output: Record duration: string timestamp: string + _trace?: Record + _Baggage?: Record } = { workflowId, output, duration: `${duration}ms`, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -74,15 +132,18 @@ export const logStepStart = ( input: Record ) => { const message = `📋 Starting step: ${stepId}` - const data: { + let data: { stepId: string input: Record timestamp: string + _trace?: Record + _Baggage?: Record } = { stepId, input, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -93,17 +154,20 @@ export const logStepEnd = ( duration: number ) => { const message = `✓ Step completed: ${stepId}` - const data: { + let data: { stepId: string output: Record duration: string timestamp: string + _trace?: Record + _Baggage?: Record } = { stepId, output, duration: `${duration}ms`, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -114,17 +178,20 @@ export const logToolExecution = ( output?: Record ) => { const message = `🔧 Tool execution: ${toolId}` - const data: { + let data: { toolId: string input: Record output?: Record timestamp: string + _trace?: Record + _Baggage?: Record } = { toolId, input, output, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -135,17 +202,20 @@ export const logAgentActivity = ( details: Record ) => { const message = `🤖 Agent activity: ${agentId} - ${action}` - const data: { + let data: { agentId: string action: string details: Record timestamp: string + _trace?: Record + _Baggage?: Record } = { agentId, action, details, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(message, data) logToFile(message, data) } @@ -156,12 +226,14 @@ export const logError = ( context?: Record ) => { const message = `❌ Error in ${component}` - const data: { + let data: { component: string error: string stack?: string context?: Record timestamp: string + _trace?: Record + _Baggage?: Record } = { component, error: error instanceof Error ? error.message : String(error), @@ -169,6 +241,7 @@ export const logError = ( context, timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.error(message, data) logToFile(message, data) } @@ -179,12 +252,14 @@ export const logProgress = ( total: number ) => { const logMessage = `📊 Progress: ${message} (${progress}/${total})` - const data: { + let data: { message: string progress: number total: number percentage: number timestamp: string + _trace?: Record + _Baggage?: Record } = { message, progress, @@ -192,6 +267,7 @@ export const logProgress = ( percentage: Math.round((progress / total) * 100), timestamp: new Date().toISOString(), } + data = attachTraceAndBaggage(data) as typeof data log.info(logMessage, data) logToFile(logMessage, data) } diff --git a/src/mastra/config/pg-storage.ts b/src/mastra/config/pg-storage.ts index 00b4b626..18a9214b 100644 --- a/src/mastra/config/pg-storage.ts +++ b/src/mastra/config/pg-storage.ts @@ -1,4 +1,3 @@ - import { Memory } from '@mastra/memory' import { PgVector, PostgresStore } from '@mastra/pg' import { createGraphRAGTool, createVectorQueryTool } from '@mastra/rag' @@ -53,7 +52,7 @@ export const pgStore = new PostgresStore({ // Schema management schemaName: process.env.DB_SCHEMA ?? 'mastra', // Connection pooling (using supported pg.Pool options) - max: parseInt(process.env.DB_MAX_CONNECTIONS ?? '30'), // Maximum connections in pool + max: parseInt(process.env.DB_MAX_CONNECTIONS ?? '20'), // Maximum connections in pool idleTimeoutMillis: parseInt(process.env.DB_IDLE_TIMEOUT ?? '30000'), // 30 seconds connectionTimeoutMillis: parseInt( process.env.DB_CONNECTION_TIMEOUT ?? '2000' @@ -85,7 +84,7 @@ export const pgMemory = new Memory({ options: { // Message management lastMessages: parseInt(process.env.MEMORY_LAST_MESSAGES ?? '500'), - generateTitle: process.env.THREAD_GENERATE_TITLE !== 'true', + generateTitle: true, // Advanced semantic recall with HNSW index configuration semanticRecall: { topK: parseInt(process.env.SEMANTIC_TOP_K ?? '5'), @@ -98,7 +97,7 @@ export const pgMemory = new Memory({ indexConfig: { type: 'ivfflat', // flat index type (supports dimensions > 4000, unlike HNSW limit of 2000) metric: 'cosine', // Distance metric for normalized embeddings - ivf: { lists: 1080 }, // IVFFlat configuration + ivf: { lists: 3200 }, // IVFFlat configuration }, threshold: 0.75, // Similarity threshold for semantic recall indexName: 'memory_messages_3072', // Index name for semantic recall @@ -139,9 +138,8 @@ log.info('PG Store and Memory initialized with PgVector support', { }, scope: 'resource', indexConfig: { - type: 'hnsw', - metric: 'cosine', - hnsw: { m: 16, efConstruction: 64 } // hnsw configuration + type: 'ivfflat', // flat index type (supports dimensions > 4000, unlike HNSW limit of 2000) + metric: 'cosine', // Distance metric for normalized embeddings } }, workingMemory: { @@ -190,7 +188,8 @@ export const pgQueryTool = createVectorQueryTool({ databaseConfig: { pgVector: { minScore: parseFloat(process.env.PG_MIN_SCORE ?? '0.7'), - ef: parseInt(process.env.PG_EF ?? '100'), // HNSW search parameter - higher = better recall, slower queries + probes: 1000 +// ef: parseInt(process.env.PG_EF ?? '100'), // HNSW search parameter - higher = better recall, slower queries // Note: probes parameter is only for IVFFlat, not HNSW }, }, diff --git a/src/mastra/index.ts b/src/mastra/index.ts index fbe952ce..7dd65260 100644 --- a/src/mastra/index.ts +++ b/src/mastra/index.ts @@ -1,6 +1,6 @@ import { chatRoute, networkRoute, workflowRoute } from '@mastra/ai-sdk' import { Mastra } from '@mastra/core' -import { Observability } from '@mastra/observability' +import { Observability, SamplingStrategyType, SensitiveDataFilter } from '@mastra/observability' import { OtelExporter } from '@mastra/otel-exporter' import { PostgresStore } from '@mastra/pg' // Config @@ -116,7 +116,10 @@ import { specGenerationWorkflow } from './workflows/spec-generation-workflow' import { stockAnalysisWorkflow } from './workflows/stock-analysis-workflow' import { telephoneGameWorkflow } from './workflows/telephone-game' import { weatherWorkflow } from './workflows/weather-workflow' - +import { OtelBridge } from "@mastra/otel-bridge"; +import { DefaultExporter } from "@mastra/observability"; +import type { SpanOptions } from '@opentelemetry/api'; +import { trace } from '@opentelemetry/api' export const mastra = new Mastra({ workflows: { weatherWorkflow, @@ -226,28 +229,97 @@ export const mastra = new Mastra({ vectors: { pgVector }, logger: log, observability: new Observability({ - // default: { enabled: false }, + configs: { - otel: { - serviceName: 'ai', + default: { + serviceName: "ai", + + sampling: { type: SamplingStrategyType.RATIO, probability: 0.5 }, // 50% sampling + requestContextKeys: ["userId", "environment", "tenantId"], + spanOutputProcessors: [ + new SensitiveDataFilter( + { + sensitiveFields: [ + // Default fields + "password", + "token", + "secret", + "key", + "apikey", + // Custom fields for your application + "creditCard", + "bankAccount", + "routingNumber", + "email", + "phoneNumber", + "dateOfBirth", + ], + // Custom redaction token + redactionToken: "***SENSITIVE***", + // Redaction style + redactionStyle: "full", // or 'partial' + } + ), // Redacts sensitive fields before export + ], exporters: [ - new OtelExporter({ - provider: { - traceloop: { - apiKey: process.env.TRACELOOP_API_KEY, - destinationId: 'my-destination', - }, - }, - batchSize: 500, - timeout: 50000, + new DefaultExporter( + { + logger: log, + logLevel: 'info', +// strategy: 'realtime', +// maxBatchSize: 500, +// maxBufferSize: 1000, +// maxBatchWaitMs: 6000, + maxRetries: 5, + } + ), // Studio access0 + ], + includeInternalSpans: true, + + bridge: new OtelBridge( + { + name: "mastra-otel-bridge", +// otelTracer: { +// startSpan: (name: string, options: SpanOptions | undefined) => { +// const tracer = trace.getTracer("mastra-otel-bridge-tracer"); +// return tracer.startSpan(name, options); +// }, +// }, logger: log, - logLevel: 'debug', + logLevel: 'info', +// batchsize: 500, + timeout: 50000, + serializationOptions: { + maxStringLength: 1024, // Maximum length for string values (default: 1024) + maxDepth: 6, // Maximum depth for nested objects (default: 6) + maxArrayLength: 50, // Maximum number of items in arrays (default: 50) + maxObjectKeys: 50, // Maximum number of keys in objects (default: 50) + }, resourceAttributes: { 'deployment.environment': 'dev', }, - }), - ], + } + ), }, +// exporters: [ +// new DefaultExporter(), // Studio access + +// new OtelExporter({ +// provider: { +// traceloop: { +// apiKey: process.env.TRACELOOP_API_KEY, +// destinationId: 'my-destination', +// }, +// }, +// batchSize: 500, +// timeout: 50000, +// logger: log, +// logLevel: 'debug', +// resourceAttributes: { +// 'deployment.environment': 'dev', +// }, +// }), +// ], }, }), server: { diff --git a/src/mastra/tools/document-chunking.tool.ts b/src/mastra/tools/document-chunking.tool.ts index 79308b51..e4e84b98 100644 --- a/src/mastra/tools/document-chunking.tool.ts +++ b/src/mastra/tools/document-chunking.tool.ts @@ -20,7 +20,7 @@ import { import { pgVector } from '../config/pg-storage'; import { google } from '@ai-sdk/google'; -import { RequestContext } from "@mastra/core/request-context"; +import type { RequestContext } from "@mastra/core/request-context"; import type { ExtractParams } from '@mastra/rag'; log.info('Initializing Document Chunking Tool...') diff --git a/src/mastra/tools/e2b.ts b/src/mastra/tools/e2b.ts index 46d9a894..debb93ac 100644 --- a/src/mastra/tools/e2b.ts +++ b/src/mastra/tools/e2b.ts @@ -1,823 +1,1697 @@ -import { FilesystemEventType, FileType, Sandbox } from '@e2b/code-interpreter'; -import { createTool } from '@mastra/core/tools'; -import z from 'zod'; -import { log } from '../config/logger'; +import { FilesystemEventType, FileType, Sandbox } from '@e2b/code-interpreter' +import { createTool } from '@mastra/core/tools' +import { trace, SpanStatusCode, context as otelContext, propagation, metrics } from '@opentelemetry/api' +import type { BaggageEntry, BaggageEntryMetadata, Baggage } from '@opentelemetry/api' +import z from 'zod' +import { log, logError, logToolExecution } from '../config/logger' +import type { RequestContext } from '@mastra/core/request-context' +import type { InferUITool, InferUITools } from "@mastra/core/tools"; + + +export interface E2BRequestContext extends RequestContext { + userId?: string + sandboxLimits?: { + maxTimeout: number + maxFileSize: number + maxExecutionTime: number + allowedLanguages?: Array<'python' | 'javascript' | 'typescript'> + } +} + +const tracer = trace.getTracer('e2b-tools', '1.0.0') + +// Initialize metrics +const meter = metrics.getMeter('e2b-tools', '1.0.0') +const toolExecutionCounter = meter.createCounter('e2b_tool_executions_total', { + description: 'Total number of E2B tool executions' +}) +const toolExecutionDuration = meter.createHistogram('e2b_tool_execution_duration', { + description: 'Duration of E2B tool executions in milliseconds', + unit: 'ms' +}) +// Counter and histogram for sandbox-level operations (create/delete) +const sandboxOperationsCounter = meter.createCounter('e2b_sandbox_operations_total', { + description: 'Total number of sandbox operations (create/delete)' +}) +const sandboxOperationDuration = meter.createHistogram('e2b_sandbox_operation_duration', { + description: 'Duration of sandbox operations in milliseconds', + unit: 'ms' +}) + +// Enhanced logging utilities with centralized logger +// Helper: return active span context info (traceId, spanId) +const getActiveSpanContextInfo = () => { + const span = trace.getActiveSpan() + if (!span) {return { traceId: undefined, spanId: undefined }} + const sc = span.spanContext() + return { traceId: sc.traceId, spanId: sc.spanId } +} + +// Helper: convert Baggage to simple object for logging +const BaggageToObject = (b: Baggage | null | undefined) => { + if (b === null || b === undefined) { + return {} + } + const obj: Record = {} + for (const [k, v] of b.getAllEntries()) { + obj[k] = String(v.value) + } + return obj +} + +// Helper: merge provided entries into the current Baggage and set it on the active context +const mergeAndSetBaggage = (entries: Record) => { + try { + const ctx = otelContext.active() + const currentBaggage = propagation.getBaggage(ctx) + const merged: Record = {} + if (currentBaggage) { + for (const entry of currentBaggage.getAllEntries()) { + const [k, v] = entry + merged[k] = { value: String(v.value), metadata: v.metadata } + } + } + for (const k of Object.keys(entries)) { + merged[k] = { value: entries[k] } + } + const bag = propagation.createBaggage(merged) + const newCtx = propagation.setBaggage(ctx, bag) + // Make the new baggage active for the current synchronous call and its children + otelContext.with(newCtx, () => {}) + return bag + } catch (err) { + // Non-fatal - don't let baggage failures break execution + log.error('Failed to set baggage', { error: err }) + return undefined + } +} + +const logToolStart = (toolName: string, input: any, toolContext?: any) => { + const span = trace.getActiveSpan() + if (span) { + // Add span event for tool start + span.addEvent('tool.start', { + 'tool.name': toolName, + 'tool.input_size': JSON.stringify(input).length, + 'user.id': toolContext?.requestContext?.userId, + }) + + // Merge into baggage for downstream services and traces + mergeAndSetBaggage({ 'tool.name': toolName, 'tool.start_time': Date.now().toString() }) + + // Also set attributes on the span so it's available in OTEL exporters + try { + span.setAttribute('tool.name', toolName) + span.setAttribute('tool.input_size', JSON.stringify(input).length) + } catch (err) { + // ignore if span does not support setAttribute + } + } + + // Include trace info and baggage in the structured log + const traceInfo = getActiveSpanContextInfo() + const bag = propagation.getBaggage(otelContext.active()) + logToolExecution(toolName, { originalInput: input, _trace: traceInfo, _Baggage: BaggageToObject(bag), _userId: toolContext?.requestContext?.userId }) +} + +const logToolComplete = ( + toolName: string, + output: any, + duration: number, + toolContext?: any +) => { + const span = trace.getActiveSpan() + if (span) { + // Add span event for tool completion + span.addEvent('tool.complete', { + 'tool.name': toolName, + 'tool.duration_ms': duration, + 'tool.output_size': JSON.stringify(output).length, + 'user.id': toolContext?.requestContext?.userId, + }) + + // Update baggage + mergeAndSetBaggage({ 'tool.duration': duration.toString(), 'tool.completed_at': Date.now().toString() }) + + // Set attributes on span + try { + span.setAttribute('tool.duration_ms', duration) + span.setAttribute('tool.output_size', JSON.stringify(output).length) + } catch (err) { + // ignore + } + } + + // Record metrics + toolExecutionCounter.add(1, { + 'tool.name': toolName, + 'tool.status': 'success', + 'user.id': toolContext?.requestContext?.userId, + }) + toolExecutionDuration.record(duration, { + 'tool.name': toolName, + 'tool.status': 'success', + 'user.id': toolContext?.requestContext?.userId, + }) + + const traceInfo = getActiveSpanContextInfo() + const bag = propagation.getBaggage(otelContext.active()) + + logToolExecution( + toolName, + { _trace: traceInfo, _Baggage: BaggageToObject(bag), _userId: toolContext?.requestContext?.userId }, + output + ) +} + +const logToolError = (toolName: string, error: any, context?: any) => { + const span = trace.getActiveSpan() + if (span) { + // Add span event for tool error + span.addEvent('tool.error', { + 'tool.name': toolName, + 'error.message': error instanceof Error ? error.message : String(error), + 'error.stack': error instanceof Error ? error.stack : undefined, + 'user.id': context?.requestContext?.userId + }) + + // Record error in span + span.recordException(error instanceof Error ? error : new Error(String(error))) + } + + // Record error metrics + toolExecutionCounter.add(1, { + 'tool.name': toolName, + 'tool.status': 'error', + 'error.type': error instanceof Error ? error.constructor.name : 'Unknown' + }) + + logError(toolName, error, { + toolName, + userId: context?.requestContext?.userId + }) +} export const createSandbox = createTool({ - id: 'createSandbox', - description: 'Create an e2b sandbox', - inputSchema: z.object({ - metadata: z.record(z.string(), z.string()).optional().describe('Custom metadata for the sandbox'), - envs: z.record(z.string(), z.string()).optional().describe(` + id: 'createSandbox', + description: 'Create an e2b sandbox', + inputSchema: z.object({ + metadata: z + .record(z.string(), z.string()) + .optional() + .describe('Custom metadata for the sandbox'), + envs: z.record(z.string(), z.string()).optional().describe(` Custom environment variables for the sandbox. Used when executing commands and code in the sandbox. Can be overridden with the \`envs\` argument when executing commands or code. `), - timeoutMS: z.number().optional().describe(` + timeoutMS: z.number().optional().describe(` Timeout for the sandbox in **milliseconds**. Maximum time a sandbox can be kept alive is 24 hours (86_400_000 milliseconds) for Pro users and 1 hour (3_600_000 milliseconds) for Hobby users. @default 300_000 // 5 minutes `), - }), - outputSchema: z.object({ - sandboxId: z.string(), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Create sandbox tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Create sandbox received complete input', { - toolCallId, - hasMetadata: !!input.metadata, - hasEnvs: !!input.envs, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Create sandbox completed', { - toolCallId, - toolName, - sandboxId: output.sandboxId, - hook: 'onOutput', - }) - }, - execute: async (sandboxOptions) => { - try { - const sandbox = await Sandbox.create(sandboxOptions); - - return { - sandboxId: sandbox.sandboxId, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + }), + outputSchema: z.object({ + sandboxId: z.string(), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('createSandbox') + const startTime = Date.now() + const requestContext = context?.requestContext as E2BRequestContext + const userId = requestContext?.userId + if (userId && userId.length > 0) { + span.setAttribute('user.id', userId) + } -export const runCode = createTool({ - id: 'runCode', - description: 'Run code in an e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to run the code'), - code: z.string().describe('The code to run in the sandbox'), - runCodeOpts: z - .object({ - language: z - .enum(['ts', 'js', 'python']) - .default('python') - .describe('language used for code execution. If not provided, default python context is used'), - envs: z.record(z.string(), z.string()).optional().describe('Custom environment variables for code execution.'), - timeoutMS: z.number().optional().describe(` - Timeout for the code execution in **milliseconds**. - @default 60_000 // 60 seconds - `), - requestTimeoutMs: z.number().optional().describe(` - Timeout for the request in **milliseconds**. - @default 30_000 // 30 seconds - `), - }) - .optional() - .describe('Run code options'), - }), - outputSchema: z.object({ - execution: z.string().describe('Serialized representation of the execution results'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Run code tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Run code received complete input', { - toolCallId, - sandboxId: input.sandboxId, - codeLength: input.code.length, - language: input.runCodeOpts?.language, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Run code completed', { - toolCallId, - toolName, - executionLength: output.execution.length, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); + // Add custom resource attributes + span.setAttribute('service.name', 'e2b-tools') + span.setAttribute('service.version', '1.0.0') + span.setAttribute('sandbox.operation', 'create') - const execution = await sandbox.runCode(inputData.code, inputData.runCodeOpts); + // Set baggage for cross-service context propagation + const currentBaggage = propagation.getBaggage(otelContext.active()) + if (currentBaggage) { + const keys = Array.from(currentBaggage.getAllEntries()).map(([key]) => key) + span.setAttribute('baggage.keys', keys.join(',')) + } - return { - execution: JSON.stringify(execution.toJSON()), - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); - -export const readFile = createTool({ - id: 'readFile', - description: 'Read a file from the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to read the file from'), - path: z.string().describe('The path to the file to read'), - }), - outputSchema: z.object({ - content: z.string().describe('The content of the file'), - path: z.string().describe('The path of the file that was read'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Read file tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Read file received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Read file completed', { - toolCallId, - toolName, - contentLength: output.content.length, - path: output.path, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - const fileContent = await sandbox.files.read(inputData.path); - - return { - content: fileContent, - path: inputData.path, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + // Add span event for input validation + span.addEvent('input.validation', { + 'input.has_metadata': !!inputData.metadata, + 'input.has_envs': !!inputData.envs, + 'input.timeout_ms': inputData.timeoutMS ?? 300000 + }) + + try { + // Add start event and input size + const inputSize = JSON.stringify(inputData).length + span.addEvent('tool.start', { + ts: Date.now(), + input_size: inputSize, + }) + span.setAttribute('tool.input_size', inputSize) + + await context?.writer?.custom({ + type: 'data-tool-progress', + data: { + status: 'in-progress', + message: `Creating sandbox...`, + stage: 'createSandbox', + }, + id: 'createSandbox', + }) + + logToolStart('createSandbox', inputData, context) + + const sandbox = await Sandbox.create(inputData) + + // Record successful sandbox creation metrics + const creationDuration = Date.now() - startTime + sandboxOperationsCounter.add(1, { + 'operation.type': 'create', + 'operation.status': 'success', + 'sandbox.id': sandbox.sandboxId, + }) + sandboxOperationDuration.record(creationDuration, { + 'operation.type': 'create', + 'operation.status': 'success', + 'sandbox.id': sandbox.sandboxId, + }) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', sandbox.sandboxId) + span.setAttribute('sandbox.created', true) + + // Add span event for successful creation + span.addEvent('sandbox.created', { + 'sandbox.id': sandbox.sandboxId, + 'creation.time_ms': Date.now() - startTime + }) + + const result = { + sandboxId: sandbox.sandboxId, + } + + // Output size attribute & complete event + const outputSize = JSON.stringify(result).length + span.setAttribute('tool.output_size', outputSize) + span.addEvent('tool.complete', { + duration_ms: Date.now() - startTime, + }) + + await context?.writer?.custom({ + type: 'data-tool-progress', + data: { + status: 'done', + message: `Sandbox created: ${sandbox.sandboxId}`, + stage: 'createSandbox', + }, + id: 'createSandbox', + }) + + logToolComplete( + 'createSandbox', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + // Record error metrics + sandboxOperationsCounter.add(1, { + 'operation.type': 'create', + 'operation.status': 'error', + 'error.type': e instanceof Error ? e.constructor.name : 'Unknown' + }) + + if (e instanceof Error) { + span.recordException(e) + span.addEvent('sandbox.creation.failed', { + 'error.message': e.message, + 'error.stack': e.stack?.slice(0, 500) + }) + } else { + span.recordException(new Error(String(e))) + } + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('createSandbox', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Create sandbox tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Create sandbox received complete input', { + toolCallId, + messageCount: messages.length, + hasMetadata: !!input.metadata, + hasEnvs: !!input.envs, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Create sandbox completed', { + toolCallId, + toolName, + sandboxId: output.sandboxId, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const writeFile = createTool({ - id: 'writeFile', - description: 'Write a single file to the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to write the file to'), - path: z.string().describe('The path where the file should be written'), - content: z.string().describe('The content to write to the file'), - }), - outputSchema: z.object({ - success: z.boolean().describe('Whether the file was written successfully'), - path: z.string().describe('The path where the file was written'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Write file tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Write file received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - contentLength: input.content.length, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Write file completed', { - toolCallId, - toolName, - success: output.success, - path: output.path, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - await sandbox.files.write(inputData.path, inputData.content); - - return { - success: true, - path: inputData.path, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'writeFile', + description: 'Write a file to the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to write the file to'), + path: z.string().describe('The path where the file should be written'), + content: z.string().describe('The content to write to the file'), + }), + outputSchema: z.object({ + success: z + .boolean() + .describe('Whether the file was written successfully'), + path: z.string().describe('The path where the file was written'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('writeFile') + const startTime = Date.now() + + try { + logToolStart('writeFile', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + await sandbox.files.write(inputData.path, inputData.content) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + span.setAttribute('file.size', inputData.content.length) + + const result = { + success: true, + path: inputData.path, + } + + logToolComplete( + 'writeFile', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('writeFile', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Write file tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Write file received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + contentLength: input.content.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Write file completed', { + toolCallId, + toolName, + success: output.success, + path: output.path, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const writeFiles = createTool({ - id: 'writeFiles', - description: 'Write multiple files to the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to write the files to'), - files: z - .array( - z.object({ - path: z.string().describe('The path where the file should be written'), - data: z.string().describe('The content to write to the file'), - }), - ) - .describe('Array of files to write, each with path and data'), - }), - outputSchema: z.object({ - success: z.boolean().describe('Whether all files were written successfully'), - filesWritten: z.array(z.string()).describe('Array of file paths that were written'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Write files tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Write files received complete input', { - toolCallId, - sandboxId: input.sandboxId, - fileCount: input.files.length, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Write files completed', { - toolCallId, - toolName, - success: output.success, - filesWrittenCount: output.filesWritten.length, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - await sandbox.files.write(inputData.files); - - return { - success: true, - filesWritten: inputData.files.map(file => file.path), - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'writeFiles', + description: 'Write multiple files to the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to write files to'), + files: z + .array( + z.object({ + path: z + .string() + .describe('The path where the file should be written'), + data: z + .string() + .describe('The content to write to the file'), + }) + ) + .describe('Array of files to write, each with path and data'), + }), + outputSchema: z.object({ + success: z + .boolean() + .describe('Whether all files were written successfully'), + filesWritten: z + .array(z.string()) + .describe('Array of file paths that were written'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('writeFiles') + const startTime = Date.now() + + try { + logToolStart('writeFiles', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + await sandbox.files.write(inputData.files) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('files.count', inputData.files.length) + span.setAttribute( + 'files.total_size', + inputData.files.reduce((sum, file) => sum + file.data.length, 0) + ) + + const result = { + success: true, + filesWritten: inputData.files.map((file) => file.path), + } + + logToolComplete( + 'writeFiles', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('writeFiles', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Write files tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Write files received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + fileCount: input.files.length, + totalContentSize: input.files.reduce( + (sum, file) => sum + file.data.length, + 0 + ), + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Write files completed', { + toolCallId, + toolName, + success: output.success, + filesWrittenCount: output.filesWritten.length, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const listFiles = createTool({ - id: 'listFiles', - description: 'List files and directories in a path within the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to list files from'), - path: z.string().default('/').describe('The directory path to list files from'), - }), - outputSchema: z.object({ - files: z - .array( - z.object({ - name: z.string().describe('The name of the file or directory'), - path: z.string().describe('The full path of the file or directory'), - isDirectory: z.boolean().describe('Whether this is a directory'), - }), - ) - .describe('Array of files and directories'), - path: z.string().describe('The path that was listed'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('List files tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('List files received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('List files completed', { - toolCallId, - toolName, - fileCount: output.files.length, - path: output.path, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - const fileList = await sandbox.files.list(inputData.path); - - return { - files: fileList.map(file => ({ - name: file.name, - path: file.path, - isDirectory: file.type === FileType.DIR, - })), - path: inputData.path, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'listFiles', + description: 'List files and directories in a path within the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to list files from'), + path: z + .string() + .default('/') + .describe('The directory path to list files from'), + }), + outputSchema: z.object({ + files: z + .array( + z.object({ + name: z + .string() + .describe('The name of the file or directory'), + path: z + .string() + .describe('The full path of the file or directory'), + isDirectory: z + .boolean() + .describe('Whether this is a directory'), + }) + ) + .describe('Array of files and directories'), + path: z.string().describe('The path that was listed'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('listFiles') + const startTime = Date.now() + + try { + logToolStart('listFiles', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + const fileList = await sandbox.files.list(inputData.path) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('list.path', inputData.path) + span.setAttribute('list.file_count', fileList.length) + span.setAttribute( + 'list.directory_count', + fileList.filter((f) => f.type === FileType.DIR).length + ) + + const result = { + files: fileList.map((file) => ({ + name: file.name, + path: file.path, + isDirectory: file.type === FileType.DIR, + })), + path: inputData.path, + } + + logToolComplete( + 'listFiles', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('listFiles', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('List files tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('List files received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('List files completed', { + toolCallId, + toolName, + fileCount: output.files.length, + directoryCount: output.files.filter((f) => f.isDirectory).length, + path: output.path, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const deleteFile = createTool({ - id: 'deleteFile', - description: 'Delete a file or directory from the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to delete the file from'), - path: z.string().describe('The path to the file or directory to delete'), - }), - outputSchema: z.object({ - success: z.boolean().describe('Whether the file was deleted successfully'), - path: z.string().describe('The path that was deleted'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Delete file tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Delete file received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Delete file completed', { - toolCallId, - toolName, - success: output.success, - path: output.path, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - await sandbox.files.remove(inputData.path); - - return { - success: true, - path: inputData.path, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - } -}); + id: 'deleteFile', + description: 'Delete a file or directory from the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to delete the file from'), + path: z + .string() + .describe('The path to the file or directory to delete'), + }), + outputSchema: z.object({ + success: z + .boolean() + .describe('Whether the file was deleted successfully'), + path: z.string().describe('The path that was deleted'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('deleteFile') + const startTime = Date.now() + + try { + logToolStart('deleteFile', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + await sandbox.files.remove(inputData.path) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + + const result = { + success: true, + path: inputData.path, + } + + logToolComplete( + 'deleteFile', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('deleteFile', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Delete file tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Delete file received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Delete file completed', { + toolCallId, + toolName, + success: output.success, + path: output.path, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const createDirectory = createTool({ - id: 'createDirectory', - description: 'Create a directory in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to create the directory in'), - path: z.string().describe('The path where the directory should be created'), - }), - outputSchema: z.object({ - success: z.boolean().describe('Whether the directory was created successfully'), - path: z.string().describe('The path where the directory was created'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Create directory tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Create directory received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Create directory completed', { - toolCallId, - toolName, - success: output.success, - path: output.path, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - await sandbox.files.makeDir(inputData.path); - - return { - success: true, - path: inputData.path, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - } -}); + id: 'createDirectory', + description: 'Create a directory in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe( + 'The sandboxId for the sandbox to create the directory in' + ), + path: z + .string() + .describe('The path where the directory should be created'), + }), + outputSchema: z.object({ + success: z + .boolean() + .describe('Whether the directory was created successfully'), + path: z.string().describe('The path where the directory was created'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('createDirectory') + const startTime = Date.now() + + try { + logToolStart('createDirectory', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + await sandbox.files.makeDir(inputData.path) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('directory.path', inputData.path) + + const result = { + success: true, + path: inputData.path, + } + + logToolComplete( + 'createDirectory', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('createDirectory', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Create directory tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Create directory received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Create directory completed', { + toolCallId, + toolName, + success: output.success, + path: output.path, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const getFileInfo = createTool({ - id: 'getFileInfo', - description: 'Get detailed information about a file or directory in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to get file information from'), - path: z.string().describe('The path to the file or directory to get information about'), - }), - outputSchema: z.object({ - name: z.string().describe('The name of the file or directory'), - type: z.enum(FileType).optional().describe('Whether this is a file or directory'), - path: z.string().describe('The full path of the file or directory'), - size: z.number().describe('The size of the file or directory in bytes'), - mode: z.number().describe('The file mode (permissions as octal number)'), - permissions: z.string().describe('Human-readable permissions string'), - owner: z.string().describe('The owner of the file or directory'), - group: z.string().describe('The group of the file or directory'), - modifiedTime: z.date().optional().describe('The last modified time in ISO string format'), - symlinkTarget: z.string().optional().describe('The target path if this is a symlink, null otherwise'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Get file info tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Get file info received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Get file info completed', { - toolCallId, - toolName, - name: output.name, - size: output.size, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - const info = await sandbox.files.getInfo(inputData.path); - - return { - name: info.name, - type: info.type, - path: info.path, - size: info.size, - mode: info.mode, - permissions: info.permissions, - owner: info.owner, - group: info.group, - modifiedTime: info.modifiedTime, - symlinkTarget: info.symlinkTarget, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'getFileInfo', + description: + 'Get detailed information about a file or directory in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe( + 'The sandboxId for the sandbox to get file information from' + ), + path: z + .string() + .describe( + 'The path to the file or directory to get information about' + ), + }), + outputSchema: z.object({ + name: z.string().describe('The name of the file or directory'), + type: z + .enum(FileType) + .optional() + .describe('Whether this is a file or directory'), + path: z.string().describe('The full path of the file or directory'), + size: z.number().describe('The size of the file or directory in bytes'), + mode: z + .number() + .describe('The file mode (permissions as octal number)'), + permissions: z.string().describe('Human-readable permissions string'), + owner: z.string().describe('The owner of the file or directory'), + group: z.string().describe('The group of the file or directory'), + modifiedTime: z + .date() + .optional() + .describe('The last modified time in ISO string format'), + symlinkTarget: z + .string() + .optional() + .describe('The target path if this is a symlink, null otherwise'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('getFileInfo') + const startTime = Date.now() + + try { + logToolStart('getFileInfo', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + const info = await sandbox.files.getInfo(inputData.path) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + span.setAttribute('file.size', info.size) + if (info.type !== null && info.type !== undefined) { + span.setAttribute('file.type', info.type) + } + span.setAttribute('file.permissions', info.permissions) + + const result = { + name: info.name, + type: info.type, + path: info.path, + size: info.size, + mode: info.mode, + permissions: info.permissions, + owner: info.owner, + group: info.group, + modifiedTime: info.modifiedTime, + symlinkTarget: info.symlinkTarget, + } + + logToolComplete( + 'getFileInfo', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('getFileInfo', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Get file info tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Get file info received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Get file info completed', { + toolCallId, + toolName, + name: output.name, + size: output.size, + fileType: output.type, + permissions: output.permissions, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const checkFileExists = createTool({ - id: 'checkFileExists', - description: 'Check if a file or directory exists in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to check file existence in'), - path: z.string().describe('The path to check for existence'), - }), - outputSchema: z - .object({ - exists: z.boolean().describe('Whether the file or directory exists'), - path: z.string().describe('The path that was checked'), - type: z.enum(FileType).optional().describe('The type if the path exists'), - }) - .or( - z.object({ - error: z.string().describe('The error from a failed existence check'), - }), - ), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Check file exists tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Check file exists received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Check file exists completed', { - toolCallId, - toolName, - exists: 'exists' in output ? output.exists : false, - path: 'path' in output ? output.path : '', - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - - try { - const info = await sandbox.files.getInfo(inputData.path); - return { - exists: true, - path: inputData.path, - type: info.type, - }; - } catch { - // If getInfo fails, the file doesn't exist - return { - exists: false, - path: inputData.path, - }; - } - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'checkFileExists', + description: 'Check if a file or directory exists in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe( + 'The sandboxId for the sandbox to check file existence in' + ), + path: z.string().describe('The path to check for existence'), + }), + outputSchema: z + .object({ + exists: z + .boolean() + .describe('Whether the file or directory exists'), + path: z.string().describe('The path that was checked'), + type: z + .enum(FileType) + .optional() + .describe('The type if the path exists'), + }) + .or( + z.object({ + error: z + .string() + .describe('The error from a failed existence check'), + }) + ), + execute: async (inputData, context) => { + const span = tracer.startSpan('checkFileExists') + const startTime = Date.now() + + try { + logToolStart('checkFileExists', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + + try { + const info = await sandbox.files.getInfo(inputData.path) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + span.setAttribute('file.exists', true) + if (info.type !== null && info.type !== undefined) { + span.setAttribute('file.type', info.type) + } + + const result = { + exists: true, + path: inputData.path, + type: info.type, + } + + logToolComplete( + 'checkFileExists', + result, + Date.now() - startTime, + context + ) + return result + } catch { + // If getInfo fails, the file doesn't exist + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + span.setAttribute('file.exists', false) + + const result = { + exists: false, + path: inputData.path, + } + + logToolComplete( + 'checkFileExists', + result, + Date.now() - startTime, + context + ) + return result + } + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('checkFileExists', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Check file exists tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Check file exists received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Check file exists completed', { + toolCallId, + toolName, + exists: 'exists' in output ? output.exists : false, + path: 'path' in output ? output.path : '', + fileType: 'type' in output ? output.type : undefined, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const getFileSize = createTool({ - id: 'getFileSize', - description: 'Get the size of a file or directory in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to get file size from'), - path: z.string().describe('The path to the file or directory'), - humanReadable: z - .boolean() - .default(false) - .describe("Whether to return size in human-readable format (e.g., '1.5 KB', '2.3 MB')"), - }), - outputSchema: z - .object({ - size: z.number().describe('The size in bytes'), - humanReadableSize: z.string().optional().describe('Human-readable size string if requested'), - path: z.string().describe('The path that was checked'), - type: z.enum(FileType).optional().describe('Whether this is a file or directory'), - }) - .or( - z.object({ - error: z.string().describe('The error from a failed size check'), - }), - ), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Get file size tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Get file size received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - humanReadable: input.humanReadable, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Get file size completed', { - toolCallId, - toolName, - size: 'size' in output ? output.size : 0, - path: 'path' in output ? output.path : '', - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - const info = await sandbox.files.getInfo(inputData.path); - - let humanReadableSize: string | undefined; - - if (inputData.humanReadable) { - const bytes = info.size; - const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; - if (bytes === 0) { - humanReadableSize = '0 B'; - } else { - const i = Math.floor(Math.log(bytes) / Math.log(1024)); - const size = (bytes / Math.pow(1024, i)).toFixed(1); - humanReadableSize = `${size} ${sizes[i]}`; + id: 'getFileSize', + description: 'Get the size of a file or directory in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to get file size from'), + path: z.string().describe('The path to the file or directory'), + humanReadable: z + .boolean() + .default(false) + .describe( + "Whether to return size in human-readable format (e.g., '1.5 KB', '2.3 MB')" + ), + }), + outputSchema: z + .object({ + size: z.number().describe('The size in bytes'), + humanReadableSize: z + .string() + .optional() + .describe('Human-readable size string if requested'), + path: z.string().describe('The path that was checked'), + type: z + .enum(FileType) + .optional() + .describe('Whether this is a file or directory'), + }) + .or( + z.object({ + error: z + .string() + .describe('The error from a failed size check'), + }) + ), + execute: async (inputData, context) => { + const span = tracer.startSpan('getFileSize') + const startTime = Date.now() + + try { + logToolStart('getFileSize', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + const info = await sandbox.files.getInfo(inputData.path) + + let humanReadableSize: string | undefined + + if (inputData.humanReadable) { + const bytes = info.size + const sizes = ['B', 'KB', 'MB', 'GB', 'TB'] + if (bytes === 0) { + humanReadableSize = '0 B' + } else { + const i = Math.floor(Math.log(bytes) / Math.log(1024)) + const size = (bytes / Math.pow(1024, i)).toFixed(1) + humanReadableSize = `${size} ${sizes[i]}` + } + } + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('file.path', inputData.path) + span.setAttribute('file.size', info.size) + if (info.type !== null && info.type !== undefined) { + span.setAttribute('file.type', info.type) + } + span.setAttribute('humanReadable', inputData.humanReadable) + + const result = { + size: info.size, + humanReadableSize, + path: inputData.path, + type: info.type, + } + + logToolComplete( + 'getFileSize', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('getFileSize', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() } - } - - return { - size: info.size, - humanReadableSize, - path: inputData.path, - type: info.type, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Get file size tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputDelta: ({ inputTextDelta, toolCallId, messages, abortSignal }) => { + log.info('Get file size received input chunk', { + toolCallId, + inputTextDelta, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputDelta', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Get file size received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + humanReadable: input.humanReadable, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Get file size completed', { + toolCallId, + toolName, + size: 'size' in output ? output.size : 0, + path: 'path' in output ? output.path : '', + humanReadable: + 'humanReadable' in output ? output.humanReadable : false, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const watchDirectory = createTool({ - id: 'watchDirectory', - description: 'Start watching a directory for file system changes in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to watch directory in'), - path: z.string().describe('The directory path to watch for changes'), - recursive: z.boolean().default(false).describe('Whether to watch subdirectories recursively'), - watchDuration: z - .number() - .default(30000) - .describe('How long to watch for changes in milliseconds (default 30 seconds)'), - }), - outputSchema: z - .object({ - watchStarted: z.boolean().describe('Whether the watch was started successfully'), - path: z.string().describe('The path that was watched'), - events: z - .array( - z.object({ - type: z - .enum(FilesystemEventType) - .describe('The type of filesystem event (WRITE, CREATE, DELETE, etc.)'), - name: z.string().describe('The name of the file that changed'), - timestamp: z.string().describe('When the event occurred'), - }), - ) - .describe('Array of filesystem events that occurred during the watch period'), - }) - .or( - z.object({ - error: z.string().describe('The error from a failed directory watch'), - }), - ), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Watch directory tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Watch directory received complete input', { - toolCallId, - sandboxId: input.sandboxId, - path: input.path, - recursive: input.recursive, - watchDuration: input.watchDuration, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Watch directory completed', { - toolCallId, - toolName, - watchStarted: 'watchStarted' in output ? output.watchStarted : false, - eventCount: 'events' in output ? output.events.length : 0, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - const events: Array<{ type: FilesystemEventType; name: string; timestamp: string }> = []; - - // Start watching the directory - const handle = await sandbox.files.watchDir( - inputData.path, - async event => { - events.push({ - type: event.type, - name: event.name, - timestamp: new Date().toISOString(), - }); - }, - { - recursive: inputData.recursive, - }, - ); - - // Watch for the specified duration - await new Promise(resolve => setTimeout(resolve, inputData.watchDuration)); - - // Stop watching - await handle.stop(); - - return { - watchStarted: true, - path: inputData.path, - events, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - } -}); + id: 'watchDirectory', + description: 'Watch a directory for filesystem events in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to watch directory in'), + path: z + .string() + .describe('The directory path to watch for events'), + recursive: z + .boolean() + .default(false) + .describe('Whether to watch subdirectories recursively'), + watchDuration: z + .number() + .default(5000) + .describe('How long to watch for events in milliseconds'), + }), + outputSchema: z + .object({ + watchStarted: z + .boolean() + .describe('Whether the watch was started successfully'), + path: z.string().describe('The path that was watched'), + events: z + .array( + z.object({ + type: z + .enum(FilesystemEventType) + .describe( + 'The type of filesystem event (WRITE, CREATE, DELETE, etc.)' + ), + name: z + .string() + .describe('The name of the file that changed'), + timestamp: z + .string() + .describe('When the event occurred'), + }) + ) + .describe( + 'Array of filesystem events that occurred during the watch period' + ), + }) + .or( + z.object({ + error: z + .string() + .describe('The error from a failed directory watch'), + }) + ), + execute: async (inputData, context) => { + const span = tracer.startSpan('watchDirectory') + const startTime = Date.now() + + try { + logToolStart('watchDirectory', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + const events: Array<{ + type: FilesystemEventType + name: string + timestamp: string + }> = [] + + // Start watching the directory + const handle = await sandbox.files.watchDir( + inputData.path, + async (event) => { + events.push({ + type: event.type, + name: event.name, + timestamp: new Date().toISOString(), + }) + }, + { + recursive: inputData.recursive, + } + ) + + // Watch for the specified duration + await new Promise((resolve) => + setTimeout(resolve, inputData.watchDuration) + ) + + // Stop watching + await handle.stop() + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('watch.path', inputData.path) + span.setAttribute('watch.recursive', inputData.recursive) + span.setAttribute('watch.duration', inputData.watchDuration) + span.setAttribute('events.count', events.length) + + const result = { + watchStarted: true, + path: inputData.path, + events, + } + + logToolComplete( + 'watchDirectory', + result, + Date.now() - startTime, + context + ) + return result + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('watchDirectory', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Watch directory tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Watch directory received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + path: input.path, + recursive: input.recursive, + watchDuration: input.watchDuration, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Watch directory completed', { + toolCallId, + toolName, + watchStarted: + 'watchStarted' in output ? output.watchStarted : false, + eventCount: 'events' in output ? output.events.length : 0, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) export const runCommand = createTool({ - id: 'runCommand', - description: 'Run a shell command in the e2b sandbox', - inputSchema: z.object({ - sandboxId: z.string().describe('The sandboxId for the sandbox to run the command in'), - command: z.string().describe('The shell command to execute'), - workingDirectory: z.string().optional().describe('The working directory to run the command in'), - timeoutMs: z.number().default(30000).describe('Timeout for the command execution in milliseconds'), - captureOutput: z.boolean().default(true).describe('Whether to capture stdout and stderr output'), - }), - outputSchema: z.object({ - success: z.boolean().describe('Whether the command executed successfully'), - exitCode: z.number().describe('The exit code of the command'), - stdout: z.string().describe('The standard output from the command'), - stderr: z.string().describe('The standard error from the command'), - command: z.string().describe('The command that was executed'), - executionTime: z.number().describe('How long the command took to execute in milliseconds'), - }), - onInputStart: ({ toolCallId, messages, abortSignal }) => { - log.info('Run command tool input streaming started', { - toolCallId, - hook: 'onInputStart', - }) - }, - onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { - log.info('Run command received complete input', { - toolCallId, - sandboxId: input.sandboxId, - command: input.command, - hook: 'onInputAvailable', - }) - }, - onOutput: ({ output, toolCallId, toolName, abortSignal }) => { - log.info('Run command completed', { - toolCallId, - toolName, - success: output.success, - exitCode: output.exitCode, - executionTime: output.executionTime, - hook: 'onOutput', - }) - }, - execute: async (inputData) => { - const startTime = Date.now(); - try { - const sandbox = await Sandbox.connect(inputData.sandboxId); - - const result = await sandbox.commands.run(inputData.command, { - cwd: inputData.workingDirectory, - timeoutMs: inputData.timeoutMs, - }); - - const executionTime = Date.now() - startTime; - - return { - success: result.exitCode === 0, - exitCode: result.exitCode, - stdout: result.stdout ?? '', - stderr: result.stderr ?? '', - command: inputData.command, - executionTime, - }; - } catch (e) { - const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: String(e) }; - throw new Error(JSON.stringify(errObj)); - } - }, -}); + id: 'runCommand', + description: 'Run a shell command in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to run the command in'), + command: z.string().describe('The shell command to execute'), + workingDirectory: z + .string() + .optional() + .describe('The working directory to run the command in'), + timeoutMs: z + .number() + .default(30000) + .describe('Timeout for the command execution in milliseconds'), + captureOutput: z + .boolean() + .default(true) + .describe('Whether to capture stdout and stderr output'), + }), + outputSchema: z.object({ + success: z + .boolean() + .describe('Whether the command executed successfully'), + exitCode: z.number().describe('The exit code of the command'), + stdout: z.string().describe('The standard output from the command'), + stderr: z.string().describe('The standard error from the command'), + command: z.string().describe('The command that was executed'), + executionTime: z + .number() + .describe('How long the command took to execute in milliseconds'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('runCommand') + const startTime = Date.now() + + try { + logToolStart('runCommand', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + + const result = await sandbox.commands.run(inputData.command, { + cwd: inputData.workingDirectory, + timeoutMs: inputData.timeoutMs, + }) + + const executionTime = Date.now() - startTime + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('command.text', inputData.command) + span.setAttribute('command.cwd', inputData.workingDirectory ?? '/') + span.setAttribute('command.exit_code', result.exitCode) + span.setAttribute('command.execution_time', executionTime) + span.setAttribute( + 'command.stdout_length', + (result.stdout ?? '').length + ) + span.setAttribute( + 'command.stderr_length', + (result.stderr ?? '').length + ) + + const output = { + success: result.exitCode === 0, + exitCode: result.exitCode, + stdout: result.stdout ?? '', + stderr: result.stderr ?? '', + command: inputData.command, + executionTime, + } + + logToolComplete('runCommand', output, executionTime, context) + return output + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('runCommand', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Run command tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Run command received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + command: input.command, + workingDirectory: input.workingDirectory, + timeoutMs: input.timeoutMs, + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Run command completed', { + toolCallId, + toolName, + success: output.success, + exitCode: output.exitCode, + executionTime: output.executionTime, + stdoutLength: output.stdout.length, + stderrLength: output.stderr.length, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) + +export const runCode = createTool({ + id: 'runCode', + description: 'Execute code in the e2b sandbox', + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The sandboxId for the sandbox to run code in'), + code: z.string().describe('The code to execute'), + runCodeOpts: z + .object({ + language: z + .enum(['python', 'javascript', 'typescript']) + .default('python') + .describe('The programming language of the code'), + }) + .optional() + .describe('Options for code execution'), + }), + outputSchema: z.object({ + execution: z.string().describe('JSON string containing execution results'), + }), + execute: async (inputData, context) => { + const span = tracer.startSpan('runCode') + const startTime = Date.now() + + try { + logToolStart('runCode', inputData, context) + + const sandbox = await Sandbox.connect(inputData.sandboxId) + + // Execute code using the appropriate interpreter based on language + const language = inputData.runCodeOpts?.language ?? 'python' + let command: string + + if (language === 'python') { + command = `python -c "${inputData.code.replace(/"/g, '\\"')}"` + } else if (language === 'javascript') { + command = `node -e "${inputData.code.replace(/"/g, '\\"')}"` + } else if (language === 'typescript') { + // For TypeScript, we need to compile and run + command = `npx tsx -e "${inputData.code.replace(/"/g, '\\"')}"` + } else { + throw new Error(`Unsupported language: ${language}`) + } + + const result = await sandbox.commands.run(command) + + span.setStatus({ code: SpanStatusCode.OK }) + span.setAttribute('sandbox.id', inputData.sandboxId) + span.setAttribute('code.language', language) + span.setAttribute('code.length', inputData.code.length) + + // Format result to match expected structure with logs.stdout and logs.stderr as arrays + const executionResult = { + logs: { + stdout: result.stdout ? result.stdout.split('\n') : [], + stderr: result.stderr ? result.stderr.split('\n') : [], + }, + exitCode: result.exitCode, + success: result.exitCode === 0, + } + + const output = { + execution: JSON.stringify(executionResult), + } + + logToolComplete('runCode', output, Date.now() - startTime, context) + return output + } catch (e) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e), + }) + logToolError('runCode', e, context) + const errObj = + e instanceof Error + ? { message: e.message, stack: e.stack } + : { message: String(e) } + throw new Error(JSON.stringify(errObj)) + } finally { + span.end() + } + }, + onInputStart: ({ toolCallId, messages, abortSignal }) => { + log.info('Run code tool input streaming started', { + toolCallId, + messageCount: messages.length, + abortSignal: abortSignal?.aborted, + hook: 'onInputStart', + }) + }, + onInputAvailable: ({ input, toolCallId, messages, abortSignal }) => { + log.info('Run code received complete input', { + toolCallId, + messageCount: messages.length, + sandboxId: input.sandboxId, + codeLength: input.code.length, + language: input.runCodeOpts?.language ?? 'python', + abortSignal: abortSignal?.aborted, + hook: 'onInputAvailable', + }) + }, + onOutput: ({ output, toolCallId, toolName, abortSignal }) => { + log.info('Run code completed', { + toolCallId, + toolName, + executionLength: output.execution.length, + abortSignal: abortSignal?.aborted, + hook: 'onOutput', + }) + }, +}) + +// Type exports for UI components using InferUITool +export type CreateSandboxUITool = InferUITool +export type WriteFileUITool = InferUITool +export type WriteFilesUITool = InferUITool +export type ListFilesUITool = InferUITool +export type DeleteFileUITool = InferUITool +export type CreateDirectoryUITool = InferUITool +export type GetFileInfoUITool = InferUITool +export type CheckFileExistsUITool = InferUITool +export type GetFileSizeUITool = InferUITool +export type WatchDirectoryUITool = InferUITool +export type RunCommandUITool = InferUITool +export type RunCodeUITool = InferUITool + +// Type union for all E2B UI tools +export type E2BUITools = + | CreateSandboxUITool + | WriteFileUITool + | WriteFilesUITool + | ListFilesUITool + | DeleteFileUITool + | CreateDirectoryUITool + | GetFileInfoUITool + | CheckFileExistsUITool + | GetFileSizeUITool + | WatchDirectoryUITool + | RunCommandUITool + | RunCodeUITool + +// Tool set for all E2B tools +export const e2bToolSet = { + createSandbox, + writeFile, + writeFiles, + listFiles, + deleteFile, + createDirectory, + getFileInfo, + checkFileExists, + getFileSize, + watchDirectory, + runCommand, + runCode, +} as const + +// Type inference for the entire E2B tool set using InferUITools +export type E2BUIToolSet = InferUITools diff --git a/thoughts/ledgers/CONTINUITY_ses_45e3.md b/thoughts/ledgers/CONTINUITY_ses_45e3.md new file mode 100644 index 00000000..72ea5bc7 --- /dev/null +++ b/thoughts/ledgers/CONTINUITY_ses_45e3.md @@ -0,0 +1,102 @@ +--- +session: ses_45e3 +updated: 2026-01-09T09:01:53.722Z +--- + +# Session Summary + +## Goal +Ensure `src\mastra\tools\e2b.ts` implements all 4 lifecycle hooks (`onInputStart`, `onInputDelta`, `onInputAvailable`, `onOutput`), uses typed `RequestContext` interfaces, and has enhanced OpenTelemetry tracing with all available options and features, matching the patterns used in other tools in the codebase. + +## Constraints & Preferences +- Follow the patterns established in other tools (weather-tool.ts, json-to-csv.tool.ts, fs.ts, code-search.tool.ts) +- Use typed RequestContext interfaces extending `@mastra/core/request-context` +- Implement all 4 lifecycle hooks with structured logging +- Use OTEL tracing with proper span creation, attributes, status codes, and error handling +- Emit progress events via `context?.writer?.custom()` with `data-tool-progress` type +- Handle abort signals for cancellation +- Include `InferUITool` type export + +## Progress +### Done +- [x] Read `src\mastra\tools\e2b.ts` (1451 lines) - Analyzed current implementation +- [x] Listed tools directory - Confirmed 60+ tools available for comparison +- [x] Read 4 reference tools for pattern comparison: + - `weather-tool.ts` - Shows proper RequestContext, full OTEL tracing with weatherSpan, abortSignal handling + - `json-to-csv.tool.ts` - Shows typed RequestContext with csvToolContext, span management + - `fs.ts` - Shows FsToolContext interface, SpanStatusCode usage + - `code-search.tool.ts` - Shows CodeSearchRequestContext with multiple context properties +- [x] Identified that e2b.ts has: + - ✅ E2BRequestContext interface defined (lines 8-16) + - ✅ Lifecycle hooks implemented for `createSandbox`, `runCode`, `readFile`, `writeFile`, `writeFiles`, `listFiles`, `deleteFile`, `createDirectory`, `getFileInfo`, `checkFileExists` + - ✅ OTEL tracer usage with `span.startSpan()` + - ❌ Missing lifecycle hooks for `getFileSize`, `watchDirectory`, `runCommand` + - ❌ Inconsistent OTEL tracing - some tools have basic spans, `createSandbox` has more complete implementation with events + - ❌ Some tools missing `abortSignal` handling + - ❌ Missing `InferUITool` type export + +### In Progress +- [ ] Compare e2b.ts tools against reference tools to identify specific gaps in: + - OTEL span attributes (what attributes other tools set vs what e2b.ts sets) + - AbortSignal handling (how other tools check for cancellation) + - Writer progress events (format consistency across tools) + - Span lifecycle management (start, setAttributes, setStatus, end, error handling) +- [ ] Create comprehensive improvement plan for all e2b.ts tools + +### Blocked +- (none) + +## Key Decisions +- **Parallel analysis approach**: Read multiple reference tools in parallel to quickly identify patterns and variations across the codebase +- **Pattern identification**: Focus on weather-tool.ts, json-to-csv.tool.ts, fs.ts, code-search.tool.ts as representative examples of proper implementation + +## Next Steps +1. Analyze the 4 reference tools to identify: + - Consistent OTEL span attribute patterns (what attributes are standard) + - Standard span lifecycle management (when to call startSpan, setAttributes, setStatus, end) + - AbortSignal handling patterns (where to check, what to do when aborted) + - Writer progress event format (consistent message structure) +2. Compare current e2b.ts implementation against these patterns for each of the 13 tools +3. Document specific improvements needed for each tool: + - Missing lifecycle hooks + - Incomplete or inconsistent OTEL tracing + - Missing abortSignal checks + - Missing InferUITool exports +4. Apply improvements to all 13 tools in e2b.ts + +## Critical Context +- e2b.ts defines 13 tools: createSandbox, runCode, readFile, writeFile, writeFiles, listFiles, deleteFile, createDirectory, getFileInfo, checkFileExists, getFileSize, watchDirectory, runCommand +- Reference tools show pattern: + ```typescript + const tracer = trace.getTracer('tool-name', 'version') + const span = tracer.startSpan('operation-name', { attributes: {...} }) + try { + // Check abortSignal early + if (abortSignal?.aborted) { ... } + // Emit progress events + await writer?.custom({ type: 'data-tool-progress', data: {...}, id: 'tool-id' }) + // Set span attributes + span.setAttributes({...}) + // End span + span.end() + } catch (error) { + span.recordException(error) + span.setStatus({ code: SpanStatusCode.ERROR, message: ... }) + span.end() + } + ``` +- All tools should have 4 lifecycle hooks: onInputStart, onInputDelta, onInputAvailable, onOutput +- RequestContext should be typed with specific interfaces for each tool +- Export InferUITool type for UI integration + +## File Operations +### Read +- `src\mastra\tools\e2b.ts` (full file, 1451 lines) +- `src\mastra\tools\` directory listing +- `src\mastra\tools\weather-tool.ts` (301 lines) +- `src\mastra\tools\json-to-csv.tool.ts` (209 lines) +- `src\mastra\tools\fs.ts` (171 lines) +- `src\mastra\tools\code-search.tool.ts` (378 lines) + +### Modified +- (none) diff --git a/thoughts/ledgers/CONTINUITY_ses_45e6.md b/thoughts/ledgers/CONTINUITY_ses_45e6.md new file mode 100644 index 00000000..4164a138 --- /dev/null +++ b/thoughts/ledgers/CONTINUITY_ses_45e6.md @@ -0,0 +1,76 @@ +--- +session: ses_45e6 +updated: 2026-01-09T07:49:08.009Z +--- + +# Session Summary + +## Goal +Finish C:\Users\ssdsk\AgentStack\src\mastra\tools\e2b.ts so every tool (createSandbox, runCode, readFile, writeFile, writeFiles, listFiles, deleteFile, createDirectory, getFileInfo, checkFileExists, getFileSize, watchDirectory, runCommand) uses the typed E2BRequestContext, follows canonical lifecycle hooks, and implements standardized OpenTelemetry tracing (spans, attributes, start/complete events, exception recording) and progress events; validate with LSP diagnostics and unit tests. + +## Constraints & Preferences +- Use typed request context: const requestContext = context?.requestContext as E2BRequestContext and set span attribute user.id when available. +- Lifecycle hooks must be declared after execute in canonical order: onInputStart → onInputDelta → onInputAvailable → onOutput. +- OTEL conventions: start span, set attributes (tool.id, tool.input_size, tool.output_size, user.id, sandbox.id), add events ('tool.start', 'tool.complete' with execution.duration_ms), record exceptions (span.recordException) and set SpanStatusCode.ERROR, and always span.end() in finally. Avoid secrets in spans/attributes. +- Emit progress events via context?.writer?.custom using the data-tool-progress format (id outside data). +- For watchDirectory: emit lightweight span events for FS events (span.addEvent('fs.event', ...)) rather than keeping a long-lived span open. +- Do not run full TypeScript (tsc) unless requested — use LSP diagnostics as you go. +- Keep changes small, one tool at a time, add unit tests, and avoid touching unrelated files unless necessary. + +## Progress +### Done +- [x] Located and inspected C:\Users\ssdsk\AgentStack\src\mastra\tools\e2b.ts and catalogued tools to update. +- [x] Updated standards (C:\Users\ssdsk\.opencode\context\core\standards\code.md) to include TypeScript & OTEL/tracing guidance and tool lifecycle rules. +- [x] Fixed a compile blocker in e2b.ts by removing duplicate lifecycle hook definitions in checkFileExists (resolved "An object literal cannot have multiple properties with the same name."). +- [x] Began OTEL work: added tracer (trace.getTracer('e2b-tools')), and started standardizing instrumentation on createSandbox — added tool.id, span.addEvent('tool.start'), tool.input_size, progress writer in-progress event, tool.output_size, span.addEvent('tool.complete'), and progress writer done. +- [x] Fixed createSandbox exception handling: narrowed catch variable for span.recordException to handle 'unknown' type properly. + +### In Progress +- [ ] Add missing OTEL attributes to createSandbox: tool.input_size, tool.output_size, user.id, sandbox.id + +### Blocked +(none) + +## Key Decisions +- **Standardize OTEL pattern across e2b tools**: uniform attributes/events improve traceability and make traces queryable (tool.id, user.id, sandbox.id, input_size/output_size, duration_ms). +- **Emit data-tool-progress messages**: use the standardized progress payload so UI and workflows can show consistent progress for all tools. +- **Avoid long-lived spans for watchers**: use lightweight span.addEvent('fs.event', …) inside watcher callbacks to avoid span leakage and high-cardinality traces. +- **Iterate tool-by-tool using LSP + unit tests**: small, reviewable commits reduce risk and align with your request to not run tsc as the primary validator. + +## Next Steps +1. Add missing OTEL attributes to createSandbox: tool.input_size, tool.output_size, user.id, sandbox.id +2. Add tool.start and tool.complete events with execution.duration_ms to createSandbox +3. Add data-tool-progress writer events (in-progress/done) to createSandbox +4. Verify createSandbox lifecycle hooks are in canonical order after execute +5. Run LSP diagnostics on createSandbox and fix any errors +6. Add unit tests for createSandbox asserting spans, events, exceptions, progress +7. Apply the same OTEL + context pattern to the next tool (suggest: runCode) — extract typed requestContext, set span attributes, add events, catch → recordException, set SpanStatusCode, finally span.end(), add writer progress messages where applicable. +8. Add onInputDelta hook for streaming-capable tools and ensure lifecycle hooks appear after execute in the canonical order. +9. Implement watchDirectory to record FS events as span.addEvent('fs.event', …) inside the watcher callback and avoid an open long-lived span. +10. Add tests in src/mastra/tools/tests/e2b.test.ts (success & error paths) that mock tracer and Sandbox and assert events/attributes/exception recording. +11. Repeat steps 7–10 for each remaining tool, running LSP + targeted unit tests after each commit. +12. When you want, run full repository typecheck (tsc) and lint/tests; if tsc shows unrelated node_modules declaration errors we can discuss targeted fixes or tsconfig excludes. + +## Critical Context +- E2BRequestContext is declared in e2b.ts and should be used in every execute body for typed requestContext access: + - interface E2BRequestContext extends RequestContext { userId?: string; sandboxLimits?: { ... } } +- Existing state in e2b.ts: + - Many tools already call tracer.startSpan(...) but are inconsistently instrumented (missing tool.id, start/complete events, tool.input_size/output_size, user.id). + - getFileSize currently has no span wrapper and should be instrumented. + - watchDirectory currently collects events and returns them; it needs OTEL-friendly event logging (span.addEvent per FS event). +- Error encountered (exact string): ERROR [137:34] Argument of type 'unknown' is not assignable to parameter of type 'Exception'. +- Progress event format and lifecycle hook ordering are documented in AGENTS.md and the updated standards file; adhere strictly to the format (id outside data object, status/in-progress/done, stage equals tool id). + +## File Operations +### Read +- C:\Users\ssdsk\AgentStack\src\mastra\tools\e2b.ts +- C:\Users\ssdsk\.opencode\context\core\standards\code.md +- C:\Users\ssdsk\AgentStack\tsconfig.json (inspected earlier for diagnostics) + +### Modified +- C:\Users\ssdsk\.opencode\context\core\standards\code.md — added TypeScript & OTEL/tracing guidance +- C:\Users\ssdsk\AgentStack\src\mastra\tools\e2b.ts — removed duplicate lifecycle hooks (checkFileExists) and partially updated createSandbox (added span events/attributes and progress writer) — FIXED exception handling + +IMPORTANT: +- Preserve EXACT file paths and function names when making further edits. +- Continue with LSP diagnostics and unit tests for validation; I will proceed tool-by-tool as you requested and report back after each instrumented tool with the exact diffs and any diagnostics. diff --git a/thoughts/ledgers/CONTINUITY_ses_45fc.md b/thoughts/ledgers/CONTINUITY_ses_45fc.md new file mode 100644 index 00000000..28d06e2f --- /dev/null +++ b/thoughts/ledgers/CONTINUITY_ses_45fc.md @@ -0,0 +1,73 @@ +--- +session: ses_45fc +updated: 2026-01-09T00:53:47.341Z +--- + +# Session Summary + +## Goal +Systematically analyze the AgentStack project to understand its structure, purpose, technology stack, and current state, following the 5-step analysis process to provide comprehensive context for new team members. + +## Constraints & Preferences +- Use available tools (read, glob, grep, etc.) to examine files and structure +- Follow the 5-step analysis process: Project Discovery → Codebase Structure → Technology Stack → Current State → Present Analysis +- Focus on developer needs: what a new team member needs to know +- Be thorough but concise in final report + +## Progress +### Done +- [x] Read README.md to understand project purpose (AgentStack is a production-grade multi-agent framework built on Mastra with 60+ tools, 31+ agents, 15 workflows, 13 networks, and 65 UI components) +- [x] Ran `git ls-files | head -50` to get overview of repository structure (revealed extensive .agent/, .github/, and .blackboxcli/ directories with agent configurations) +- [x] Ran `git ls-files | wc -l` to count total files (967 files total) +- [x] Listed main directories (identified 20+ hidden directories including .agent, .github, .mastra, .next, etc.) +- [x] Identified main application directories (app/, src/, lib/, docs/, public/, scripts/, tests/) +- [x] Read package.json (confirmed Next.js 16, React 19, TypeScript 5.x, Mastra framework integration, 97% test coverage, extensive financial APIs) +- [x] Read tsconfig.json (ES2022 target, strict mode, path mapping @/*, includes app/ and src/ directories) +- [x] Read next.config.ts (MDX support, Monaco editor webpack plugin, extensive serverExternalPackages for Mastra/AI packages, turbopack optimizations) +- [x] Read vitest.config.ts (jsdom environment, colocation testing pattern, v8 coverage with 97% target, excludes docs/.github) +- [x] Examined app/ directory structure (identified Next.js App Router with admin/, api/, chat/, dashboard/, networks/, workflows/, components/, etc.) +- [x] Examined src/ directory structure (identified mastra/ as core backend, components/, cli/, utils/, types/) +- [x] Examined src/mastra/ directory structure (identified agents/, tools/, workflows/, networks/, config/, a2a/, mcp/, scorers/, processors/, services/, types/, utils/, evals/, data/) +- [x] Read src/mastra/index.ts (examined Mastra instance configuration with imports for 30+ agents, 15 workflows, 13 networks, MCP servers, and observability setup) +- [x] Read app/layout.tsx (examined Next.js 16 root layout with Inter font, ThemeProvider, metadata for AgentStack branding, and structured data) + +### In Progress +- [ ] Codebase Structure Analysis (Step 2): Examine main application structure in app/ and src/mastra/ directories + +### Blocked +(none) + +## Key Decisions +- **Analysis Approach**: Follow systematic 5-step process starting with README discovery, as prescribed in instructions +- **Tool Selection**: Use bash for file system exploration and read for configuration files to build comprehensive understanding + +## Next Steps +1. Examine app/ directory structure to understand Next.js 16 App Router implementation +2. Examine src/mastra/ directory structure (agents/, tools/, workflows/, networks/, config/) +3. Read key configuration files in src/mastra/config/ (index.ts, google.ts, logger.ts, tracing.ts) +4. Examine main agent implementations in src/mastra/agents/ +5. Examine tool implementations in src/mastra/tools/ +6. Review lib/ directory for shared utilities and hooks +7. Examine UI component structure in ui/ and src/components/ai-elements/ + +## Critical Context +- AgentStack is a comprehensive multi-agent framework with financial intelligence, RAG pipelines, observability, secure governance, and AI chat interfaces +- Built with Next.js 16, React 19, TypeScript 5.x, and Mastra framework requiring Node.js ≥20.9.0 and PostgreSQL + pgvector +- Uses dotenvx for environment management and concurrent dev/build processes +- Extensive test coverage (97%) with Vitest and comprehensive linting +- Repository contains 967 files with extensive agent configurations in .agent/ and .github/ directories +- Full observability stack with Langfuse tracing and custom scorers +- Financial intelligence suite with 30+ APIs (Polygon, Finnhub, AlphaVantage) and PgVector RAG pipeline + +## File Operations +### Read +- README.md +- package.json +- tsconfig.json +- next.config.ts +- vitest.config.ts +- app/layout.tsx +- src/mastra/index.ts + +### Modified +(none)